https://dreamhack.io/wargame/challenges/413
Command Injection Advanced
Description Exercise: Command Injection Advanced에서 실습하는 문제입니다. 문제 수정 내역 2023.07.27 Dockerfile 제공
dreamhack.io
Command Injection을 실습하는 문제이다.
가상머신에 접속하면 url을 입력하여 전송할 수 있게 되어 있다.
index.php 파일을 확인해봤다.
strpos 함수를 이용해 'http'가 url 변수 맨 앞에 위치해 있는지 확인하고
http가 맨 앞에 위치해 있을 경우 shell_exec()함수를 통해 쉘 명령어를 실행한다.
line 14, shell_exec()에는 curl 명령어와 escapeshellcmd()가 있다.
escapeshellcmd(): 특정 문자를 escape 시키는 함수로 -는 escape 시키지 않는다.
따라서 curl -o를 사용하면 파일을 생성할 수 있다.
* curl: http를 사용하여 경로의 데이터를 가져오는 명령
* curl -o: curl로 받아온 내용을 FILE 이라는 이름의 파일로 저장
그리고 file_put_contents()를 이용하여 파일이 존재하면 덮어쓰고, 존재하지 않으면 생성하므로 웹쉘에 올렸다.
웹쉘은 깃허브에 올려진 코드를 이용할 것이다.
[웹쉘 url] -o /var/www/html/cache/webshell.php
/var/www/html은 아파치의 기본 경로라서 한 것이다.
url을 전송하면 내용을 읽었으므로 파일이 생성됐다고 추측할 수 있다.
/cache/webshell.php로 이동하면
업로드한 웹쉘의 모습을 확인할 수 있다.
ls -la / 명령을 이용해 flag를 확인한다.
flag가 실행 파일인 것을 확인할 수 있다.
/flag로 flag를 실행시키면 flag를 획득할 수 있다!
참고
'CTF > Dreamhack' 카테고리의 다른 글
[Dreamhack] file-special-bit (0) | 2023.09.26 |
---|---|
[Dreamhack] welcome (0) | 2023.09.26 |
[Dreamhack] command-injection-chatgpt (0) | 2023.09.20 |
[Dreamhack] simple-web-request (0) | 2023.09.16 |
[Dreamhack] phpreg (0) | 2023.09.13 |