菜某的笔记总结,如有错误请指正。
本文用的是PHP语言作为案例
开发者使用include()等函数,可以把别的文件中的代码引入当前文件中执行,而又没有对用户输入的内容进行充分的过滤,所以导致用户可以通过改变输入访问任何文件。
单单一个文件包含的话,并不能有什么大的威胁,但是他像艾滋病一样,他不会干掉你,但是他能让其他的漏洞危害无限放大,让其他漏洞干掉你。
最大功能:不管什么形式的文件,只要里面有PHP代码,就能带入当前文件中执行。
1.配合文件上传:让原本解析不了的文件通过文件包含直接解析。
2.读取网站中的敏感信息,一些储存在文件中的敏感信息,甚至可以跳出网站的文件夹看本盘的文件。
3.自我构建漏洞:即使没有漏洞,也可以直接写一个漏洞上传上去,然后用文件包含去执行。比如SQL注入和远程命令执行。从而实现攻击数据库和操作系统。
4.作为跳板机攻击内网或者其他网站:上传一个ssrf漏洞的代码,然后用文件包含去执行它。让这个服务器去访问其他资源。
有了他你就拥有了一切~
所以这个漏洞大大的强大。
本地包含:包含本地文件
远程包含:包含远程的文件,这个是需要在PHP中进行配置的,可以从phpinfo中看到
最下面的,但是默认是这个off的状态。
这个怎么开百度一下吧,开启之后就可以输入想要包含文件的url,在自己网站上写一些漏洞或者后门让目标网站去包含就可以了。
环境为本地搭建
文件位置以及源代码
利用方法
可以看到我们用这个漏洞访问了show.txt.
白盒:代码审计
黑盒:
1.扫描工具
2.cms平台的公开漏洞
3.根据URL判断
根据URL的判断方法
1.看传参,很明显这里能看出来他包含了show的文件
2.把传参去除看看页面是否一致,再或者访问一下show看看界面是否一致。
3.看英语含义,因为代码大多是用英语简写写的,传参的时候,id一般就是序号,file一般就是文件,file的话一般可能是包含的文件。
1.固定文件名的后缀
2.升级PHP防止%00的截断
3.使用waf
4.使用白名单,规定部分文件
5.上传的文件进行重命名,防止被读取
包含的文件强制添加了html后缀
访问html正常
%00截断法
前提:对方PHP版本小于5.3.4
因为我的版本比较高,所以就不演示了。
原理就是%00后面的内容会被截掉,.html就不起作用了。
下面这个有一定争议哈
长度截断法
当名称长过了一定限制之后,后面的就全没用了,所以.html在最后面就不起作用。
截断长度:windows长于256,linux长于4096
具体还是要看版本而定。
思路就是添加一些符号,但是系统会把这些符号过滤掉,但是长度过长。后缀限制也给移除了。
但是实测,我发现。。。我的并没有截断,但是有人能截断,这个还是看个人情况吧
这里我修改了pikachu靶场的文件上传模块让他含有文件包含漏洞
pikachu文件的修改如下
我在文件上传的部分添加了一个include和file的文件其中include包含了文件上传漏洞。
include代码
file中的代码
首先我们看到文件包含漏洞是可以利用的
接下来开始文件上传操作
文件上传处只允许上传图片,假设这里过滤十分严谨没有能解析成PHP的可能。
但是我们利用文件包含漏洞
上传一个png文件里面写有一句话木马
上传毫无阻拦
这里利用文件包含漏洞去执行图片代码。
用蚁剑去连接
日网站成功!
文件位置如下
包含文件路径如上
e盘中存在lookme.txt
我们需要向上跨越三级去包含这个文件。
成功日站。
php://协议
常用
php://filter用于读取源码
储存在PHP文件中,包含经常会直接运行,用这个协议可以读取源码。
让他返回一个base64的文件,然后解码。
语法:
php://filter/convert.base64-encode/resource=文件路径
php://input用于执行php代码把post请求中的数据作为代码执行
语法:
php:
//input + [POST DATA]
post写法:
phar://、zip://、bzip2://、zlib://
用来访问压缩包中的文件
语法案例:
zip://[压缩包绝对路径]#[压缩包内文件]
一般现在都是高版本的PHP了,所以这个用的还是很舒服的
https://www.cnblogs.com/endust/p/11804767.html
嗯,总之就是很强大。