前言
学习代码审计中,毕竟不会代码审计的安全人员不是一个好的安全人员。这是我写代码审计的第一篇文章,之前复现了Discuz!X 3.4
的任意文件删除,那么我就来写写这个漏洞的成因。这个漏洞在我博客也是可以找到的,所以前面的话也不多说了,直接开始分析吧。
漏洞分析
这个漏洞的根本原因在于下图的代码
我们可以看到unlink
函数后有个$space[$key]
,这个参数就是我们的个人设置,是从数据库中读取出来的,而从数据库中读取的数据是我们可以前台控制的数据,那么unlink
后面的参数是不是就是可以控制的了。
在看别人的分析代码的时候,在这段代码之前也有个unlink
,但是给修复了,所以不用管,我们这个这个版本的漏洞的成因就在这。
我们向前回溯一下,看看$space
在哪
如图:$space = getuserbyuid($_G['uid'])
,就是获取uid相对应的用户
space_merge()
函数的功能是把$space
存入对应的数据表中,但是并无过滤
所以我们可以POST提交,修改个人资料,如下图,资料修改
space_merge
函数把存入数据表,下图birthprovince
的数据,这里数据不一致的原因是我截图的时候是又测试了下是否可重装。
在最后,上传图片,满足我们这个漏洞的if语句,就达到了任意文件删除的目的。