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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位# ?8 p; c" o9 i( A

& E; y: F' H. p* Q , E* d! A1 O0 O' v2 U+ [# Y- H
. a' H! O' \: n" l0 T
下面将以查询mysql数据库当中user()的第一位为例:
2 O1 c6 h& @5 @5 P; S$ L* y2 q' i' L3 o0 G! R* Z
6 F0 k9 t- b( q! s8 g
7 I( N4 m  b, R- _2 f5 M
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
; _+ S( v  M/ |' R4 _* A. T0 O4 O- V% k* ?& j' h

% |9 k3 x* ~5 x/ e( @5 s+ P( p  P# }# ?& h
首先执行如下sql语句:2 M! [" O3 a4 s% h( J* Y
2 H, H" C  r+ @8 w. ?6 y  ?1 k

- ~+ g, J  Q, ?8 `$ E; G) N% l
0 ^8 O3 D' c: |8 C2 _0 ^" Fmysql> select (ascii((substr(user(),1,1))) >> 7)=0;
) s, j; X8 `& W  a$ B5 p, M1 ?
& ]9 }$ b/ b/ m; V; @" u
0 ]. l- z# V+ z8 g6 ?2 m9 F! l: G1 S- g% W" E/ O! w5 X
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的1 q4 V+ H* t8 C/ R

6 p& x4 e- X0 j . z& u7 p3 M) V  w- ]4 x: J. q

* |5 B3 L& v! M# c3 m: B第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1, D+ N8 o: `& M
4 S& X5 a4 \% h/ U" p, Y6 R
2 d3 }& R+ z3 w' P8 R; u
7 \' t0 k! d0 @* H* P+ _
如果运算结果为1,说明第一位为0,不为1+ |& W7 r& {. B. s4 c
4 l* t. B6 z# b1 {( j( A9 K; [) z
4 }. u* Y% {; w* q  x" A1 p/ r
; Z! Y; j4 q, O
+————————————–+
( a1 u8 r1 E, {, z% Y% v: c) z/ T9 M+ R; e  n$ a" M. N  `1 ]
| (ascii((substr(user(),1,1))) >> 7)=0 |4 U" J+ h. |; L
; ~# W4 ?1 U6 s5 Z% n( \0 _
+————————————–+
/ w! Z5 M, W9 h# \3 {' w1 |9 t0 D9 u1 y* S$ r$ M  l
| 1 |
! f( @2 f3 W! }  k  l0 m! m
, l" g7 U! w% c; R( e) x+————————————–+
! G! k5 J) G- |; X
: H# v# {, y* @3 B1 row in set (0.00 sec)
# \1 g" @% x- h7 \( _
( a6 X" T! H2 T) |$ o" _3 A; J2 [这样我们就确定这个8bit的ascii的第一位为0
) h$ P6 O9 f2 n# W- [; o9 L4 B+ t8 O- d7 q8 Z" C& A" @* ?# ^; ?5 i

, Y* d3 e: P" b# y
& Y: g+ Z" \* u+ v$ q0 Z/ g第二次我们来做6次右偏移来确定前两位( e3 B7 t( [+ N" C1 u& L  s9 q6 o- f

0 W8 `" o" C$ i' V / L) k; G, f, ?& `$ l0 _

% T7 D+ t" _5 j2 l+ Y; S& h前两位可能是01或00,即依然可以与0做比较,
, x2 t, C1 i5 k8 ?
. G: W4 G% j, Y5 Bmysql> select (ascii((substr(user(),1,1))) >> 6)=0;  h; M+ l- e& Q  Q* m9 Z% R' w# m5 f  U! l

5 C/ y# i; U, l- c5 g+————————————–+
. a9 m' R% |. Y* d+ ]1 b, c& ^: Y, G$ t, ?* S  f4 @/ ^5 p$ j$ V
| (ascii((substr(user(),1,1))) >> 6)=0 |
7 a, ^9 Y  r) u$ R  E7 m6 ]- g. o) Z: q
+————————————–+* H, g" G2 L4 Q. a4 W: _

