文件包含漏洞总结

文件包含:引用文件,进行代码共享

场景:

1.我们在写一个项目的时候,我们需要实现一个过滤的功能,是对于每一个代码需要进行过滤的代码进行过滤,还是使用一个写好过滤条件的代码进行包含(代码共享)

2.例如 数据库等配置文件,每一个网页文件都需要加载数据库的数据来进行页面显示,因此每个网页都需要写输入数据库的配置信息来进行数据获取,为了便利和代码的简洁性,我们可以使用文件包含去包含数据库配置信息来达到简化代码,优化代码的效果

在进行文件包含的时候如果所包含的文件是php代码的话就会执行出php代码执行后的结果

文件包含漏洞总结_第1张图片

我们使用一个变量进行赋值,将所需要包含的文件通过参数的形式传递进来进行包含

包含意味着执行,即使我们所包含的文件不是脚本文件,只要里面有脚本的内容就可以通过脚本进行解析文件包含漏洞总结_第2张图片

如果有参数传递的话我们可以尝试获取网站目录下的其他文件,例如静态资源,他不执行的话就会将文本进行读取

例如我们网站目录下有一个flag.php文件,我们包含这个文件就可以读取这个文件里面的内容

文件包含漏洞总结_第3张图片

利用这个思路我们可以读取一些网站下的默认配置文件,和一些操作系统的自敏感文件 例如windows系统下的win.ini文件

文件包含漏洞总结_第4张图片

文件包含支持一些伪协议(以php为例)

我们先可以使用php伪协议去读取文件的内容

http://127.0.0.1/includetest.php?input=php://filter/convert.base64-encode/resource=flag.php

文件包含漏洞总结_第5张图片

以此类推也可以读取敏感文件信息

http://127.0.0.1/includetest.php?input=php://filter/convert.base64-encode/resource=/Windows/win.ini文件包含漏洞总结_第6张图片

当然利用伪协议并不只是为了简单的读取数据文件,我们还可以借此执行系统命令

我们可以借助php伪协议重点input协议

文件包含漏洞总结_第7张图片

我们将要执行的命令以php文件中的system函数去执行。

到这一步相当于拿到后台的权限,后期的利用就可以使用bash去远程下载后门文件,然后使用后门连接获取后台权限

满足这个条件前期要开启php的两个配置(php.ini中设置)

以phpstudy为例 php.ini的路径为D:\phpstudy_pro\Extensions\php\php7.3.4nts

文件包含漏洞总结_第8张图片

远程包含

我们传递百度的logo传递给我们的后台发现图片发生了解析

文件包含漏洞总结_第9张图片

证明可以远程包含并下载文件

攻击思路

1.配合文件上传上传一个脚本文件,上传一个图片,图片中带有 后门文件,一旦网站的文件包含.这个文件,就会触发脚本代码

2.配合日志进行文件上传获得权限,日志会记录包含的UA信息,我们将UA信息改为后门代码,包含日志信息就会getshell

3.nginx日志查看分两种 1.源码包离线安装日志查看 日志位置 /usr/local/nginx/logs 2.rpm包安装日志查看 错误日志:/var/log/nginx/error.log 访问日志:/var/log/nginx/access.log

将执行的语句写到UA头中,然后使用文件包含包含日志信息进行文件执行

总结一下就是两种思路,能上传后门文件,我们就直接上传后门文件进行后门利用即可,不能上传文件,我们就需要将我们的后门语句写到网站已知的目录下,因为包含文件的特殊性,无论什么类型的文件,只要进行了文件包含就会执行,为此,我们将后门写入网站的日志中,包含日志文件也可以执行后门代码,或者利用其上线

因为我没有找到phpstudy的访问日志,我就直接把代码写到了错误日志里面,直接包含错误日志实现效果(如果有知道的也希望可以在评论区告诉我,谢谢啦)

文件包含漏洞总结_第10张图片代码执行成功

文件包含漏洞总结_第11张图片

防御措施

1.过滤危险字符

2.php版本升级,防止%00截断

3.对上传的文件进行重命名,防止被读取

4.对于动态包含的文件可以设置一个白名单,不读取非白名单的文件。

5.做好管理员权限划分,做好文件的权限管理,allow_url_include和allow_url_fopen最小权限化

写在最后

如有错误,请及时指出,感谢

你可能感兴趣的:(Web安全漏洞,网络安全)