DVWA —— File Inclusion 文件包含

目录

漏洞原理

本地文件包含漏洞

远程文件包含漏洞

Low

渗透思路

目录穿越实现文件包含

Medium

渗透思路

特殊字符绕过

完整路径绕过 

源码对比

Low & Medium 源码

对比小结 

High

渗透思路 

伪协议读取文件绕过

源码对比

Medium & High 源码对比

对比小结

Impossible

源码对比

High & Impossible 源码

对比小结

绕过

防御

参考文章


漏洞原理

web 程序中引入一段用户能控制的脚本或代码,并让服务器端执行 include() 等函数通过动态变量的方式引入需要包含的文件,用户能够控制该动态变量,实现本地文件包含或者远程文件包含,从而导致:

  1. 执行任意代码
  2. 读取文件源码或敏感信息。
  3. 包含恶意文件控制网站,甚至控制服务器。

本地文件包含漏洞

仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。 

远程文件包含漏洞

能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。 

因此,在web应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。

Low

渗透思路

正常点击 3 个文件连接查看内容:

File3 已经很贴心的告诉我们当前包含文件的路径和请求地址,除此之外我们还可以从点击文件后的 URL 地址栏里获得同样信息

目录穿越实现文件包含

白送的漏洞,直接拿 passwd  文件:http://192.168.72.134/vulnerabilities/fi/?page=../../../../../../../etc/passwd

注:目录穿越测试需要关闭 php 的 open_basedir 功能限制,分全局和局部限制,全局配置在 php.ini

局部限制在指定目录下的 .user.ini 中

如果环境是 phpstudy。可以直接关闭即可

Medium

渗透思路

特殊字符绕过

把 ../ 当作真正路径的分隔符填充在每一个字符之间,路径如下:

.../...//.../...//.../...//.../...//.../...//.../...//.../...//.../...//.../...//etc/passwd

成功绕过:

完整路径绕过 

没想到的是完全避开 ../ 只剩下 /etc/passwd 这个完整路径也能轻松绕过。

源码对比

Low & Medium 源码

对比小结 

通过对比可知,Medium 和 Low 两个的等级代码区别主要是:

  • 多了一步输入校验,屏蔽的不仅是 ../ 还有协议头防止远程文件包含等,如果禁止所有远程文件包含,可以直接禁用 allow_url_include。

High

渗透思路 

尝试之前的方式想探测出到底屏蔽了那些字符,但请求都会失败,所以还以为把特殊字符都屏蔽了,只发现了一个隐藏页面,不疼不痒的话,也算是之前疏忽了。

伪协议读取文件绕过

后来查资料发现 php 伪协议读取文件的方式,其中file 协议在测试中成功了:

 /vulnerabilities/fi/?page=file:///etc/passwd

源码对比

Medium & High 源码对比

对比小结

High 以文件开头为 file 做限制条件,难怪之前的都失败了,还好伪协议 file:// 刚好符合条件,除此之外还有很多其他伪协议

Impossible

源码对比

High & Impossible 源码

对比小结

无话可说,包含文件不多的情况下,可以通过白名单把合法包含文件名卡的死死的

绕过

  1. PHP伪协议
  2. php://input 可以访问请求的原始数据的只读流,将 post 请求的数据当作 php 代码执行。
  3. php://filter 可以获取指定文件源码。当它与包含函数结合时,php://filter 流会被当作 php 文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。
  4. zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip:// 流会被当作 php 文件执行。从而实现任意代码执行。
  5. 包含 Apache 日志文件,WEB 服务器一般会将用户的访问记录保存在访问日志中
  6. 包含 SESSION,可以先根据尝试包含到 SESSION 文件,在根据文件内容寻找可控变量,在构造 payload 插入到文件中,最后包含即可。
  7. 包含 /pros/self/environ,proc/self/environ 中会保存 user-agent 头,如果在 user-agent 中插入 php 代码,则 php 代码会被写入到 environ 中,之后再包含它,即可。
  8. 包含 xss
  9. 目录遍历
  10. url 编码
  11. 利用 url query 或 fragment
  12. %00 截断

防御

  1. 严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;
  2. 限制包含文件的路径:限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:“../”;
  3. 包含文件进行白名单验证:验证被包含的文件是否是白名单中的一员;
  4. 尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include('head.php')。
  5. 设置allow_url_include 为 Off

参考文章

文件包含漏洞利用方式总结与防御 - 网安

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值