3 n: ?- W2 B) V. \1 E4 E" ^| 0 |0 n! T5 j8 ]. d# }# M- a5 W& B
9 [( S- R9 B9 N/ b* n& l7 f4 K
+————————————–+
& Y# W7 W4 W3 B2 T1 ~, L
$ v% b0 s( z) U( h7 o. v! Q( y* C1 row in set (0.00 sec)! D8 @, ]. n3 j6 ~
( t$ p% b- t0 p, P
7 J$ v$ X% z  F; ~& D, Z
  R- {% U1 E( z1 x' ?
结果为0,即第二位为1
  f  W; A) j+ j' X8 x! s
) [& G* l( B9 L, v# o  f
  d  x: a( _; n$ J) x  X- `5 j# A& ?; P5 [' n. t9 q
开始猜测前三位为010或0115 N1 ?& q' ~- {  ]( v6 ?
' R9 V. f( J& l
1 B# ~6 F0 K% s2 r& J
1 B0 N/ y' A+ r$ C. ^, v
让我们看看010和011的ascii码是多少
, }6 i% V  v: d) _
+ {: f2 ^) y- I5 m9 R6 @ 9 n0 W% b1 k: u% y8 m

+ P" l- Y4 V" {分别查询select b’011′ select b’010′  \8 i7 N6 K. N: H: r9 ?
8 G8 v! h  j" E4 @; D
, F4 S! b, E. S' `, Q" X
5 D! g- Z: W9 c7 z" o
获得结果 010 = 2 011 = 3' a; v: ]# P! r2 {! K, j( T$ Y

) l% Q  w$ d9 M+ g$ t& o
9 @( t# D/ |8 Z9 v0 d4 n  b9 \, n: N5 }1 T- X* a. Z
执行如下sql:& I: a8 {9 H, G/ b
* E9 `2 Q# w3 S9 H& K

: g+ Q! ]2 G/ b! M
& d" \5 r5 P3 |2 Smysql> select (ascii((substr(user(),1,1))) >> 5)=2;
/ {+ }( s+ p8 P8 B1 A3 }0 E3 b6 g; }5 n2 f2 z- N
+————————————–+- k, b4 V" _! r5 l+ \9 B+ j! v. p

0 A) k, e; |6 F  || (ascii((substr(user(),1,1))) >> 5)=2 |
' R2 S' S; o" |- m0 s4 Z
5 s' P2 D2 p% C" ~+————————————–+. v2 w4 ?$ \) F* k( r  [0 Q
; x" m7 s9 \. k- r3 v- }. `) X. _5 q
| 0 |" ?' C! T, i) V' t8 i7 T

/ }- w  o/ n* j6 K3 w! A+————————————–+
+ x6 j0 i' w" S$ B/ C' b
1 s$ b  j8 M) P8 u6 w* G3 [6 g! G即前三位不为010,而是011
1 R0 q0 Z% s& `( ?  _: y  o6 g! X' M8 _3 G- Q% n& k# `5 q

" e3 F- v, Y* @4 ]) t9 a8 x0 d
& ^2 J, d/ _9 O" y1 w; y4 {2 `直到获得最后一位( }; z$ H, a/ s# L$ z; Y. P3 [
: W* w- g  A! j
$ q% l6 C1 s2 F
# q/ u, Q5 s# \8 B/ B
最终结果为:011100100 i( u. l2 E* X4 U7 `
! q4 }6 L$ D% L2 \
9 W( R% s0 g; p0 N- ^8 u

+ c9 i- q0 d4 d* d4 r2 M转换一下:
; E. ]) E, b* J* W: a+ g! q" D4 r- i8 t

) e2 m1 z  r. b# [
- f; C$ l' Y2 E! a) w8 o& G6 {select b’01110010′- `: ~* P  h8 z5 n; w
2 n6 s# [5 i$ a! k( O, k$ p

2 v' y. W( S1 a7 N: m/ N) n* U. u& {. a, L% v
查询结果  k! R' a. |% v: x' ^2 \
$ X* W( x" ]/ _, J, I! P# ^# K
7 Y( @5 S1 _$ d; _" v' N1 h% ~" w; x$ x
* Y; q+ n, k5 `- Z
+————-+$ A' _+ k+ |5 A" p
# G2 {; l6 L+ O0 ?3 t9 F
| b’01110010′ |
3 Y. a" d8 s9 t5 o$ P
6 J  @  Y4 x( B6 ]" z. E. T& S+————-+
" _3 Z8 F; I8 ~9 @% B. k& L
7 P0 [, i, G' s$ p% o, p| r |' `2 y/ K- W' j5 L
& b7 K- s) n. l
+————-+
: d7 f0 K5 A4 I# o" \4 S4 Q9 Q1 d& C3 V. P$ r& Z
1 row in set (0.00 sec)6 r6 f  T" q( _7 u2 ]7 b! z1 c

8 r+ F+ s; N' N$ V9 n7 v
& m" `) ?( p" P; \
, y4 M4 u7 I/ Z" t+ \% O3 g这样我们就获得了user()的第一位.其它位依此类推" O, J- h3 W! i3 \
+ D7 f+ I( X. S* ]
回复

使用道具 举报

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

本版积分规则

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