文件包含漏洞
这样就可以包含文件
黑盒可以尝试改文件名,看看是不是包含指定的文件
第一关(为协议)
给你这段代码,直接包含flag.php无法正常包含,所有选择包含伪协议
所以我们可以这么做
也可以通过这种为协议
包含远程地址文件
让其包含一个远程的地址
在远处的地址的文件中
限制
第二关
过滤php
第三关(日志包含)
把data和php过滤,试着远程访问也不行,说明禁用了远程协议
写*都不行(只有system才可以使用),其他那些就是需要写具体的路径
因此我们尝试日志包含
首先我们先查看中间件,发现是nginx,于是我们就去网上搜索nginx的日志记录文件的地址
然后发现这个就是日志,我们就可以尝试着将后门写入日杂
然后发送
第四关(session包含)(主页session有时候会自动删除,所以得快一点)
phpstudy一般将session放在这里
然后linux,和windows
首先先上传一个文件,然后修改它的session
然后他就会出现在这
然后将name改成这个
这样写入后门代码
然后这个后门代码就会被写入session文件之中,然后再进行包含就可以了
它会限制目录
这样可以显示
但通过为协议就无法使用了
这样还是可以执行的
第五关(伪协议的写入)
这个“."是过滤日志
想上传这个
我们尝试将其编码
但是浏览器先会自动帮你解码,然后php又会被识别出来,然后,urldecode又会再次进行解码,进行两次解码这样还是会过滤
所以我们决定进行两次编码
这样浏览器解开一次,然后后门的函数再解开一次
file_put_content是将文件写入,file是要被写入的文件
将这个伪协议放其中,他就会创建一个123.php
然后通过post传参将后门写入(注意要记得将这个后门代码编码,因为看上面它这个伪协议后门是将他解码的)
另外一种方法(凯撒)
用roy13对其进行编码
然后
发现是空白
然后打开这个文件
第六关(base64编码)
发现可以用date的为协议
首先将执行语句进行base64编码
然后通过伪协议,进行包含,那么当include看到这个base64就会自动解码
第七关(UCS_2LE_UCS_2BE解密方式)
发现没有过滤php的为协议,所以可以尝试php为协议写入
php代码后门编译
代码审计cms
用工具搜索关键词include
发现include有文件夹的参数,所以无法使用第三种方法,为协议了
然后浏览网站也没有可以文件上传的地方,所以第二种失效
然后我们尝试直接打开日志文件,但当我们这么输入后
无法打开,因为后面会自动给我加上.php就失效了
最后用这种方法,就可以把后面cms的php给去掉
但是这只有低版本才可以