
涉及知识
文件下载&读取
一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
尽管文件下载漏洞不会直接触及网站权限,但是会泄露敏感信息,间接导致权限丢失
产生原因
存在读文件的函数
读取文件的路径用户可控且未校验或校验不严
输出了文件内容
利用
下载或读取敏感文件
数据库配置文件
各种接口等文件
密匙信息文件
敏感信息位置
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配置信息
Linux:
/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
如何获取要下载的文件路径
- 扫描工具爬行或扫描地址
- 下载好的文件代码中去分析路径或包含文件路径
检测
分白盒、黑盒测试,这里重点讲手工看参数值及功能点
文件名、参数值、目录符号
1 | • download.php?path= |
演示案例
Pikachu-文件下载测试——参数值发现漏洞
地址:http://localhost/pentest/pikachu/vul/unsafedownload/down_nba.php
点击球员的名字即可下载图片文件,下载链接(下载时产生的链接)如下
1 | http://localhost/pentest/pikachu/vul/unsafedownload/execdownload.php?filename=ai.png |
而页面中图片的地址为(右键复制图像地址)
1 | http://localhost/pentest/pikachu/vul/unsafedownload/download/ai.png |
也就是说调用execdownload.php并传递GET参数来下载文件,设定是去download目录下查找提交的文件名,因此如果要下载execdownload.php文件,download目录下并没有此文件,需要跳级,则构造的下载链接如下
1 | http://localhost/pentest/pikachu/vul/unsafedownload/execdownload.php?filename=../execdownload.php |
访问后即可下载上述提到的源码文件

同理,通过目录扫描、已下载文件内容提及等信息就可以下载其他文件,包括敏感文件
比如下载配置文件config.inc.php
1 | http://localhost/pentest/pikachu/vul/unsafedownload/execdownload.php?filename=../../../inc/config.inc.php |

Zdns-文件下载真实测试——功能点发现漏洞
得到下载文件的链接如下
1 | http://down.znds.com/getdownurl/?s=L3VwZGF0ZS8yMDIyLTAyLTIzL2RhbmdiZWltYXJrZXRfNC4zLjZfMjc5X3puZHMuYXBr |
其中GET方法提交的s参数值使用了base64加密
解密后结果为
1 | http://down.znds.com/getdownurl/?s=/update/2022-02-23/dangbeimarket_4.3.6_279_znds.apk |
即下载的文件设定是从服务器的update目录下查找,再下载
如果要下载其他文件,获取文件路径之后,还需要使用base64将路径进行加密
下载漏洞在哪里测?下载漏洞怎么判断存在
拿到下载文件的下载链接URL,一般是base64加密,解密后观察路径规律
然后再拿到你想下载的文件的路径,对下载文件路径使用base64加密后构造下载链接
小米路由器-文件读取真实测试-漏洞
==///==
RoarCTF2019-文件读取真题复现-比赛——手工看参数值
地址:https://buuoj.cn/challenges#%5BRoarCTF%202019%5DEasy%20Java
在Web类题目中选择以下题目,开启漏洞环境

开启靶机环境,点击help按钮,该链接形式,根据URL可知可能存在文件下载漏洞
1 | http://8a2538dc-f925-4b31-b848-9315a08d5971.node4.buuoj.cn:81/Download?filename=help.docx |
一般Java提交参数使用POST方法,将filename=help.docx放到POST数据中提交,可以下载help.docx,但是其中没有flag

漏洞分析
WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
WEB-INF主要包含一下文件或目录:
/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件
漏洞成因
通常一些web应用我们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及做均衡负载的优点和完成一些分层结构的安全策略等。在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
漏洞检测以及利用方法
通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码。
一般情况,jsp引擎默认都是禁止访问WEB-INF目录的,Nginx 配合Tomcat做均衡负载或集群等情况时,问题原因其实很简单,Nginx不会去考虑配置其他类型引擎(Nginx不是jsp引擎)导致的安全问题而引入到自身的安全规范中来(这样耦合性太高了),修改Nginx配置文件禁止访问WEB-INF目录就好了: location ~ ^/WEB-INF/* { deny all; } 或者return 404; 或者其他!
点help 下载不出来 换post方法 下出来了 这docx也是骗人的
java.io.FileNotFoundException:{help.docx}
看到了这个提示 java写的服务器 java文件任意下载
大概率是源码泄露的问题
具体操作
不是弱口令,也不能扫出目录。只有一个help.docx文件可以下载。于是可能是任意文件下载漏洞。
点击蓝字“help”,抓包,发包。发现GET方式一直什么都下载不了。后来修改为POST,就可以下载了。
因为题目提示java,所以可以先下载网站的配置文件,在根目录(当前即是网站根目录)WEB-INF/web.xml

发现操作flag的关键文件位置,读取(或下载)/WEB-INF/classes/下的flag的关键文件位置,又因为Java字节码类文件(.class)是Java编译器编译Java源文件(.java)产生的“目标文件”。
最终得出flag的关键文件位置为:/WEB-INF/classes/com/wm/ctf/FlagController.class,下载.class文件后使用Java反编译工具进行反编译得到原Java代码

Base64解码得到flag

百度杯2017二月-Zone真题复现-比赛拓展
地址:https://www.ichunqiu.com/battalion?t=1&r=57475
访问上述地址选择Web类型——Web Zone题
==///==
涉及资源
小米路由器远程任意文件读取漏洞:https://www.seebug.org/vuldb/ssvid-98122
https://www.ichunqiu.com/battalion?t=1&r=57475
JavaWeb实现文件下载:https://blog.csdn.net/Cheng_May/article/details/78600833: