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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
6 r8 W% y, _! n% |& d* j% M9 x  g7 ?
" N, j0 L6 a! Y0 f$ e

$ T6 w- F  c0 @; O' Z4 v7 D( r下面将以查询mysql数据库当中user()的第一位为例:) t$ u, n9 m# X3 Y

- n+ i7 d% I0 U  F
5 c1 Q. i7 Q- w  ]( Y
5 H# p9 b# K5 X3 k. ops:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)$ k9 @& A/ j  |
& [2 C" m7 m$ M6 Y* g0 Z7 r" l% U

# P+ }  ~# k6 S8 z4 R" @- c+ X: J) }3 H4 F* e4 e+ j" }
首先执行如下sql语句:- K$ u8 r9 H0 r( l+ I* J
2 g- @+ [* `+ q, p# Q+ \, f
0 C8 h, w) J% T. N' E, K/ ]2 B

# k) G& ?$ w% B/ T$ amysql> select (ascii((substr(user(),1,1))) >> 7)=0;4 _) M3 k. x$ o# z: }9 l& E; W

8 e$ c9 |3 l% F9 c1 ? ( V: C& {) [; U! n$ a

+ f7 H* Z+ p5 l% \& T- C我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的0 s8 Z% ?& `- |, n/ _+ m

$ G; K: e4 U$ Q+ b ; f$ ?5 j) L( P/ B3 X: b

1 y' N! H0 Z$ X; h5 U第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
0 s7 N  I4 u3 a) t
: X- V) j5 V' b4 f$ w # Z1 c6 N1 |( }$ [7 K6 c
8 G8 O3 R; k- t- v, P& u+ S
如果运算结果为1,说明第一位为0,不为1* l3 j! I' d+ H" P! q
+ A% v. U9 d  s7 R* V- u
* @1 Z0 h; W% B$ ]
% Q4 S6 }! h$ R  B7 f
+————————————–+
3 C( e. z  l; g; R9 i4 n
$ C6 e  G5 J# y6 u9 ]% A; }| (ascii((substr(user(),1,1))) >> 7)=0 |3 E5 R0 E- j6 X6 Z: j7 Z
- O  r0 U4 k5 u, z
+————————————–+) k- H2 f4 f" ]8 W

