[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%2fpasswdUnicode编码:假设服务器错误地将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文件,获得数据库连接字符串中的口令信息针对操作系统WindowsC:\boot.ini //查看系统版本C:\WindowslSystem32\inetsrvMetaBase.xml //llS配置文件C:\Windows\repairsam //存储系统初次安装的密码C:\Program Filesimysqlmy.ini //Mysql配置C:Program Filesimysqlldatalmysqlluser.MYD //Mysql rootC:\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地址 allinurlintitle:关键字 //把网页标题中某个关键字作为搜索条件 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?fileread.php?filename3.从参数上看&realPath=&filePath=&filepath=&filepath=&path=&path=&inputFile=&Inputfile=&urls=&url=
4.漏洞验证
漏洞验证index.php?f=../../../../../../etc/passwdindex.php?f=../../../../windows/win.iniindex.php?f=../index.php
5.漏洞防御修复
漏洞防御修复1.正则表达式严格判断用户输入参数的格式2.下载路径不可控,而是程序自动生成后保存在数据库中,根据ID进行下载3.过滤.:对参数做严格的过滤,不能进行目录遍历(穿越)4.php.ini配置open basedir限定文件访问范围