任意文件下载引发的思考

最近在一次渗透测试中遇到了任意文件下载漏洞,正常的利用手段是下载服务器文件,如脚本代码,服务器配置或者是系统配置等等。但是有的时候我们可能根本不知道网站所处的环境,以及网站的路径,这时候我们只能利用../来逐层猜测路径,让漏洞利用变得繁琐。笔者在对此漏洞学习回炉重造的过程中,对此漏洞进行了细致的整理,希望为大家的学习提供一些帮助,和思路。另外如果有不足之处希望大家可以进一步补充。

漏洞介绍:

一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。

利用方式:

下载!下载!下载!

一般链接形式:

download.php?path=down.php?file=data.php?file=

或者包含参数:

&Src=&Inputfile=&Filepath=&Path=&Data=

当遇到一个任意文件下载时,我们的一般利用思路:

  1. 下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置
  2. 下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,如果运气好的话会获得一些前辈们的后门。
  3. 下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。

以上是正常情况下的利用思路,笔者在从事行业到现在,将这些思路进行延伸,整理分析出了自己的一套思路。

当我们遇到一个任意文件下载漏洞时首先要注意下载的权限问题。因为权限决定我们能下载的文件范围。

尝试读取/root/.bash_history看自己是否具有root权限。如果没有的话。我们只能按部就班的利用../来回跳转读取一些.ssh下的配置信息文件,读取mysql下的.bash_history文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,我们只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析。

如果我们遇到的是java+oracle环境

可以先下载/WEB-INF/classes/applicationContext.xml 文件,这里面记载的是web服务器的相应配置,然后下载/WEB-INF/classes/xxx/xxx/ccc.class对文件进行反编译,然后搜索文件中的upload关键字看是否存在一些api接口,如果存在的话我们可以本地构造上传页面用api接口将我们的文件传输进服务器

如果具有root权限

这时候很多人肯定会说 具有root权限直接去读shadow文件了 但是很多时候我们遇到的服务器可能只对外开放了 80,443两个端口这时候我们即使获得了密码作用也不打,但是具备root权限对任意文件下载利用是绝对的。

在linux中有这样一个命令 locate 是用来查找文件或目录的,它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。

当我们不知道路径是什么的情况下,这个可以说是一个核武器了,我们利用任意文件下载漏洞将mlocate.db文件下载下来,利用locate命令将数据输出成文件,这里面包含了全部的文件路径信息。

locate 读取方法

locate mlocate.db admin

如下图所示,可以将mlocate.db中包含admin内容全部输出来

利用这个文件我们可以获取到该服务器任何我们想要的内容并下载出来而不用一个一个去猜解目录,但是这个文件只有root用户才能读取。

另一方面我们也可以利用linux内核的一个文件/proc/self/cmdline当前进程的cmdline参数,可以获取到路径信息。

总体来说,任意文件下载漏洞的利用主要是为了信息收集,我们通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。

以下整理了一些下载利用文件。

Windows:

C:\boot.ini //查看系统版本C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件C:\Windows\repair\sam //存储系统初次安装的密码C:\Program Files\mysql\my.ini //Mysql配置C:\Program Files\mysql\data\mysql\user.MYD //Mysql rootC:\Windows\php.ini //php配置信息C:\Windows\my.ini //Mysql配置信息C:\Windows\win.ini //Windows系统的一个基本系统配置文件

Linux:

/root/.ssh/authorized_keys/root/.ssh/id_rsa/root/.ssh/id_ras.keystore/root/.ssh/known_hosts //记录每个访问计算机用户的公钥/etc/passwd/etc/shadow/etc/my.cnf //mysql配置文件/etc/httpd/conf/httpd.conf //apache配置文件/root/.bash_history //用户历史命令记录文件/root/.mysql_history //mysql历史命令记录文件/proc/mounts //记录系统挂载设备/porc/config.gz //内核配置文件/var/lib/mlocate/mlocate.db //全文件路径/porc/self/cmdline //当前进程的cmdline参数

原文发布于微信公众号 - ChaMd5安全团队(chamd5sec)

原文发表时间:2018-02-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维小白

linux重启、关机的几个命令和忘记l

重启命令linux的几个命令,三种: 第一种是 reboot 第二种是 init 6 第三种是 shutdown -r now 关机linux系统,两种: 第一...

22290
来自专栏linux运维学习

linux学习第三十二篇:linux任务计划cron,chkconfig工具,systemd管理服务,unit介绍,target介绍

linux任务计划cron crontab -u :指定某个用户,不加-u选项则为当前用户; -e :制定计划任务; -l :列出计划任务; ...

20670
来自专栏hadoop学习

DKhadoop安装配置详细教程与常见问题解决方法

上周分别就DKHadoop的安装准备工作以及服务器操作系统配置写了两篇分享的文章,这是个人第一次尝试写一个系统性的分享文章,必然会有很多疏漏的地方,还望见谅吧。...

5200
来自专栏磨磨谈

cephonebox发布(ceph+calamari集成iso)

现在已经是2016年收官的一个月了,之前一直想做一个calamari的集成版本,之所以有这个想法,是因为,即使在已经打好包的情况下,因为各种软件版本的原因,造成...

9840
来自专栏从流域到海域

数据库连接池

数据库连接池相关资料: 关于数据库连接池的使用,首先我们要明白我们为什么要用它,对应普通的数据库连接操作,通常会涉及到以下一些操作是比较耗时的: 网络通讯...

27570
来自专栏FreeBuf

OpenVAS开源风险评估系统部署方案

OpenVAS,即开放式漏洞评估系统,是一个用于评估目标漏洞的杰出框架。功能十分强大,最重要的是,它是“开源”的——就是免费的意思啦~ 它与著名的Nessus“...

60270
来自专栏蓝天

不再担心日志文件过大:通用日志滚动脚本

log_rotater.zip #!/bin/sh # https://github.com/eyjian/mooon/blob/master/mooo...

20120
来自专栏玄魂工作室

Hacker基础之Linux篇:进阶Linux命令一

这也是Open Source的一个特点,Windows中其他闭源软件是不会提供这种源码编译安装的安装方式的

10220
来自专栏郭耀华‘s Blog

linux下安装git提示”无法打开锁文件 /var/lib/dpkg/lock - open (13: 权限不够)“

如图所示,输入命令:apt-get install git后提示权限不够 解决方法,在命令前加 sudo即可 sudo apt-get install git ...

44260
来自专栏遊俠扎彪

inux (CentOS 5.6) 安装 Sun JDK (切换自带OpenJDK)

可根据需要卸载不需要的JDK Version

20480

扫码关注云+社区

领取腾讯云代金券