본문 바로가기

Wargame/▷ xcz.kr

[xcz.kr] prob26 ju57_ENc0dE

[xcz.kr] prob26 ju57_ENc0dE 암호화 문제다.

base64 인코딩 디코딩 원리에 대해서 공부하다가 몇몇 리버싱 문제를 풀어보고 계속 문제찾아보다가 생각난게 해당 문제다.

해당 문제는 base64 암호화 원리와 굉장히 유사한데 테이블만 따로 구성되어있는 것 같다. (패딩 값이 P)

base64 는 재귀함수를 이용해서 brute force하면 굉장히 편하게 나온다.


[Solve]

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
30
31
32
33
34
import urllib, urllib2
 
url = 'http://xcz.kr/START/prob/prob26.php'
cookie_data = {'cookie''PHPSESSID=h1e48rj32gqvehjm7f0iv5rdt1;'}
en_flag = 'Yh9/=-^:86/f87Y?]-@L}<_E|*1/=-Xi!"Hx865C|-}:|*DL*G_i86/f868FX(@g@-Lh|)=D}_93@_18@g9,*3YC$(@P'
 
def trans_data(name, url, cookie_data):
    post_data = {'encode': name}
    post_data = urllib.urlencode(post_data)
    request = urllib2.Request(url, post_data, cookie_data)
    response = urllib2.urlopen(request)
    response = response.read()
    res_idx = response.index("ENCODE : ")
    res_last_idx = response.index("</font></br></br>")
 
    return response[res_idx + 9: res_last_idx - 1]
 
 
def solve(flag, index):
    for bf in range(32127):
        name = flag + chr(bf)
        out = trans_data(name, url, cookie_data)
        if out == en_flag:
            print "Flag is " + name
            exit(1)
        if out.find(en_flag[:index + 1]) > -1:
            print name
            solve(name, index + 2)
        elif out.find(en_flag[:index]) > -1:
            print name
            solve(name, index + 1)
 
if __name__ == "__main__":
    solve(''1)
cs


'Wargame > ▷ xcz.kr' 카테고리의 다른 글

[xcz.kr] All Clear  (6) 2018.02.08
[xcz.kr] prob25 XCZ Captcha!  (0) 2018.02.08
[xcz.kr] prob34 - Get the key, If You Can  (0) 2017.06.14
[xcz.kr] prob19 - Revershit!  (0) 2017.01.30
[xcz.kr] prob18 - Web Basic  (0) 2017.01.30