Discuz Ml v3.x 代码执行分析
目录
警告
本文最后更新于 2019-07-11,文中内容可能已过时。
昨天晚上Discuz Ml爆出了漏洞,今天来分析一波。
1 exp
修改Cookie中的xxxx_language字段为以下内容即可
|
|
访问网站首页则会在根目录下生成木马文件,shell.php 密码为a1
2 定位漏洞位置
解码exp
|
|
修改exp为_language=1.1.1;
使其报错。
定位到653行
关键代码644行
|
|
cachefile
变量是缓存文件,将其写入到/data/template/
目录下,并且由DISCUZ_LANG
拼接,追踪下DISCUZ_LANG
的值
2088-2096行
|
|
可以看到$_G['config']['output']['language']
作为DISCUZ_LANG
的值
全局搜索['language']
source/class/discuz/discuz_application.php 305行,发现是从cookie中拿到language的值
那么到这里整个漏洞的流程就很明显了,cookie中language
参数可控导致DISCUZ_LANG
可控,从而导致cachefile
的文件名可被注入代码,最终include_once
包含一下导致了造成代码执行。
phpinfo验证
Ov1T_2132_language='.phpinfo().';
3 修复建议
截止到本文发布之前,补丁还没有出来。
建议修改source/function/function_core.php 644行为
|
|
删除可控变量
4 写在文后
其实从漏洞点的注释上来看就知道这是一个未完成的部分,毕竟还是TODO
,开发人员得背锅。不过我怎么没有这种好运气呢,呜呜呜😭
如果你觉得这篇文章对你有所帮助,欢迎赞赏或关注微信公众号~