본문 바로가기
드림핵

[드림핵] command-injection-1 문제풀이

by jwcs 2023. 2. 6.
728x90

 

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

 

command-injection-1

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

dreamhack.io

드림핵 command-injection 기초적인 문제이다.

 


첫 화면

문제 사이트의 첫 화면

Ping으로 들어가보자

 

/Ping

Ping으로 들어갔을 때의 모습이다. 주소를 입력하면 ping을 쏘는 것으로 추측된다.

이제 첨부된 파일을 열어보자

 

첨부된 app.py

app.py를 열었을 때의 모습이다. 코드를 천천히 뜯어보자.

플라스크로 이루어진 것을 볼 수 있다. 그 중 ping() 함수를 주목해보자.

 

'host'라는 값을 받아와 변수 host에 저장하고 그 값으로 ping 쏜다는 것을 알 수 있다. 그렇다면 /Ping 화면에서 봤던 입력창이 host일거라고 판단된다. 확인해보자

 

/Ping 페이지의 개발자 도구

<input>태그 안에 name="host"인 것을 확인할 수 있다.

그렇다면 shell 명령어를 이용하여 injection을 시도해보자.

해당 구문을 풀어서 설명하자면 app.py의 cmd 변수로 돌아가보자

cmd = f'ping -c 3 "";ls"'

라는 명령어를 입력한 것이다.

;라는 메타문자와 ls라는 쉘 명령어로 파일들을 들여다보는 인젝션을 시도했지만 막혔다. 이유가 무엇일까?

 

아까 보았던 /Ping 페이지의 개발자 도구이다. 자세히 보면 pattern="[A-Za-z0-9.]{5,20}"을 볼 수 있다.

해석해보자면 알파벳 대소문자와 점(.)을 이용한 5~20글자만 받는다는 뜻이다.

이 부분을 지우고 진행해보자

flag.py를 찾아볼 수 있다.

같은 개념으로 cat ./fag.py를 해보자

플래그를 찾을 수 있다.

728x90
반응형

'드림핵' 카테고리의 다른 글

[드림핵] devtools-sources 풀이  (0) 2023.03.09
드림핵 Carve Party 문제 풀이  (0) 2023.02.20
드림핵 web-ssrf 문제 풀이  (0) 2023.02.17
드림핵 file-download-1 문제 풀이  (0) 2023.02.11
드림핵 image-storage 풀이  (0) 2023.02.09