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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
$ ^1 N! ^4 P0 c2 M: K# Q' p; r4 K( g8 \8 A

( o1 R$ R  z8 e9 C# n& {) h; p( r! r  X0 l
下面将以查询mysql数据库当中user()的第一位为例:
/ L( o; m* l# r# Z- d! I" i  M5 M+ T+ R0 g7 F% u1 ^1 Q& R
8 h0 B/ _& u8 g9 R

1 ?3 o& P! j' i, D/ ~# H# yps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)% I& h) [  }# E7 X8 A% @& p/ C

# q5 D7 @' U6 g% o0 B- J+ E / S: q9 Z9 ]4 a0 h7 o3 j7 y
4 I* C8 \/ k& L; [( n
首先执行如下sql语句:2 I- X  [" M8 Q8 m; w! J1 `  j

" S1 c1 c) ^7 O
* r% i2 f, `9 n5 _" u! u5 Z; |) a  v
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;' J( _8 r& I& w% g  Q# j

  t  @* Q9 z9 | 8 k$ }4 Z; Q; Q3 v3 H, m) d
. ~3 k9 v' G, n) i' J) e7 L; o
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的' d  ]2 g, }9 H& _
& c! {+ y0 f3 C* w3 o/ A. v
: Q% R$ y9 r$ T3 s( V

+ }+ h& O- i/ k( }第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
5 Z- s( A  P; m; X6 r9 [1 \$ @* I( l/ Q1 [" }; J1 h  n; u) U

8 x2 A* B! P0 {" K3 W* S2 D7 b
3 X  X* u" g/ f; \; o( [% B如果运算结果为1,说明第一位为0,不为11 `% V% Y0 J5 Z' I& ?# e% h
( T9 n5 [/ V9 `+ Q- }3 e2 c

' w. E" S9 ~' T2 c% }1 L7 u4 P3 w9 G* L! E* ^
+————————————–+) V! [! h5 j9 S7 R8 z0 }* n3 V$ M

: B6 b3 D- f+ _| (ascii((substr(user(),1,1))) >> 7)=0 |
; T$ V. Z7 p' _4 @8 w/ q* M* T, q0 D, R& K) _; ?* ?1 t- ^+ s+ b
+————————————–+
0 `& J* ~6 {8 l! v' f5 F2 I3 P! Z4 {
| 1 |+ C  |$ y& w# Z9 v  p6 ?/ W

* n5 [6 M) p/ w# e- G/ q+————————————–+
. O) D4 G8 S8 X" j. m  F' V: @7 D1 l3 Z; J* z. `6 i5 ?
1 row in set (0.00 sec)
' z5 g/ x3 |  m( N" q- Q( j5 t& D: K; j( d; }
这样我们就确定这个8bit的ascii的第一位为0! w. j2 e% D5 q- m

; s* K( Q. n- j' n
) }, h. D& j; T2 y9 {  V8 S% @$ h+ A) u; C" ~3 n
第二次我们来做6次右偏移来确定前两位
/ N& |# Z; N' q0 i- s3 j  Z" u) Q0 m" ]9 i
) M6 S; D$ d0 x' {3 o# o  n

1 ]2 L4 `' Q# w前两位可能是01或00,即依然可以与0做比较,( L0 i" R0 W  U# J* Q5 F9 ]: `+ @! r
: q' y  y2 d8 G: b
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;9 q7 {. I1 T6 d/ b9 |8 A% h$ K" @

+ W: n7 X9 {- P/ n  b2 @+————————————–+9 y/ Z2 [1 Z5 |9 N5 v" v! g, @5 q
/ Z  H& o4 V! F0 P. o
| (ascii((substr(user(),1,1))) >> 6)=0 |
6 l) Q1 I( a0 `0 c; v* j; y' j# w; P! C; ?
+————————————–+
" H) k- |4 K; Z9 I- B" o( L0 b) G9 O: B- S& C5 _
| 0 |" O! c, H1 N$ b4 \9 d% j' `
4 l" P, C/ o. c8 w! _' r  k
+————————————–+, Q% k9 g. k/ y+ r9 l

8 x/ |# M' Q' A: o9 D; L1 row in set (0.00 sec)
: q; `3 |; j7 Q) C8 I4 C2 y( X7 O* z2 @, q4 P0 e% R! e
1 G+ n) w# b2 z" H+ d

# Q  a0 t9 V/ G" a/ m0 r结果为0,即第二位为1
+ |* t) L+ [$ k8 m4 f& \3 r8 w, Y& i- b1 u4 T
6 f4 _( {2 {  t3 ]& z! H
+ H" w7 a5 K8 ?. Y$ @! \1 I
开始猜测前三位为010或011
9 N" x0 x: c  c3 u6 C+ u0 o
/ f. ^$ i' e$ n$ [
# m  u) W+ u$ G% G% }8 k) l3 @2 n6 m6 x! H; y$ R. [; r3 g
让我们看看010和011的ascii码是多少1 d6 U  R$ n! c5 E. U# v) L8 a

4 @9 o2 z1 Y4 C3 w0 z( T$ h" ^ 4 ^1 G) A6 T' l1 G4 @
# v, O# F: h3 z$ U6 b
分别查询select b’011′ select b’010′
+ ]  F& F$ t7 J9 |1 |; V) o% y8 O. n  L+ i/ s1 s

+ _$ C, L/ G* E0 N2 }4 e: a) V5 y0 b$ v: p/ r$ u8 ], k' A
获得结果 010 = 2 011 = 3/ Y4 E6 L/ H3 d
( @  P; P' l# ~% Z  r3 ?& N- d
# h& m. h) u* v5 }6 H
" I: J  F6 g, F4 h0 i; p
执行如下sql:8 N8 K# i. S3 Y$ W

/ |0 n' X3 G( A6 W& V6 O 5 n6 ^& [9 s* \6 I) }

8 e. r! {$ W/ g! K2 }mysql> select (ascii((substr(user(),1,1))) >> 5)=2;6 m% {: o9 v# y" d5 p# r! x
* G4 ^8 q4 s: D& d9 B6 ?: t) L5 `7 i
+————————————–+6 ^! ~$ l# ]! f5 ~; M/ ]2 m/ z
+ ~# Q0 T9 J7 [
| (ascii((substr(user(),1,1))) >> 5)=2 |
: n5 Y: O5 u+ d* ^( X9 f0 D8 ?, _6 t) d
+————————————–+' a# F% X4 T& D  \' a* P
- u$ ?! m8 O+ I: P3 E! _) H
| 0 |
& y; g' ~/ Y; }0 o  f; M
4 A4 Z& B6 B& ^$ r3 @+————————————–+
9 y% ^$ F6 F+ X1 a
$ e% Z3 o9 L' W3 X  s  ~) v( M即前三位不为010,而是011: N6 h8 I" x- v1 w7 B4 p

' h6 j/ K7 R; ?! R! q) L3 l. `9 \ 6 [) H7 L8 p% y! }! e. e
4 k( I' P5 F1 i% H+ P; N0 `. X! T
直到获得最后一位
  e- @8 b! g1 Y5 R8 z) g
' K+ a8 C  g5 E# T' w9 Z2 m( E $ u# O0 B- G: \  h" v8 e- Y" j
5 P3 k4 p. V2 o9 `2 m( r  b
最终结果为:01110010
7 ?8 l$ ]5 w/ A7 }5 A, a7 N/ I& c# [0 D1 @  t

. g- ?: e6 i5 [/ l2 M
- q% E$ a/ q& o4 {- u! c转换一下:
& e  h, f8 k0 o4 v$ z" n
3 {" h9 Y" ~: @) J$ `
% T4 v/ d0 e% p) E1 J! n# Z. m: k. N6 V
select b’01110010′
9 }% S' z: R/ E$ |3 {
7 |& G  r5 |: T3 w: n( D ; ]3 y% V: l. k: H- X; F( h

* z6 w; l7 f8 E查询结果
# x- j6 u% Q( j/ J& C& e2 D4 |3 }& J* T3 a

0 V+ ^8 r+ I2 [9 ^
. A3 U2 y6 [, y+ e2 b- z& F+————-+
7 O! Y2 M1 v; @# L9 M+ `( B1 d' ?7 h5 P& S9 \
| b’01110010′ |) e3 @) h% P4 P4 E

- \/ r  W9 b( d; l5 L+————-+" w9 |6 j& O  q/ w* g

4 `$ D, O. C* p| r |" u7 w: d( X+ k8 d6 v
1 c1 V! E; o0 g; N$ l8 }7 e
+————-+9 r  _5 @5 U* ^6 h

( r5 C- m5 @2 s8 T$ W1 row in set (0.00 sec)% Z4 ~+ s, ~( [5 |: O' J! X
. B* M  W2 ]& J+ \
& N6 `- O" P# Q1 F3 g! i, D* f/ R; [1 ~
* s9 Y2 E  L1 T- u7 @8 p
这样我们就获得了user()的第一位.其它位依此类推
5 W6 d0 w2 }2 O9 W' k2 r; }) V; }7 D- i
回复

使用道具 举报

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

本版积分规则

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