记某cms的漏洞挖掘之旅
任意文件写入
这个 cms 是基于 thinkphp5.1 的基础开发的,一般我们挖 cms 如果想 rce 的话,可以在 application 文件夹直接搜索等危险函数,如下图,我们直接全局定位到这个方法里面的
我们看到第一个参数,他是被拼接了这么一段路径
其中是我们可控的,那么一般就可以考虑下是否存在路径穿越的问题
再看到第二个参数也是我们可控的
所以这里就比较清晰了,我们只需要就可以进行路径穿越,也对我们写入 php 代码没有什么影响,所以我们直接 post 传参 即可
可以看到已经成功 rce
任意文件读取
我们再顺着这个方法往下瞅瞅,发现还有一个,他的参数也是,所以这里也是我们可控的,不同的是进入这个 else 分支我们用 get 传参即可
我们直接传入,发现已经成功把读取出来了
反序列化漏洞
上面两个漏洞是利用了和,这两个函数都是涉及了 IO 的操作函数,也就是说可以进行操作 phar 反序列化漏洞,但是他们的路径并不是完全可控的,只是后面一小部分可控,所以这条路走不通,所以接下来的思路就是搜索有没有可以操作的函数
我们直接全局搜索,一个一个分析是否可以利用
这里我的运气比较好,映入眼帘的是这个方法,他的是直接可控的,文章的开头说了这个 cms 是基于 thinkphp5.1 二次开发的,所以我们可以直接利用这个漏洞生成 phar 文件来进行 rce
我们首先看看能不能上传 phar 文件,在后台一处发现可以上传文件
我们先抓个包试试水,发现提示非法图片文件,应该是写了什么过滤
我们找到这个函数发现对图片的类型和大小进行了一些验证
然后尝试加了GIF89a头就可以上传了,看来多打CTF还是有用的,于是直接上传我们的 phar 文件就好了
这里要记得生成 phar 文件的时候要要加入GIF89a头来绕过,如下
可以看到已经成功上传了,同时记住下面那个路径
最后我们在这里触发我们的文件就可以了
总结
本篇的漏洞已经全部上交cnvd,这个 cms 总的来说比较适合练手,主要的切入点还是通过白盒通过寻找一些危险的函数,再想方设法的去控制它的参数变量
本文涉及相关实验:任意文件下载漏洞的代码审计(过本节的学习,了解文件下载漏洞的原理,通过代码审计掌握文件下载漏洞产生的原因以及修复方法。)