场景:
1.我们在写一个项目的时候,我们需要实现一个过滤的功能,是对于每一个代码需要进行过滤的代码进行过滤,还是使用一个写好过滤条件的代码进行包含(代码共享)
2.例如 数据库等配置文件,每一个网页文件都需要加载数据库的数据来进行页面显示,因此每个网页都需要写输入数据库的配置信息来进行数据获取,为了便利和代码的简洁性,我们可以使用文件包含去包含数据库配置信息来达到简化代码,优化代码的效果
在进行文件包含的时候如果所包含的文件是php代码的话就会执行出php代码执行后的结果
我们使用一个变量进行赋值,将所需要包含的文件通过参数的形式传递进来进行包含
包含意味着执行,即使我们所包含的文件不是脚本文件,只要里面有脚本的内容就可以通过脚本进行解析
如果有参数传递的话我们可以尝试获取网站目录下的其他文件,例如静态资源,他不执行的话就会将文本进行读取
例如我们网站目录下有一个flag.php文件,我们包含这个文件就可以读取这个文件里面的内容
利用这个思路我们可以读取一些网站下的默认配置文件,和一些操作系统的自敏感文件 例如windows系统下的win.ini文件
文件包含支持一些伪协议(以php为例)
我们先可以使用php伪协议去读取文件的内容
http://127.0.0.1/includetest.php?input=php://filter/convert.base64-encode/resource=flag.php
以此类推也可以读取敏感文件信息
http://127.0.0.1/includetest.php?input=php://filter/convert.base64-encode/resource=/Windows/win.ini
当然利用伪协议并不只是为了简单的读取数据文件,我们还可以借此执行系统命令
我们可以借助php伪协议重点input协议
我们将要执行的命令以php文件中的system函数去执行。
到这一步相当于拿到后台的权限,后期的利用就可以使用bash去远程下载后门文件,然后使用后门连接获取后台权限
满足这个条件前期要开启php的两个配置(php.ini中设置)
以phpstudy为例 php.ini的路径为D:\phpstudy_pro\Extensions\php\php7.3.4nts
远程包含
我们传递百度的logo传递给我们的后台发现图片发生了解析
证明可以远程包含并下载文件
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的访问日志,我就直接把代码写到了错误日志里面,直接包含错误日志实现效果(如果有知道的也希望可以在评论区告诉我,谢谢啦)
1.过滤危险字符
2.php版本升级,防止%00截断
3.对上传的文件进行重命名,防止被读取
4.对于动态包含的文件可以设置一个白名单,不读取非白名单的文件。
5.做好管理员权限划分,做好文件的权限管理,allow_url_include和allow_url_fopen最小权限化
如有错误,请及时指出,感谢