[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(32, 127): 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 |