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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位. g7 ?5 |4 W# v$ v& D( N
; `+ E2 `9 [$ C, e9 e  a, g

: b- T2 z. ~' w# w  B
+ s4 ?3 K9 z; t4 r8 r9 F, w下面将以查询mysql数据库当中user()的第一位为例:7 y8 w5 Z7 a( R3 q1 y9 J; H9 B
: s- N% y# o- l: n" ~, @3 R. Y

0 ]1 l" H2 c) i# t- S6 A9 H# B% G) x7 m
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
1 w5 L+ [9 L( @$ N2 m% X) U4 |5 Y4 E1 \6 q5 l2 R% t
0 r4 l8 J6 @% U' N

! ^0 M3 ~, d0 k2 _% M/ H首先执行如下sql语句:
% h: T9 |- b) Z* {! Q+ C7 _$ A4 X  }8 l5 B
7 K9 y& L: H0 b  h' t* A5 _
6 ~2 j8 ~. F: V$ x& s1 A0 y# K
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
; `1 \2 u+ K* `/ V/ u$ b
. I% R0 X0 q; M# T# O9 I
8 @% x* s" v$ k" ], D! F
9 B- M3 Z  j2 V我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
# B/ i. W( s" [* v5 ~6 @  F/ ]: F, [, Z7 k

: g; D! e2 a$ M. y; F) S# W1 ^, e' H% a! x8 n
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1% L1 p% y% ?3 N* L

+ _$ a3 ?2 o8 v9 S' x4 \ ! }) H4 A, p9 F- o1 i' ]

3 ?$ U, H: x! I9 S1 o如果运算结果为1,说明第一位为0,不为1
4 H& h8 h& ]! Q. R/ F( Q& K) C. j2 A: \0 t4 }

  |  u) N8 i+ ]" F) p6 z5 C9 A# E/ J4 W8 d$ z
+————————————–+6 i1 j: b6 X' `3 L' Y1 D

3 P+ L) s1 {' C. K5 ?8 ~5 p| (ascii((substr(user(),1,1))) >> 7)=0 |- W% D# U* L+ Q* A
9 X6 d& p: w1 p
+————————————–+9 V0 Q' S& l6 q

" S4 e& ], F. {4 B| 1 |3 ~# O+ T+ m1 B, K0 k
4 @4 w$ W) L9 y& w" Y8 J
+————————————–+8 z2 U) {1 Q6 V/ s
+ n; P+ j1 d( ^; ]5 o
1 row in set (0.00 sec)/ B3 n7 v2 @! }2 \- N1 Y

# @9 g" O3 f2 k& A这样我们就确定这个8bit的ascii的第一位为0
- T/ K9 M) U9 Y. Z
$ a$ `' w4 i6 t
. i! a8 n: c! J& P: u# N8 m4 K: g' i
第二次我们来做6次右偏移来确定前两位
+ x0 Z* }! l! I8 A! j! u. ~3 ?) [+ _& p

' o  H  f0 q7 i7 N
; z" k8 G- U* |前两位可能是01或00,即依然可以与0做比较,0 b) W* X; l! e
8 a, `( |+ a. p" M7 S
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;" g, m8 y4 D# f# d0 i& q5 d

) c0 g# _( k* c& ], o" l( T# }' d$ @+————————————–+
$ |2 a' C# U* ]: l3 B
$ U% u) M* w' O0 |# D9 c| (ascii((substr(user(),1,1))) >> 6)=0 |' u% ]2 C4 ~7 ~. O  c1 X
( N0 l; W0 T3 t+ V9 ?
+————————————–+! H: ]1 H) ?4 q0 {% p. w6 ?
- E. y, @: j# M/ L) a: d& k7 v0 _
| 0 |: F6 y, a/ S4 o
3 u1 z. T2 ~. y) S$ r! ^
+————————————–+) W+ c, w2 F4 B& k. t

  ~& C3 n; W$ y! g! u1 row in set (0.00 sec)
/ }4 P/ z* C& F. F( E- y
/ w+ F" ?! b: C( J3 b3 i
8 @2 ^3 f, n3 c" W
7 @* h& Z/ Q" f结果为0,即第二位为1
4 T2 S9 |; n0 Z: N% J9 M4 B) F( Q0 H' p! s( L. E) j7 y% r2 E9 y7 b

$ l5 P: ]# o( [4 w7 k7 o" m/ x" T9 `2 `5 i
开始猜测前三位为010或011; ~' c* h9 J, C/ s+ K
* z. \$ o1 Z2 Z' [- P9 T
5 b: f% k4 ]0 p1 j  p5 d# ?" g& D5 y$ n

