슈포스/워게임

[web]Dreamhack_command-injection-1

haerim9.9 2024. 11. 12. 15:06

문제 설명

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

 


 

이 문제는 해당 링크(https://learn.dreamhack.io/592#1)에서의 설명을 토대로 풀어나갔다.

 

코드를 살펴보면

cmd 변수에 host 값이 들어가있는 것을 확인할 수 있다.

host 값은 웹페이지(아래 사진)에서 입력받고 있으며, 이를 이용하면 문제를 풀 수 있다. 입력받는 host 칸에 cmd 명령어를 입력하면 되는 것이다.

"은 8.8.8.8까지가 문자열의 끝이라는 걸 알려주기 위해 입력한다. 이후 명령어를 이어서 실행하기 위해 ;를 붙여주고, 파일 목록을 보기 위해서 ls 명령어를 입력해준다. #은 주석처리를 위해 적는다.

*주석처리를 하는 이유 : cmd = f'ping -c 3 "{host}"' 형태인데, host값 중간에 큰 따옴표를 임의로 삽입해 주었다. 따라서 뒤의 따옴표가 남는데, 이를 무효 처리하기 위해 주석을 달아준다.

 

이대로 호스트 넘버인 8.8.8.8 뒤에 "; ls #을 입력해주었다. 그러나 요청한 형식, 정해진 형식의 값만 입력받는 것을 확인할 수 있었다.

웹페이지로 가서 f12를 눌러 소스를 확인해 본다. 

보면 pattern에서 알파벳, 숫자, "." 기호만 입력받는 것을 확인할 수 있다. 이를 지워주자.

ping 우클릭 -> override content 클릭 -> 저장할 폴더 선택을 하면 수정할 수 있다.

 

코드 수정후, 새로고침해준다. 그리고 다시 아까의 8.8.8.8"; ls #을 입력해주면

잘 실행되는 것을 볼 수 있다. 파일 목록 중, flag.py가 존재하는데 이번에는 cat 명령어로 이 파일의 내용을 확인해보자.

 

8.8.8.8"; cat flag.py #를 입력하면 된다.

cat 명령어를 실행해 주면, flag.py 파일 안에 있는 플래그 값이 나온다.


개인 공부 목적으로 작성된 글이며, 틀린 정보나 해석이 있을 수 있음.

https://dreamhack.io/wargame/challenges/44

 

command-injection-1

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

dreamhack.io

 

'슈포스 > 워게임' 카테고리의 다른 글

[web]Dreamhack_ex-reg-ex  (0) 2024.11.19
[misc]Dreamhack_baby-linux  (1) 2024.11.19
[misc]Dreamhack_Exercise: Docker  (2) 2024.11.11
[web]Dreamhack_🌱simple-web-request  (0) 2024.11.04
[web]Dreamhack_Flying Chars  (0) 2024.10.31