[Web安全 网络安全]-文件读取与下载漏洞
文章目录:
一:任意文件读取漏洞
1.定义
2.危害
3.产生原因
4.发现漏洞
5.利用漏洞
6.防范措施
7.读取漏洞举例
二:任意文件下载漏洞
1.定义
2.漏洞利用
3.漏洞挖掘
4.漏洞验证
5.漏洞防御修复
pikachu靶场:是一个网络安全训练平台,旨在模拟真实世界中的网络攻击和防御场景,帮助用户提高网络安全技能和知识
一:任意文件读取漏洞
1.定义
任意文件读取漏洞属于文件操作漏洞的一种,攻击者通过提交特定的输入,可以绕过安全限制,读取服务器上的敏感文件或配置文件 这种漏洞通常发生在文件读取函数(如readfile(), file_get_contents(), fopen()等)的使用过程中 当这些函数的输入路径未经过严格校验或校验不严时,攻击者就可以控制这个变量来读取任意文件
2.危害
任意文件读取漏洞的危害极大,它不仅可以泄露网站的结构目录,还可能导致敏感信息(如用户密码、数据库配置文件、系统配置文件等)的泄露 这些敏感信息一旦被攻击者获取,就可能被用于进一步的攻击,如密码破解、数据篡改、系统控制等
3.产生原因
1.文件读取函数的输入路径用户可控 2.输入路径未经过严格校验或校验不严 3.服务器未对文件访问权限进行严格控制
4.发现漏洞
一般可以通过构造特殊的URL请求来尝试触发文件读取漏洞 例如,在URL中添加特殊的路径参数(如../或~/),并观察服务器是否返回了非预期的文件内容
5.利用漏洞
1.读取系统配置文件(如/etc/passwd, /etc/shadow等),获取系统用户信息 2.读取数据库配置文件(如数据库连接字符串),尝试直接连接数据库 3.读取网站源代码或配置文件,寻找其他安全漏洞 4.读取日志文件,获取网站访问记录或用户操作记录
6.防范措施
1.对所有输入进行严格的校验和过滤,确保输入路径符合预期 2.使用白名单机制来限制可访问的文件类型和路径 3.对敏感文件和目录设置严格的访问权限,对所有文件路径输入进行严格的验证和清理 4.使用参数化查询或安全的文件操作函数来避免直接拼接用户输入 5.定期对网站进行安全审计和漏洞扫描,及时发现并修复安全漏洞 6.始终将上传的文件存储在Web根目录之外的安全目录中,禁用或严格限制文件上传功能,如果它们不是必需的 7.确保服务器配置正确,以防止符号链接和其他潜在的文件系统攻击 8.记录和监控所有文件上传和下载尝试,以便在发生安全事件时进行检测和响应 记录和监控所有文件访问尝试,以便在发生安全事件时进行检测和响应 9.考虑使用Web应用防火墙(WAF)来增强安全性 10.始终使用最新版本的PHP和服务器软件,并应用所有安全补丁
7.读取漏洞举例
假设有一个Web应用程序,它提供了一个文件下载功能,允许用户通过URL参数指定要下载的文件名
<?php $filename = $_GET['file']; // 从URL参数中获取文件名 // 假设有某种简单的安全检查,但不够严格 if (strpos($filename, '..') === false) { // 如果文件名中不包含"..",则认为是安全的 if (file_exists('/path/to/files/' . $filename)) { // 文件存在,则读取并发送给用户 readfile('/path/to/files/' . $filename); } else { echo "文件不存在"; } } else { echo "非法请求"; } ?>
代码审计、漏洞分析
在这个例子中,虽然有一个简单的安全检查来防止路径遍历(即检查文件名中是否包含"..") http://example.com/download.php?file=../../../etc/passwd 但这种检查是不充分的,攻击者可以利用:编码、URL编码/百分比编码、符号链接或其他技巧来绕过这种检查 URL编码/百分比编码 http://example.com/download.php?file=%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd Unicode编码:假设服务器错误地将Unicode字符U+202E(右至左标记)与文件名处理结合,导致路径解析被逆转 http://example.com/download.php?file=a.txt%E2%80%AE..%E2%80%AE..%E2%80%AEetc%E2%80%AEpasswd 路径截断 http://example.com/download.php?file=a.txt%00../etc/passwd
二:任意文件下载漏洞
1.定义
任意文件下载 实现过程是:根据参数filename的值,获得该文件在网站上的绝对路径,读取文件内容,发生给客户端进行下载 任意文件下载漏洞:网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件类型、目录不做限制 则恶意用户就能够查看或下载服务器上任意敏感文件,这就是文件查看与下载漏洞 本来是指定目录下的下载展示文件,但是我们可以下载目录下页面没有展示的文件 ?filename=downloadfile.png 目录穿越漏洞:下载任意目录下的文件 ?filename=../../downloadfile.txt
2.漏洞利用
漏洞利用 获取源码(黑盒——>百盒);获得站点与中间件配置文件; 获得应用与系统配置文件(ssh、mysql) 针对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文件,获得数据库连接字符串中的口令信息 针对操作系统 Windows C:\boot.ini //查看系统版本 C:\WindowslSystem32\inetsrvMetaBase.xml //llS配置文件 C:\Windows\repairsam //存储系统初次安装的密码 C:\Program Filesimysqlmy.ini //Mysql配置 C:Program Filesimysqlldatalmysqlluser.MYD //Mysql root C:\Windowsiphp.ini //php配置信息 C:lWindowsimy.ini //Mysql配置信息 C:lWindowslwin.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配置文件 /ctc/httpd/conf/httpd.conf //apachc配置文件 /root/.bash_history //用户历史命令记录文件 /root/.mysql_history //mysql历史命令记录文件
3.漏洞挖掘
漏洞挖掘 1.Google Hacker利用 inurl:"readfile.php?file=" //搜索含有关键字的url地址 allinurl intitle:关键字 //把网页标题中某个关键字作为搜索条件 allintitle完全匹配 intext:关键字 //把网页正文中某个关键字作为搜索条件 allintext完全匹配 关键字 site:网址 //返回域名中所有的url地址 filetype:拓展名(不可单独使用) //搜索特点格式的文件 .pwI 口令文件 .tmp 临时文件 .cfg 配置文件 .ini 系统文件 .hlp 帮助文件 .dat 数据文件 .log 日志文件 .par 交互文件 .pdf\.doc\.docx 文档文件 .xls\.xlsx\.csv 表格文件 .ppt\.pptx 幻灯片文件 .zip\.rar\.7z\.iso 压缩文件 cache:网站 //搜索一个网站的缓存运行 info:关键字 //搜索指定站点的一些基本信息 define //搜索关键字的定义 link //查找与关键字做了链接的 URL 地址 related:URL //搜索与指定 URL 相关的页面 stocks //搜索有关一家公司的股票市场信息 insubject //搜索 Google 组的标题行 msgid //搜索识别新闻组帖子的Google 组信息标识符和字符串 group //搜索 Google 组搜索词汇帖子的题目 author //搜索新闻组帖子的作者 bphonebook //仅搜索商业电话号码簿 rphonebook //仅搜索住宅电话号码簿 phonebook //搜索商业或者住宅电话号码簿 daterange //搜索某个日期范围内Google做索引的网页 inanchor //搜索一个 HTML 标记中的一个链接的文本表现形式 运算符 空格 逻辑与操作 - 逻辑非操作,如 A-C表示搜索有A但没C的网页 OR | 逻辑或,如A OR B表示搜索含有A的网页B的网页和同时含A和B的网页 ''' 精确搜索用双引号 通配符 * 代替任意字符串 ? 代替任意字符 ~ 代替同义词 .. 数字范围 1..4==1,2,3,4 其他事项 Google 对英文关键字的大小写不敏感 Google对出现频率极高的英文单词做忽略处理。如.com i www http等 如果要对忽略的关键字进行强制搜索,则需要在该关键字前加上明文的”+”号 Google大部分常用英文符号(如问号,句号,逗号等)无法成为搜索关键字,加强制也不行 2.从链接上看 download.php?path= download.php?file= down.php?file= data.php?filc= readfile.php?file read.php?filename 3.从参数上看 &realPath= &filePath= &filepath= &filepath= &path= &path= &inputFile= &Inputfile= &urls= &url=
4.漏洞验证
漏洞验证 index.php?f=../../../../../../etc/passwd index.php?f=../../../../windows/win.ini index.php?f=../index.php
5.漏洞防御修复
漏洞防御修复 1.正则表达式严格判断用户输入参数的格式 2.下载路径不可控,而是程序自动生成后保存在数据库中,根据ID进行下载 3.过滤.:对参数做严格的过滤,不能进行目录遍历(穿越) 4.php.ini配置open basedir限定文件访问范围