2017. 9. 28. 21:37ㆍWebHacking/[OverTheWire]Natas
1> 초기 페이지
2> 페이지 소스코드
3> PHP 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <? $key = ""; if(array_key_exists("needle", $_REQUEST)) { // 사용자로부터 입력을 받는다 $key = $_REQUEST["needle"]; // $key 변수에 입력값을 저장한다 } if($key != "") { if(preg_match('/[;|&`\'"]/',$key)) { // ; , & , ' , " : 특수기호 금지 print "Input contains an illegal character!"; } else { // 해당 문자열이 없는 정상적인 입력값일 시 다음 명령어 실행 passthru("grep -i \"$key\" dictionary.txt"); // passthru(command) 명령어를 실행시킨다 } // system(),execute()함수와 동일한 기능 } ?> | cs |
4> 문제 접근법
리눅스에는 "" 안에 있는 문자열을 명령어로 인식하도록 하는 특수문자가 존재합니다
`Command` or $( "Command" ) 가 있습니다
`` 가 막혀있기 때문에 이번 문제에서는 $() 기호를 사용하도록 합시다
# 문제 적용
URL?needle=eun$(grep%20a%20/etc/natas_webpass/natas17)&submit=Search
동작 순서
[1] $(grep%20a%20/etc/natas_webpass/natas17)
natas17파일에서 문자 a를 검색하고 있으면 해당 문자열 반환, 없으면 아무것도 반환하지 않는다
[2] needle=eun ( 없을 시 ) or euna ( 존재할 때 ) 가 될 수 있다
[3] eun 이 검색되어서 화면에 reunion 등등이 출력되거나 euna 가 검색되어 화면에 아무것도 출력되지 않는 경우가 있다
[4] 아무것도 출력되지 않는다면 문자가 존재한다는 뜻이므로 해당 조건의 문자들을 모으면 답이 될 것이다
* 위의 예에서는 a가 natas17 파일에 존재 하지 않기 때문에 eun 이 검색되어서 reunoin 등등이 출력되었다
5> 파이썬으로 자동화 프로그램을 작성하자
6> 와이어샤크 캡쳐화면
7> 실행결과
* 실행도중 인터넷이 끈켜 마지막 문자 w 가 출력되지 않았습니다 ^^;
natas17 : 8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw
'WebHacking > [OverTheWire]Natas' 카테고리의 다른 글
[ Natas 18 -> Natas19 Session Hijacking ] (0) | 2017.09.28 |
---|---|
[ Natas 17 -> Natas18 PHP Injection ] (0) | 2017.09.28 |
[ Natas 15 -> Natas 16 PHP Injection ( 비밀번호 유추 ) ] (0) | 2017.09.28 |
[ Natas 14 -> Natas 15 PHP Injection ( 쿼리 조건문 변조 ) ] (0) | 2017.09.28 |
[ Natas 13 -> Natas 14 파일 시그니처 ( File Signature ) ] (0) | 2017.09.25 |