7 {1 {* S: T3 \% E让我们看看010和011的ascii码是多少
: j! ]- J$ H) v' R/ O5 e7 q6 T3 d  O& U$ z/ y2 J$ B# H* K: q
8 `& {: q, A# N+ T. `: I

# e8 w0 k2 o& g分别查询select b’011′ select b’010′* q5 p3 ^+ d7 I% K8 Q9 R: ^

  J# Z' u; [5 z( o) a8 V+ \
" A% O/ h# m, N* @4 h: n/ i1 B& _8 U; b4 y$ K
获得结果 010 = 2 011 = 31 j2 Z4 j4 a. t( G9 y
8 \9 q2 C8 t3 t% [2 }6 d
) d, @$ v$ O' C% f. X

- |- l9 c( _+ [0 h' g6 A执行如下sql:9 w8 j1 F, O5 Q* x. ~
' X5 J: C) I* Y5 Q% z& e- [

5 Q# w! H6 K1 Z6 D+ [2 b7 |9 a5 Q' ^  u# Q
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
  a& ~' i* L6 n- _% t3 y% g/ o9 Q8 l6 e1 H+ p4 g# t1 }
+————————————–+
* Z. U, i1 f5 g' J/ G  K7 j3 R) L1 c) R# n
| (ascii((substr(user(),1,1))) >> 5)=2 |
9 Q( ^) r6 _6 b5 a$ I3 C$ V5 h" J0 O
+————————————–+
) v/ O$ R- Z: U" y7 G! ?# X
/ g1 Q, v, }( d, u0 q, o4 B0 w| 0 |
" h' m# e* v( I9 Z6 c
! j0 m- _+ h) @+————————————–+  B' ?2 J3 H* h
; y( f: B* t6 N: I7 f# P6 G
即前三位不为010,而是011
* e2 k9 t" I+ G' w- w$ s7 m- W) ^: c' U

% T$ E) c, f) d: g& |4 a: R2 |- C) g- _: z& A) L3 R: c4 W
直到获得最后一位
3 a: O+ A( v+ U" m( Y3 T8 B3 J: j5 F# u! f

: |3 i& c; R8 o4 s/ U6 [4 z3 `& e! l! y8 G8 u
最终结果为:01110010) ]% f& d% [3 W( r
  v+ v. t1 e1 l
. |$ c8 S$ g2 A& e/ M

0 j0 v9 U  f7 o转换一下:
* e% p( A4 R  k3 x+ @3 r" V2 y+ B5 c* o" D* c! C7 l7 J

" o' B. Q! t9 r, R! Q; h) Y7 o! V! u
6 }3 ]3 V+ H/ r+ s1 \select b’01110010′$ j' i& r5 f7 d/ U# g, h
. @5 N/ j# `  z1 |! ~
: j& J$ a3 \' I' Z3 q

! O3 x7 s6 d' L查询结果
' ?" d4 f2 m' `8 V: v; {
' v8 _  |! J) p2 v0 ]3 B 3 _( G# F6 n* ?# g
4 h# Q% }- [+ V! _4 V
+————-+" I- C$ Y% Y1 s, J3 S/ c% i6 y

7 ?2 \+ F9 w. F  Q/ X| b’01110010′ |
* s, Q' t" [% D& R6 A
" j/ O  m! \4 M2 c2 h+————-+
, T8 c1 R8 |5 C& A. t8 \
. I. Q. N4 G, O2 f! U0 \. ]| r |9 |( h7 Y) d- O0 q) [

" ^1 }5 {! T; }+————-+; [& p9 M! o1 Q( _% Q

1 Q7 v5 K% V; F" U0 @# Z, {1 row in set (0.00 sec)
! A  |$ S9 Y8 I, y; l! _5 q% Y2 [6 T& [6 Y( O8 G! u8 R5 i6 _
/ e! W# J8 `7 G( W

* e* @" e$ X. M" q: `1 n& U; d这样我们就获得了user()的第一位.其它位依此类推3 ~8 a0 A" m/ Y1 X3 c( ~6 e, J1 N

% J* C& l& P3 l) V0 V5 h
回复

使用道具 举报

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

本版积分规则

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