对某OA的一次审计

前言

学了一段时间了JAVA代码审计了,也不知道学的如何,索性就找了一套代码尝试审计一下,刚开始不知道如何下手,大部分都是从功能点入手的。

FastJson反序列化

该项目是maven,首先查看了pom.xml,首先看是否引用了存在漏洞的依赖,在配置好环境之后看了下pom.xml文件,发现有fastjson,采用的版本也是存在漏洞的,但是利用未成功。放弃

SQL注入

大致浏览pom.xml代码时发现了mybatis,mybatis中存在${}SQL注入,全局搜索${},发现在/src/main/resources/mappers/address-mapper.xml和/src/main/resources/mappers/notice-mapper.xml中存在${}

接下来就去看那个地方对该参数进行了调用,往上跟踪cn.gson.oasys.mappers.NoticeMapper接口——>sortMyNotice追踪到/src/main/java/cn/gson/oasys/controller/inform/InformController.java的如下代码中

可以看到baseKey是可控的,直接从前端传入,下面给的有url,然后直接访问就行
http://localhost:8089/informlistpaging?baseKey=1

报错注入

通过构造payload可以使用报错注入的方式在控制台处得到返回的报错信息
Payload
http://localhost:8089/informlistpaging?baseKey=1' and (select extractvalue(“0x7e”,concat(‘~’,(select user())))a) and ‘1’=’1

时间盲注

同样可以构造时间盲注的payload
http://localhost:8089/informlistpaging?baseKey=1' and (select * from(select(sleep(2)))a) and ‘1’=’1%23

XSS

在测试功能点时发现在写笔记时将标题名可直接写为XSS恶意代码

成功弹窗

代码中并未对该处输入坐任何限制,在存储时也是直接将得到的Title存储

越权

在审计代码过程中看到了在用户的控制器中的代码并未做登陆校验功能,在usermanage代码中size参数是可控的

默认一页查询的数据为10条,size参数可控,而且并未对登陆的用户做校验,所以可能存在垂直越权。先创建一个低权限用户

创建好的默认密码就是123456,登陆之后去访问 usermanage 如果不传入size参数 那么只能够看到前10条信息,而且还可以进行用户的添加

如果传入size或者page参数就可以对用户信息进行遍历


直接添加超级管理员用户