GBT 22239-2019《信息安全技术 网络安全等级保护基本要求》中,8.1.4.4安全计算环境—入侵防范项中要求包括:a)应遵循最小安装的原则,仅安装需要的组件和应用程序;b)应关闭不需要的系统服务、默认共享和高危端口;c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求;e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。任意文件下载对应访问控制项中要求d),所以安全控制点为入侵防范d。
GBT 28448-2019《信息安全技术 网络安全等级保护测评要求》中,测评单元(L3-CES1-20),该项测评单元包括以下要求:a)测评指标:应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求。b)测评对象:业务应用系统、中间件和系统管理软件及系统设计文档等。c)测评实施包括以下内容:1)应核查系统设计文档的内容是否包括数据有效性检验功能的内容或者模块;2)应测试验证是否对人机接口或通信接口输入的内容进行有效性检验。d)单元判定:如果1)和2)均为肯定,则符合本测评单元指标要求,否则不符合或部分符合本测评单元指标要求。任意文件下载属于测评单元(L3-CES1-20)中测评实施第2项,故测评单元为L3-CES1-20.2。
测试用户能否查看或下载任意的文件,可以对源代码文件、敏感文件、备份文件等进行下载。
一些网站由于业务需求,往往需要提供文件查看或文件下载功能。一般来说在文件下载或查看功能处,当文件名参数可控,且系统未对参数进行过滤或者过滤不严格时,就能够实现下载服务器上的任何文件,产生任意文件下载漏洞,恶意用户就可利用路径回溯符号(**../**)跳出程序本身的限制目录实现下载任意文件。此漏洞的最终目的还是为了进一步获取更多系统信息。
● 提供下载、查看的功能,并接收相关参数变量;● 使用读取文件的函数;● 未对相关参数做校验或者控制不严格;● 能输出请求文件的内容,提供给客户端;
● 存在读文件的函数;● 读取文件的路径是用户可控的且未经校验或校验不严格;● 输出或下载了文件内容;
1. 存在下载功能的功能点;
2. 可以使用Google hacking语法或者Web漏洞扫描器。Google search
inurl:readfile.php?file=
inurl:download.php?file=
3. 链接存在以下关键字:download.php?path=
download.php?file=
download.php?filename=
down.php?file=
data.php?file=
readfile.php?file=
read.php?filename=
4. 包含以下参数&RealPath=
&FilePath=
&filepath=
&Filepath=
&Path=
&path=
&inputFile=
&InputFile=
&url=
&urls=
&Lang=
&dis=
&data=
&Date=
&readfile=
&filep=
&src=
&menu=
META-INF
WEB-INF
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系统配置文件
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参数
/usr/local/app/apache2/conf/httpd.conf //apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
/usr/local/app/php5/lib/php.ini //php相关设置
/etc/httpd/conf/httpd.conf //apache配置文件
/etc/php5/apache2/php.ini //ubuntu系统的默认路径
Tomcat
apache-tomcat-8.5.51/conf/tomcat-users.xml //tomcat的角色(授权用户)配置文件apache-tomcat-8.5.51/conf/server.xml //tomcat的主配置文件
apache-tomcat-8.5.51/conf/web.xml //tomcat应用程序的部署描述符文件
apache-tomcat-8.5.51/logs/catalina.out //即tomcat的标准输出和标准出错,所有输出到这两个位置的都会进入catalina.out,这里包含tomcat运行自己输出的日志以及应用里向console输出的日志。
Web应用
PHP
获取inc/config.php文件,获得数据库连接字符串中的口令信息;ASP
获取inc/conn.asp文件,获得数据库连接字符串口令,得到数据库口令。若是ACCESS数据库,可以得到数据库路径,再下载数据库内容;
ASPX
获取网站根目录web.config文件,获得数据库连接字符串中的口令信息;
获取bin/*.dll文件,获取网站源码(不完整代码),使用.NET reflector工具打开编译后的dll文件;
JSP
获取conf/tomcat-user.xml文件,获得tongcat管理界面的口令信息,上传war包GetShell;
获取WEB-INF/Web.xml文件,获得数据库连接字符串中的口令信息。
任意文件下载漏洞,正常的利用手段是下载服务器文件,比如脚本代码、服务器配置文件或者是系统配置文件等。但有时并不知道网站所处环境以及网站路径,就可以使用../../../进行逐层猜测路径,案例如下:
index.php?f=../../../../../../../../../etc/passwd
index.php?f=../../../index.php
index.php?f=file:///etc/passwd
readfile.php?file=/etc/passwd
readfile.php?file=../../../../../etc/passwd
readfile.php?file=../../../../../../../etc/passwd%00 // 00截断注:
当参数f的参数值为php⽂件时,若是⽂件被解析则是⽂件包含漏洞,
若显⽰源码或提⽰下载则是⽂件查看与下载漏洞。
如下图所示,一个有文件下载功能的正常网站,同时还会从浏览器接收文件名,file_get_contents函数把整个文件读入一个字符串中并输出,代码未对接收的文件名进行过滤,用户可控制变量,将存在任意文件下载漏洞。● 注意.../的数量,它代表查询目录父目录的数量;● 遇见任意文件下载漏洞时,需要先注意下载权限的问题,这个权限能决定下载文件的范围;● 某些网站并不会在浏览器URL中显示路径,这时需要抓包,从数据包中修改路径达到任意文件下载/读取;
1. 过滤字符或字母尝试编码绕过
2. 对../过滤或者置空.../使用...//代替.../、利用.../代替/
测试方法
1. 通过web漏洞扫描工具对网站实施扫描,可能会发现目录遍历或者任意文件下载漏洞,发送一系列”../”字符来遍历高层目录,并且尝试找到系统的配置文件或者系统中存在的敏感文件,比如,ssh、weblogic、ftp、mysql等相关配置文件。
2. 也可通过判断网站语言,并根据其url中部分提供的参数,进行构造相关的路径信息,如收集到网站中间件版本为apache,则想办法构造../../../ WEB-INF/web.xml等,然后查看其是否可被下载出来。随后可构造下载系统文件,或者下载各种**.log文件,从中寻找一些后台地址、文件上传点等地方,运气好的话可能会获得之前攻击者留下的后门。
3. 下载web业务文件,进行白盒审计,利用漏洞进一步攻击服务器。
危害大致可分为两类1. 下载网站源码攻击者可⽤得到的代码进⼀步代码审计,得到更多可利⽤漏洞;
2. 查看或下载网站任意文件如数据库配置文件、服务及系统配置⽂件、日志文件,以及对内网的信息探测等等;
1. 净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
2. 限定文件访问范围:在php.ini等配置文件中配置open__basedir限定文件访问范围。web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,使其即使越权也在访问目录之内。
3. 更新版本:任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
4. 将要下载的文件地址保存至数据库中。
5. 文件路径保存至数据库,让用户提交文件对应ID下载文件。
6. 用户下载文件之前需要进行权限判断。
7. 文件放在web无法直接访问的目录下。
8. 不允许提供目录遍历服务。
9. 公开文件可放置在web应用程序下载目录中通过链接进行下载。
参考https://wenku.baidu.com/view/3b727822753231126edb6f1aff00bed5b9f373b7.html https://blog.csdn.net/qq_41901122/article/details/116524142 https://www.yuque.com/tidesec/vul/ab9s2u
E
N
D
关
于
我
们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。