CSRF漏洞挖掘
对于CSRF漏洞基础概念不熟悉的小伙伴,可回顾学习WEB安全原创入门学习课程下的第 2.2 课 --- CSRF漏洞基础入门。
学习链接:https://t.zsxq.com/EieMBuj
本系统也存在多处CSRF漏洞,举例说明。
①、访问用户面板功能,点击写便签,输入任意内容。
②、打开BurpSuite,并打开浏览器代理,指向BurpSuite。BurpSuite打开Intercept is on进行拦截。
③、然后点击保存便签,BurpSuite拦截输入包如下图所示:、
代码分析:
获取到输入的内容之后,没有做任何限制。
这是 Java Web 应用程序中用于保存“便签纸”对象的方法。它似乎正在使用 Spring MVC,因为它具有基于注释的请求映射和会话属性。
该方法接受三个参数:
● Notepaper npaper:这是一个代表便条纸的对象。它具有各种字段,例如标题、内容和用户 ID。
● @SessionAttribute("userId") Long userId:这是一个保存用户 ID 的会话属性。它带有 注释@SessionAttribute,这意味着它将由 Spring MVC 框架从用户的会话中自动检索。
● @RequestParam(value="concent",required=false)String concent:这是一个名为“concent”的请求参数。它被注释为@RequestParam,这意味着它将由 Spring MVC 框架从请求中自动检索。该required=false属性表明该参数是可选的。
该方法执行以下操作:
- 它从会话属性中检索与用户 ID 关联的用户对象。
- 它将便条对象的创建时间设置为当前日期。
- 它将 notepaper 对象的用户 ID 设置为在步骤 1 中检索到的用户对象。
- 如果它为 null 或为空,它将便条对象的标题设置为“无标题”(中文意思是“无标题”)。
- 如果“concent”请求参数为 null 或为空,它将 notepaper 对象的内容设置为该值。
- 它使用对象保存便条纸对象ndao,该对象可能是某种数据访问对象。
- 它向客户端返回“重定向”响应,将客户端定向到“/userpanel”URL。这将导致客户端浏览器向“/userpanel”URL 发出新请求。
越权删除
从渗透测试黑盒角度测试,我们发现了日程管理处存在越权删除漏洞。现在我们从代码角度看看问题出在了哪里。
通过日程删URL中的dayremove,可以定位到日程删除位于src\main\java\cn\gson\oasys\controller\daymanage\DaymanageController.java,第204-211行,如下图所示:
单从上面几行代码来看,仅是查询rcid参数后,进行了删除。我们进一步追下流程。
①、从上面可以看到,使用了daydao.findOne(rcid),来操作rcid,查看daydao发现来自DaymanageDao,如下图所示:
②、进入DaymanageDao,发现并没有findOne,发现DayManageDao继承了JpaRepository,而进入JpaRepository之后也未发现findOne,但发现它继承了QueryByExampleExecutor,而findOne就在这里面,如下图所示:此时大家应该发现JpaRepository和QueryByExampleExecutor代码属于引入依赖的代码了,这两个代码来源自Spring Data,其中findOne是其中一个方法,具体意思如下
就是说:
● findOne返回一个Optional对象,可以实现动态查询;而Optional代表一个可能存在也可能不存在的值。
此时总结上面流程,简单说,日程删除功能先使用findOne去查询rcid是否存在该值。
然后再使用daydao.delete(rc)进行删除,此时我们追踪一下这个方法,发现这个delete方法也就是Spring Data CrudRepository中的delete(删除)方法,如下图所示:
最后,我们回顾整个流程,也就是说查询了rcid的值,然后进行删除。整个流程没有任何权限的验证,因此导致了越权的操作。
REF:
http://myblog.ac.cn/archives/2022-08-10-10-53-26