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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位- y" M6 E% C, `/ D) ^: k
9 ~+ x* G+ J: J

6 r. ?+ t- O1 Z* v
: m' {' M. u$ a( B% J% e下面将以查询mysql数据库当中user()的第一位为例:
0 i- b* O! j/ X+ g5 M/ Z# T/ `! p9 @# k

9 B3 B7 @2 F2 D$ z* ?7 w3 L: A* \! j3 H0 Y1 `. D
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
, ^! ^4 e% F  J9 x
% D$ V, A+ J5 W2 t ! P( Z0 h* U- O& g
: X. Z- k- V% X$ s( U+ B
首先执行如下sql语句:/ w( ~* E& O5 O# B' W8 b% [+ a9 ^

9 I/ r4 o) G1 M0 _4 U
. Q+ O% U" l1 ~- n9 b/ K5 f0 u9 a. ?0 [
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
6 p1 x' q  o2 n% z+ }$ _9 M+ u; A" t- h$ ]1 `# u

  t/ D' D8 B) x+ I
) Z$ R4 }( @# K% `4 j( {8 C6 y! v我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的* D7 G9 Q% @3 y% o

4 m) k2 e8 B) P; w
6 k1 ?* v0 \  D- G  V4 [$ h2 q$ {/ q' ^0 I; R
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
/ t. B; h4 z( G9 F0 I  H
8 F- v; `5 m5 p6 ~
. G$ I) }( J# d: S9 {2 z% f5 W) W# m
如果运算结果为1,说明第一位为0,不为1! C$ n) K- k2 k! l

+ H+ H. L' q6 i9 ]0 w: c
2 M6 N3 S5 C; \, M- V/ t) M5 Q! _, Q5 @
+————————————–+
  n/ M7 U7 G1 P% F* V: @' P/ o! J: _2 `+ D  Z0 H3 j  D
| (ascii((substr(user(),1,1))) >> 7)=0 |
% O+ Z$ Y2 {0 N" a) e! D
  w, S7 Z2 r2 Y+————————————–+
4 H8 [+ N- P. d( M( J: ?
1 U5 s/ v" o* `/ X# x+ N| 1 |, ^) W& a7 E6 w

% L0 Z9 m" a/ O+ ~, s+————————————–+
5 x! `, s% q2 i" p- I
$ m0 R$ r$ E# @) ?9 }$ O1 row in set (0.00 sec)* Z, I: @+ Q+ B3 d
0 w; H+ H2 N( s1 g/ F3 p  }- ^
这样我们就确定这个8bit的ascii的第一位为0
! s' H* M8 E% B, U9 H; A" f7 s1 m5 Q) u: j: V! L: `: t1 u. a

. G& @! I5 Z5 o  ]# U$ o9 `* K% E) w+ [! a7 ]+ {1 C" y; W  Q
第二次我们来做6次右偏移来确定前两位+ p. C9 e+ N" f- b4 e9 {. G

- M) `  v6 o) p* k6 _. s/ ?3 |
; t- ~8 _4 T) {. l" j* P! W0 k5 N, {3 C; |8 E5 k; q
前两位可能是01或00,即依然可以与0做比较,$ c2 _9 a: `" W7 c1 i% B
5 q0 s" M9 m% f
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;$ n* O! c9 m; v& }7 _% L
4 w  z4 U6 X6 T! N  r# |( Q% ]$ y
+————————————–+
0 h6 Q4 x! v8 H( j+ k) Z  K$ F) k+ k- q8 Q
| (ascii((substr(user(),1,1))) >> 6)=0 |. c0 r8 {2 c( s! @  `; M8 t

' Q, x% P2 @  K+————————————–+  P/ |+ {' ^) k$ k9 j

7 K- A/ U2 @, G2 `| 0 |
9 f6 K3 i0 L! G4 J* l) T: x4 I+ D- X1 c2 R
+————————————–+
' g. ]# X/ W4 @
3 Q4 {8 E4 k' P) [9 d" @! G, r. ]1 row in set (0.00 sec)/ q( R3 r) V! i) I4 d  W8 k% ?- t

! s4 I! h: D, ]. L 1 M" M# e6 M/ E8 j6 ]6 M( @: q
2 _2 U( @8 u" E" v7 `9 n: f) G  @8 i( x
结果为0,即第二位为1
- |9 s8 ?- \! t" O5 m  ]& M( j
6 Y  v% i& M* [' `! i
6 m" T  n* b7 N3 ?% h) j7 [* N0 a% w1 ?; B
开始猜测前三位为010或011, L1 T, x4 a  [& }) Z$ ?0 W
* T7 D$ t$ V- W/ r9 V8 |
- F: g: y& e, Y* Q( U

0 y  n2 L- ~9 F/ X$ L让我们看看010和011的ascii码是多少* z0 A: Y: z  N* ^3 f* v
7 U' {& V* `0 l

7 m* v: Y$ Z" [+ G
+ `- }+ l& J5 @* P分别查询select b’011′ select b’010′  {6 }. o5 G' j; e! e5 ?

' d! _4 c7 C! N) V5 g) t2 a ) a8 q& I! v, _. M9 u" r5 |# N/ V8 |
2 l: x. E- J) I( _
获得结果 010 = 2 011 = 39 {/ k: a1 Z3 L, Z( ^" e
- K" x) {& z) }+ s1 Y) [

1 _' s& W. V5 s* T8 F5 J( n
$ e) L5 p2 t; Y  l执行如下sql:' |. E& l) ^, t3 g/ T! H1 w  p: t

6 Q. ^' D) w6 }3 L- ?9 ^1 u0 A3 v ) j! s4 c# w( I' I
  F- ?$ c) F) i  K
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;% Q) M3 X7 R! p$ V6 u# Z1 V. R

# y0 x9 V  Q! [! N% n+————————————–+
$ k0 Q# m  a3 g) F: O1 D+ B- W$ t9 x5 L: ^  B6 V) f1 v
| (ascii((substr(user(),1,1))) >> 5)=2 |
( Q. I! T3 q" C9 \+ o8 c! W0 [0 c0 q2 G" o- l/ }
+————————————–+
" K: Y+ w9 S, l+ t5 p9 K! g
6 v2 _$ M! k1 n% l# F2 j3 i9 w3 n| 0 |
* p( e+ \. @. n, q8 }6 {- x. p: y* x
+————————————–+
- ^7 Z% P: f7 M, n% K8 |
' m# D% ]' `) u0 J. F6 Z4 J, s即前三位不为010,而是0112 h9 F: S: a& S. ^- E- z

, a; s% O. n& f9 U : W0 T% ~4 @+ L6 Y8 }8 P
9 ~! o6 A2 [  P
直到获得最后一位$ m: t- H; w. q4 @  l+ N

: R" e! l) _7 S. S5 `  r% n
% [; |& F# v' b
: k0 Y6 C* Y- B5 M2 J% _+ t最终结果为:01110010
/ z6 `; z: v7 o  }- l3 i, ]; w+ m3 {$ j8 p( I. S

4 |& W, k  g' x, y' e/ T5 F3 W( ?; l: g9 W- }
转换一下:  G; p  n/ K# T
# H  @7 [, T9 }' K
/ J5 Q$ ?* s- O( g; ~' L

! o# w0 R  d' {select b’01110010′
6 h+ [7 B7 n3 I+ F
; v4 x/ N2 r2 F6 n4 I6 ] ! v2 D" O& f. |% K

3 R' X  D# _0 h4 S9 ^查询结果0 j8 R3 `1 p: g
7 N% t" q2 E' O2 v

4 w- M3 b" S+ W- b. M2 m, g
9 u. r% s6 [# K8 x+————-+5 P( g! q  B! W7 W) x

: \# ~6 c4 D$ M( ^3 M* ~8 V| b’01110010′ |5 R: d& V5 {. ]" u1 `

+ _8 Y8 @" G9 g2 O+————-+& ?/ [8 W2 s; g8 d' A
3 \" f( D# |7 N) t' {4 A
| r |& c7 ^, x3 [) G9 k, ~0 m4 Q; }
5 _5 F5 y# m! b/ Z; R  R
+————-+
. G; m9 d& D. B# i
6 E1 ?" v: R2 C7 H8 c6 w! }+ o( `1 row in set (0.00 sec)
+ a4 x/ @1 a: [+ E; c* a6 Z6 _( n! r3 T2 X: [
" l; C* ?0 b  O! o5 N3 h  G% @

9 X: |7 L; J* C/ o$ k这样我们就获得了user()的第一位.其它位依此类推
- P3 z2 L" R+ ^3 m1 [# y$ F* ~8 O4 R8 t# B# {  \% _, @
回复

使用道具 举报

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

本版积分规则

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