2016 trend micro ctf offensive100 write up

Crypto & Math

2016.08.01 19:43

간단해서 간단히 씀






스크린샷 순서로 살펴보면 

checkpw함수에서 co, ca, cq 함수의 인자는 입력한 passwdbody에서 3부분의 md5 hash값인 것을 파악할 수 있다.


세 함수에서의 비교값은 그냥 replace 되있기 때문에 알 수 있다.

이 값들을 md5 decrypt하여 어떤값이 되는지 확인하고, 

checkpw함수에서 flag와 nl배열이 1:1로 대치되기 때문에, decrypt된 값을 이용해 역연산하는 함수를 만들면 된다.



co = '654321'
ca = 'admin'
cq = 'qwerty'
nl = [0,2,1,12,7,15,5,4,8,16,17,3,9,10,14,11,13,6,0]

flag = [0] * 18
flag[0] = ' '#first letter blank

for i in range(1, 7) :  #h1
    tmp = (3 * i) - 2
    flag[nl[tmp]] = co[i-1]

for i in range(1, 6) :  #h3
    tmp = (3 * i)
    flag[nl[tmp]] = ca[i-1]

for i in range(1, 7) :  #h2
    tmp = (3 * i) - 1
    flag[nl[tmp]] = cq[i-1]

print ''.join(flag)