, a0 U+ m3 P- K) K| 1 |$ N, T; `8 |' {7 ~  m4 G! |

! O7 L+ S1 F2 a1 ?" C' X+————————————–+) o/ v* R9 x5 o1 l2 z

- h& q0 K8 _. e3 g" Q" z1 row in set (0.00 sec)3 x2 c: @; e: Y# p
( h, n' r! C' C& V$ |1 R+ t9 l4 A
这样我们就确定这个8bit的ascii的第一位为0' R* u' _% @" z7 \4 Q+ W0 W9 V" N

  N9 m* [1 y( Y/ ~* R; F2 W . Q7 s  k8 O2 D7 P

0 Q5 S3 h$ H5 f  i' n0 _第二次我们来做6次右偏移来确定前两位. L9 y* F& V+ B. b, n5 m& ?( h

1 l4 L7 Z. @2 x8 ]" a5 V2 n" Y5 O
$ }& c) B6 V( W, L; y7 I( Q5 K9 M& [1 c" q' S, Q: f
前两位可能是01或00,即依然可以与0做比较,! L2 d3 w! |7 p6 A2 O# J+ |
# Y1 j. j# ~. P2 S& l
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
. i+ d7 \$ m6 z1 E- F
. e$ C+ V+ D, }! J0 o. w+————————————–+
$ ~4 w+ p# S+ k  x
, E( W; Y5 T7 b- Y8 q| (ascii((substr(user(),1,1))) >> 6)=0 |
# j1 h4 X7 G/ t- H% I- s( @4 M$ B$ V" Q
+————————————–+
& I0 b/ V6 N# }9 U/ c% L: v, _" i. D# S
| 0 |
- I  M# D2 Z7 N: [8 W4 P
2 a+ ?3 e$ H5 c4 }- ?+————————————–+) {2 @% [5 i4 n" s
# E3 D1 g) q" v% b; m: j" l# c
1 row in set (0.00 sec)
9 B( g0 p0 P- Y
  b( A: h4 v5 i$ V0 ?- o; y* P7 o . Z; L3 y- t. ]0 z

6 Z% l5 L% n$ N: E* S+ R结果为0,即第二位为1
9 E7 S) `7 O+ A0 y2 Q# \  ]2 v* H' b" J' x9 t, P/ s
1 j5 E( d$ N2 D$ Q& H
( w" z$ ^3 r7 ]) e+ N3 c
开始猜测前三位为010或011
  n* |% w1 ^4 p" B
6 {2 x7 v5 Q+ B' l% N) u7 q; H / h6 {* N2 C/ g1 R0 m  M% z* s( b

+ `7 {8 a9 W: ?让我们看看010和011的ascii码是多少
0 W4 l/ v1 H: N$ m% _8 b8 i7 |* @* G( W5 g8 m
# P( e& a$ y! C$ I% K) }7 T! k8 ?
; U; s: x9 W+ \7 |3 T
分别查询select b’011′ select b’010′# F; r0 t9 i1 _7 V) K8 f

( Y# H. n8 d8 n5 G8 ^
7 `( B- g. E  S* g. ^- {  x% N) Y/ Q0 `+ K- N
获得结果 010 = 2 011 = 3
" z+ O- x" C. [3 N2 T2 `; X7 c! I+ n' b

5 m2 E3 F0 b: u* b
" D% a4 w! A9 Y0 I) e$ R执行如下sql:
+ e& Y( _$ @; U  ?$ l1 Y$ B& k4 U5 J0 e% q) d, e% o

% e3 q' l+ L( \' _5 e6 i: O( p5 W5 ]: `, b' E. ], ]! J" D. I
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
0 R7 a# r1 P0 |" x. K
2 u% k# w/ b/ H6 P% g3 K: t+————————————–+1 h4 h) F$ K1 F% o& k' V
8 h  ~! P/ M$ v: d
| (ascii((substr(user(),1,1))) >> 5)=2 |* w: Z: s4 h3 {5 y" b3 g

7 H+ {0 o1 ~. q8 W: O% @( B+————————————–+
& f) V! o5 C* m6 g9 y% p2 X- o8 v
& Y; j! @+ ?$ [% S1 w4 X| 0 |0 P2 i7 M# b4 _
# m( S7 m6 v# _2 p( J
+————————————–+
$ w  p1 O1 w! I, f0 q
7 w& p7 J- R9 V/ P) @6 G0 k6 Q即前三位不为010,而是011
1 }+ [  g) [0 c5 d  \9 Q! T6 ~! t1 a4 M0 D; G

' Z% E6 V0 t. K$ H: T/ s' `3 e
: W# ]( `9 l: n8 v1 c1 N& e% ~直到获得最后一位
8 D" {) `3 r. X; [1 m; |6 i+ ]2 W
4 x3 a% _! ]1 X
" b/ T5 x  n0 U- b. g( q+ r2 e0 N) m
最终结果为:01110010
- n4 g7 M3 l! w7 d' g8 T; u# Y$ a- A+ c9 s

7 _$ Q, Y8 c  b& M; r8 v. ]6 w: |" f0 L8 N/ M
转换一下:
( z1 T! |/ H7 M/ Q$ M2 u
8 ]- W1 b8 C4 z! M7 {: z - y, G) e' B: g  Z+ t  p/ {5 \5 ^

" b% S" C" m, Pselect b’01110010′! L' N- [8 E6 P: a7 [: C

: `# Q: I) C/ z: y& U3 M* o( e
8 C6 q8 l' x, J5 m' X
3 o1 a$ I) x! M0 W$ A$ p( z查询结果
# c) [; {' M, q' i" g& m! M+ r% B* ]( Z- Q5 \# \5 I

/ u  e+ A; v( V2 l3 S8 i- ]. ?* X# v8 B: u" M) K+ b! n' o; T1 G
+————-+
+ |' T0 b( J; e* ?/ Z$ r7 i' H) L( H7 p# p9 ^0 N
| b’01110010′ |
3 i0 r9 w. @3 y& z) X
0 b- W$ g! G/ u4 h+————-+
8 ^: J6 m3 M8 h& t- b. Z3 Z. _5 b9 G' T* ~
| r |/ I3 T1 m! h* ?3 g2 h/ `4 Q! Y
+ ^: s. Y. P' f& b+ s" g4 [8 E
+————-+
6 v+ ]* {1 n* ?; `4 T' I
: p- `+ B8 P: o1 D  T5 z/ R: E1 row in set (0.00 sec)# q* K5 T( ^2 A0 N
. M3 }7 J+ Q$ T

3 b: J4 `7 |* m2 X& K+ c! X1 [0 B
这样我们就获得了user()的第一位.其它位依此类推7 m* \+ k4 b' w' Z/ H7 e3 h- q! B0 D
" a  s" c9 {) L0 e
回复

使用道具 举报

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

本版积分规则

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