https://dreamhack.io/wargame/challenges/44/
드림핵 command-injection 기초적인 문제이다.
문제 사이트의 첫 화면
Ping으로 들어가보자
Ping으로 들어갔을 때의 모습이다. 주소를 입력하면 ping을 쏘는 것으로 추측된다.
이제 첨부된 파일을 열어보자
app.py를 열었을 때의 모습이다. 코드를 천천히 뜯어보자.
플라스크로 이루어진 것을 볼 수 있다. 그 중 ping() 함수를 주목해보자.
'host'라는 값을 받아와 변수 host에 저장하고 그 값으로 ping 쏜다는 것을 알 수 있다. 그렇다면 /Ping 화면에서 봤던 입력창이 host일거라고 판단된다. 확인해보자
<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를 해보자
플래그를 찾을 수 있다.
'웹 해킹 > 드림핵' 카테고리의 다른 글
[드림핵] 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 |