文件下载及目录遍历
文件下载
原理
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
防御
在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心
演示
1.打开pikachu的Unsafe Filedownload,可以发现里面的照片点名字就可以下载,检查源码,找到图片保存的url
execdownload.php?filename=kb.png
2.将filename改为自己想要获取的文件,如要下载本地的execdownload.php,保存在 WWW\pikachu\vul\unsafedownload\execdownload.php
http://192.168.223.143/pikachu/vul/unsafedownload/execdownload.php?filename=../execdownload.php
目录遍历
原理
在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。
演示
1.进入../../的目录遍历例题,点开链接,出现文档,通过url判断title指向文件位置
2.查看本地演示文件的位置,通过../来跳转到文件的位置,获取文件内容
http://192.168.223.143/pikachu/vul/dir/dir_list.php?title=../../../../1.txt
PS:目录遍历是显示文件内容并输出到页面,也有可能出现乱码的现象
总结
看到这里,你可能会觉得目录遍历漏洞和不安全的文件下载,甚至文件包含漏洞有差不多的意思,是的,目录遍历漏洞形成的最主要的原因跟这两者一样,都是在功能设计中将要操作的文件使用变量的方式传递给了后台,而又没有进行严格的安全考虑而造成的,只是出现的位置所展现的现象不一样,一个是将文件下载下来,另一个是将文件内容显示在页面
本文来自博客园,作者:icui4cu,转载请注明原文链接:https://www.cnblogs.com/icui4cu/p/15695489.html