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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
0 |: l4 z3 |0 k: j) _4 J5 `3 X9 ?

9 p; S% u. U; b" K& y0 @, ?1 k5 S' y  V7 R! T7 r: g  z
下面将以查询mysql数据库当中user()的第一位为例:8 l: X4 O" S9 g: N

/ V+ h; p. Z# Q( S8 c+ Q
% l8 F2 H4 l9 q2 p
+ t) o+ q, c& X- d# }ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
1 @  P; F4 K- F; J+ a4 R' C
6 R8 V6 h  s2 Q ) o, r4 h3 H8 T' Y' S& L

5 q) P# w$ O) P" N: S2 f7 J首先执行如下sql语句:
' |( z8 p' b1 F# F  b8 A* G3 w% h- R4 G

- V) w8 j8 k: v$ ~) X4 p( Z% O& t5 s- r+ N4 y, y) e. ]+ j8 X4 m
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
( E) z7 {5 q+ b5 n8 g: K! a9 a! G: O" t, d/ K: D' s
( d; Z# `4 m$ Y0 k
! n; `2 r! t: f" d; a9 a* ]8 H( I
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的& r. P+ w4 w5 `, K1 v- ^4 }
- g6 a6 _; K( x( j  B! Q
6 F6 _% [& ^# ?4 J
1 Y, E1 ?# @# f. O6 s) Y
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1' o+ \5 D7 H7 h# R5 K. r: w$ \( `$ q

6 N7 P# c4 e! [/ B9 R   m7 e5 B% B! `5 ], R2 N

: T% F7 q" I+ N2 O8 Q6 K如果运算结果为1,说明第一位为0,不为1% p( |: R4 i5 F4 A  T

- u: N: ^9 j' O* b . ?% }1 U2 a3 y4 _* c
& N$ p$ g  M! w% \
+————————————–+
7 \! y: o# X* L/ u  [, c3 W# {- \  U: e% ]# \
| (ascii((substr(user(),1,1))) >> 7)=0 |% ^& \2 \8 s/ u( E* ]

6 W8 a+ l0 y/ r4 Y5 A! g) ~2 x+————————————–+3 m* p0 j: j" \/ G

  \- z, z- E7 o1 I1 Z| 1 |
8 J' O+ o4 `. f
- f2 q1 d$ m8 E  `+————————————–+
4 o' |, A. U" P9 l! g4 G- b9 L9 k( S6 F+ I+ h6 Z% C
1 row in set (0.00 sec)4 O  c" F, }' x
) H& [: E0 \  P9 s
这样我们就确定这个8bit的ascii的第一位为0
% l7 d, f* R: H4 K& N8 N8 x( y& x: y* j5 t" s
; P* r: x4 y( ?9 K/ D0 w5 j
+ a0 [5 Z: v% g$ W' i' i
第二次我们来做6次右偏移来确定前两位$ E/ b1 a+ Z. A' G
  P+ _2 O3 S+ j6 l/ Z

4 `5 w0 p- x, E; \! s; t% K1 r' G# N4 ?3 U1 x1 Y, X' }
前两位可能是01或00,即依然可以与0做比较,
% I/ p- |! Y" w# f3 V! ]' s! K& L
* x- A4 V! y3 v5 d; ^( [  Kmysql> select (ascii((substr(user(),1,1))) >> 6)=0;
  m- Y: L( d8 K
$ r* v9 R: a- U4 J4 P+————————————–+
$ f, V( E5 W5 N8 g4 z8 g5 b- p) S5 o- [3 o! z+ f
| (ascii((substr(user(),1,1))) >> 6)=0 |
+ ?& S2 }/ [# l- M% m. G+ E3 ]) j. W6 a) D2 ?4 J
+————————————–++ M6 G" U  b8 Y3 m+ n0 v
, e' ~6 H1 \2 r: _
| 0 |) `1 z5 G4 n  y

, B  H" B8 m) _+————————————–+, i7 ]1 l3 q" S8 M1 q
+ X8 v% T; n: k- d. w
1 row in set (0.00 sec)
7 f+ ]% [9 H2 F% t2 E- ^! r" f2 [1 w# o2 x+ S9 r# I3 u

- K' ~$ R* H9 l  X: y! D# C+ R# E5 D# f- [$ D3 \( F+ |& m1 v
结果为0,即第二位为1
. R, t) V, n% g
: Q% \& e$ z9 p. m) K+ ~
1 ?, l; {! p* d+ Q; w/ n- g. Y5 h5 y) }2 @% q0 V3 V+ D! }
开始猜测前三位为010或011
1 A) g  J4 t" ?& e) J: M2 b; b+ O3 ^" s- P) n7 ?$ g" X

' ]5 N" N! S4 L- L  s9 q9 _5 E. Y3 ?5 v+ @
让我们看看010和011的ascii码是多少
  K4 j: A# [6 H' B: D- P- \" l
' p# D' y: ?, I. P  X7 a( {# [
0 d3 u4 X1 N; D2 c
7 m0 U3 {+ j- |3 ^0 R3 \& K. J分别查询select b’011′ select b’010′7 \$ N) p; c# H! m# c7 A; e
3 F: B# k, H2 @1 i4 Y; }

" ?7 [! e) k" J. p* l( \
& ]' p% [+ L$ a" b# U. C获得结果 010 = 2 011 = 3  {' V5 ~5 I( \% h2 {" f

) k" I+ y& V/ U5 R0 b; | + g) _" X+ |; g, ?% Y* j
2 |0 j0 b' O$ R/ ]. d
执行如下sql:
$ J5 _0 |! O. B2 L4 ~8 E* r$ ~4 ^  a# ~: E6 ^1 z! @

" u# m6 |5 ~* j6 Z+ t% y
! H8 ], C6 ~/ kmysql> select (ascii((substr(user(),1,1))) >> 5)=2;; D& j( O$ E7 ~/ k5 w+ c! l- o& A- t
3 j9 H& u% K% w8 T/ T1 p( s
+————————————–+8 M6 h7 x* i. O3 S+ }9 s
2 G4 q7 M" A# M% e7 i
| (ascii((substr(user(),1,1))) >> 5)=2 |
# Z4 b( H( F% Z% I: e5 @1 c7 k7 [$ P4 q1 n# [" K5 o
+————————————–+4 ~7 |+ m+ S! _! B% @

4 I) f; u- ^# a) V8 c| 0 |  }% Y$ |; |$ ?! N% S* `
& I4 Q& B9 O# B' _3 G2 l7 G6 }
+————————————–+- v' s& v# ~; P( }/ [
0 [( r0 v. Z" X  F) A: s! D
即前三位不为010,而是011
5 J0 P% ], |" m; f& p5 }* w5 n& l' E* B  ^6 }- d0 W; T

  Z% U- g4 t0 ^7 w. {$ j- i2 O
! y8 _6 t: y  v5 J% S+ ~直到获得最后一位  i: N1 X) h# J5 J6 C# l

0 \) p) N' A- U, t! k1 O' F, O% L/ U; u 2 e6 ~* R' D9 P" h
  a7 ?& s# F" e* P0 Z1 t
最终结果为:01110010% H9 O/ Q' ]6 I* Y

6 U8 [: ?7 o! }4 E& B2 { : s, w$ ^" r' R/ E1 t' [
6 I& j; d9 F- ?) X& p! \( O5 w
转换一下:
" U6 ]/ Z6 d( w& S8 H; l" c/ o5 S" @4 \* V1 g6 i0 H% @
7 w" \7 ?2 ?, C

5 K1 _) d7 U- \2 eselect b’01110010′$ z! ]6 Q& u; `% S
6 H) w/ r' t6 K  o- l6 G- X5 o' f

5 h$ W6 O1 E1 p, O' k- _( H% x8 _4 g7 x) b
查询结果
' \# E; }2 F, F1 x8 w* g+ Z( A; z6 b4 @% T; h3 b4 Q" N3 J; e

2 Y! z, u; f0 B+ r/ ^' i
+ t! J3 G# A( U; Y0 [' g3 Y+————-+
7 G" b) f& ]9 t# U2 Z
( `! h% J) T# S5 [" j| b’01110010′ |6 Q# q' S" j. _) K" l

8 d- _8 O/ r6 x* h# ?+————-+
1 L! i# c3 f0 j% m* o. ~9 c% v
0 Q! R/ p1 l8 X| r |
' ?, V% p) Z) E, {% J* r3 ~! A! x) ]/ L# o3 y4 t' c
+————-+7 S' u  K7 O  h1 W: p

; ]3 w- J% U3 d& p. J3 q1 row in set (0.00 sec)/ ~4 V- ^/ M( I* [

: r2 E- T. S0 x# d( u% r $ m, e: V9 b* R

% r# X* e2 z. E4 K这样我们就获得了user()的第一位.其它位依此类推/ \' w" L- Y$ Q" V( R
' Q4 V' s7 F, a! V& c
回复

使用道具 举报

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

本版积分规则

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