문제풀이

[Dreamhack] command-injection-1 문제풀이

suuuullloc 2023. 10. 11. 15:52

# 문제링크 : https://dreamhack.io/wargame/challenges/44

 

command-injection-1

특정 Host에 ping 패킷을 보내는 서비스입니다. Command Injection을 통해 플래그를 획득하세요. 플래그는 flag.py에 있습니다. Reference Introduction of Webhacking

dreamhack.io


문제 설명

 

문제 파일 다운받고 사이트에 접속해주자.

 

Ping 버튼을 누르면 이렇게 ping을 보낼 수 있다. 8.8.8.8로 ping을 보내보자.

 

이렇게 ping 결과가 나온다. ping을 보낼 때 command injection 공격을 실행해야 하는 것 같다.

 

Command Injection은 웹 요청 메시지에 임의의 시스템 명령어를 삽입하고 전송하여 웹 서버에서 해당 명령어를 실행하도록 하는 공격이라고 한다. 소스코드를 확인해보자.

 

소스코드 중 ping 함수를 정의하는 부분에서 "ping -c 3 "{host}"' 부분이 눈에 띈다. 이를 이용해 cmd창에 접속하여 command injection 공격을 실행할 수 있을 것 같다.

 

흠... 메타 문자 중 ";"을 이용해 다중 명령을 전달하려고 했는데 안된다.

 

형식 확인을 위해서 ping 창 소스코드를 확인해봤다. 패턴이 지정되어 있는 걸 알 수 있다. 패턴 지정을 피하기 위해 프록시를 이용해 우회해서 입력값을 바꿔주자.

 

프록시를 이용해 패킷을 가로챈 다음 8.8.8.8":"ls로 바꿔서 다시 날려줬다.

 

그랬더니 이런식으로 전송돼서 파일 목록들이 보인다. 파일 중에 flag.py 파일이 있다. 이를 cat 명령어를 이용해 열어주자.

 

다시 한 번 패킷을 가로채서 이번엔 8.8.8.8";"cat" "flag.py로 바꿔서 날려줬다.

 

이렇게 flag.py의 내용이 보이면서 플래그도 함께 보인다.

 

flag값을 입력하면 문제 해결!