[ Natas 16 -> Natas17 `Command`,"$(Command)" ]

2017. 9. 28. 21:37WebHacking/[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