해킹 공부/웹 해킹

Dreamhack_command-injection-1

O'bin 2022. 2. 13. 18:53

<문제 링크>

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

 

command-injection-1

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

dreamhack.io

 

 

 

<나의 풀이>

 

 1.  문제 링크 접속, 페이지 작동 확인

 

 

 

 문제 링크 접속 첫 화면

 

 

 

 

 

 

 상단 Ping탭 클릭 시 화면

 여기에 8.8.8.8을 입력해 어떻게 작동하는지 보기로 했다.

 

 

 

 

 

 

 

 

ping 전송 결과 내용이 확인된다.

 

 

 

 

 

 

 

 

 2.  메타문자 입력 검사 우회

 

 

 파일 목록을 확인해 보고자 리눅스 다중명령어(하나의 라인에서 여러 명령어를 실행할 수 있도록 하는 기호)인 세미콜론(;)을 넣어보려고 했지만 '요청한 형식과 일치시키세요.'라는 경고가 뜨며 값 입력이 되지 않았다. 

 

 

 

 

 

 

개발자 도구 Elements 탭에서 이 페이지의 html코드를 살펴보니 입력값을 검사하는 코드(빨간 밑줄)가 있는 것을 볼 수 있었다. 이 코드는 A부터 Z까지, a부터 z까지, 0부터 9까지, 그리고 . 만 허용한다는 내용으로 보인다. 다중명령어 기호를 이용하기 위해선 이 검사를 없애야 한다. 더블클릭해서 이 줄을 수정할 수 있으므로 pattern부터 20}"까지만 지워보았다.

 

 

 

html코드 수정 후 위 사진처럼 다시 다중명령을 입력했는데 이번엔 에러가 발생했다. 내가 입력한 값이 ping -c 3 "입력값" 형태의 명령어가 되는건데, 우회가 필요한 부분이다.

 

 

 

 

 

오류 우회를 위해 실행하고자 하는 명령을 큰따옴표 안에 넣었더니 드디어 명령이 정상적으로 실행되었다. ls(파일 목록 확인)명령을 실행시키니 flag가 담겨있는 flag.py파일도 확인할 수 있다.

 

 

 

 3.  플래그 획득 위한 페이로드 작성

 

 

다중명령어 실행을 위한 우회 방법을 알아냈으니 flag.py파일 내용 확인(cat) 명령을 넣으니 플래그를 획득했다.

 

FLAG = DH{pingpingppppppppping!!}

 

 

 

 

<풀이 요약>

 1.  문제 링크 접속, 페이지 작동 확인
 2.  메타문자 입력 검사 우회
 3.  플래그 획득 위한 페이로드 작성

 

 

 

 

<이 문제를 통해 배운 것>

command injection의 개념

메타문자의 정의, 예시

command injection 실행 방법

입력값 검사 우회 방법

개념이 잘 이해되지 않아도 일단 문제 실습을 해 보면 나중에 이해가 되기도 한다는 것