본문 바로가기
CTF/Dreamhack

[Dreamhack] Command Injection Advanced

by 8희 2023. 9. 20.

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()를 이용하여 파일이 존재하면 덮어쓰고, 존재하지 않으면 생성하므로 웹쉘에 올렸다.

 

https://gist.githubusercontent.com/joswr1ght/22f40787de19d80d110b37fb79ac3985/raw/50008b4501ccb7f804a61bc2e1a3d1df1cb403c4/easy-simple-php-webshell.php

 

웹쉘은 깃허브에 올려진 코드를 이용할 것이다.

[웹쉘 url] -o /var/www/html/cache/webshell.php

 

/var/www/html은 아파치의 기본 경로라서 한 것이다. 

 

 

url을 전송하면 내용을 읽었으므로 파일이 생성됐다고 추측할 수 있다.

 

 

/cache/webshell.php로 이동하면

업로드한 웹쉘의 모습을 확인할 수 있다.

 

 

ls -la / 명령을 이용해 flag를 확인한다.

flag가 실행 파일인 것을 확인할 수 있다.

 

 

/flag로 flag를 실행시키면 flag를 획득할 수 있다!

 


참고

https://jwcs.tistory.com/30

https://velog.io/@jckim22/%EB%B9%A1%EA%B3%B5%ED%8C%9F-8%EC%A3%BC%EC%B0%A8-%EA%B3%BC%EC%A0%9C-11-%EB%93%9C%EB%A6%BC%ED%95%B5-%EC%9B%8C%EA%B2%8C%EC%9E%84-Command-Injection-Advanced

 

 

'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