文件下载漏洞笔记


漏洞简介

  在一些系统的业务需求中,网站往往需要提供文件查看或者下载的功能。如果对用户查看或者下载的文件不做限制,那么恶意用户就能够随意查看或者下载任意的文件,包括源文件以及敏感文件等等。
  网站代码本身存在读取文件的函数调用,且输出的文件内容是任意的文件的时候,如果用户下载时读取文件的路径是可控的,并且传递的文件路径参数未校验或者是校验不严格时,就可能文件下载漏洞。
  在渗透测试的实战中,如果存在该漏洞时可以下载服务器上的敏感文件,比如脚本代码、服务以及系统配置文件等等,这样就可以利用这些信息来进一步的发现其他可以利用的漏洞。

漏洞的利用

漏洞的发现

  在实际的渗透测试中,我们需要去观察URL的参数。如果URL当中存在一些诸如 file、path 等参数的时候,并且是可控的,就可以尝试一下利用这些参数来下载服务器上可以下载的文件以外的其他文件,比如 /etc/hosts、/etc/passwd 等等,如果成功下载到其他文件就表示该漏洞的存在。

特征参数:

file、path、data、filepath、readfile、data、url、realpath……

特征链接:

download.php?path=
download.php?file=
down.php?file=
data.php?file=
readfile.php?file=
read.php?filename=
…….

Google Hacking:

inurl:”readfile.php?file=”
…….

常见的敏感文件

  如果目标网站存在该漏洞,可以重点去关注一些系统的敏感文件,通过下载敏感文件去进一步的探测或者利用,下面是 Windows 和 Linux 常见的敏感文件:

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 root
C:/Windows/php.ini							#php配置文件
C:/Windows/my.ini							#Mysql配置文件
C:/Windows/win.ini							#Windows系统的一个基本系统配置文件
C:/Windows/System32/drivers/etc/hosts					#host文件

Linux敏感文件

/root/.ssh/authorized_keys						#服务器公钥
/root/.ssh/id_rsa							#SSH私钥
/root/.ssh/known_hosts							#记录每个访问计算机用户的公钥
/etc/passwd								#记录用户的一些基本属性
/etc/shadow								#记录用户加密后的密码
/etc/my.conf								#Mysql配置文件
/etc/httpd/conf/httpd.conf						#Apache配置文件
/root/.bash_history							#用户历史命令记录文件
/root/.mysql_history							#Mysql历史命令记录文件
/porc/self/cmdline							#当前进程的cmdline参数
/proc/net/arp								#arp表,可以获得内网其他机器的地址
/proc/net/route								#路由表信息
/proc/net/tcp and /proc/net/udp						#活动连接的信息
/proc/net/fib_trie							#路由缓存
/proc/version								#内核版本

实战技巧

Web 技巧

1、可以尝试下载一些包含数据库配置的源代码文件,可能会直接拿到数据库的密码
2、Java Tomcat 部署的可以下载 web.xml 文件,然后进一步下载网站源代码
3、如果有日志文件可以尝试下载,可能会拿到管理员登录的敏感信息或者是后台登录地址等等
4、下载全站源代码,本地进行白盒审计去发现更多潜在的漏洞

Web 应用

PHP:

获取 inc/config.php 获得数据库连接字符串中的口令信息;

asp:

获取 inc/conn.asp 文件,获得数据库连接字符串,得到数据库口令;
若是 ACCESS 数据库,可以得到数据库路径,再下载数据库内容;

aspx:

获取网站根目录 web.config 文件,获得数据库连接字符串中的口令信息;
获取 bin/*dll 文件,获取网站源码(不完整代码);使用 .NET reflector 工具打开编译后的 dll 文件;

JSP:

获取 conf/tomcat-user.xml 文件,获得 tomcat 管理界面的口令信息,上传 war 包 Getshell;
获取 WEB-INF/WEB.xml 文件,获得数据库连接字符串中的口令信息;

漏洞实战

  一般在源代码中可能会发现一些网站的敏感信息,可以通过这些泄露的敏感信息去进行利用和深一步的漏洞挖掘,如下实例所示:

进入到一个文件下载功能的网站页面
image

通过 F12 查看源代码发现到了可控参数以及文件的路径
image

因为这是 Windows Server 的操作系统,所以尝试下载 win.ini 配置文件

?file=../../../../../../../../../../../../Windows/win.ini
../ 是返回上级目录,在这里用多少 ../ 都没有关系,因为根目录的上一级之后还是根目录

image

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/php/281947.html

(0)
上一篇 2022年8月24日 09:39
下一篇 2022年8月24日 09:39

相关推荐

发表回复

登录后才能评论