PHP代码审计——任意文件写入漏洞(LvyeCms) 3.1.0)

一、代码审计

在add()方法,首先判断通过POST传递的内容是否为空,不为空继续执行取得文件名,检查传递过来的目录,如果有两个反斜线,替换成一个反斜线,完整新增文件路径就是把fir和dir拼接在一起,
PHP代码审计——任意文件写入漏洞(LvyeCms) 3.1.0)_第1张图片
其中post.file是thinkphp内置的框架函数,与下图一样的意思,参数file通过POST形式传递
PHP代码审计——任意文件写入漏洞(LvyeCms) 3.1.0)_第2张图片
PHP代码审计——任意文件写入漏洞(LvyeCms) 3.1.0)_第3张图片
stripslashes() 函数:删除由 addslashes() 函数添加的反斜杠。该函数可用于清理从数据库中或者从 HTML 表单中取回的数据。

htmlspecialchars_decode()函数:此函数的作用和 htmlspecialchars() 刚好相反。它将特殊的HTML实体转换回普通字符。被转换的实体有: &, " (没有设置ENT_NOQUOTES 时), ' (设置了 ENT_QUOTES 时), < 以及>。

file_put_contents()函数:把一个字符串写入文件中。

访问漏洞URL:http://127.0.0.1/index.php?g=Template&m=Style&a=add
PHP代码审计——任意文件写入漏洞(LvyeCms) 3.1.0)_第4张图片
测试随便写个文件名123,会被保存为php文件
PHP代码审计——任意文件写入漏洞(LvyeCms) 3.1.0)_第5张图片
之后,重新随便写个文件使用burpsuite抓包拦截,重命名为test,并且写在网站根目录
PHP代码审计——任意文件写入漏洞(LvyeCms) 3.1.0)_第6张图片
PHP代码审计——任意文件写入漏洞(LvyeCms) 3.1.0)_第7张图片
可以写一句话木马、webshell等等

你可能感兴趣的:(PHP代码审计)