一、项目背景:
oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql
底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框
架
二、项目配置:
1、java_version:Java 1.8.0_411
2、数据库: phpstudy内置 MySQL 5.7.26数据库
在 application.properties配置文件中进行数据库账密的设置,以确保可以进行连接:
3、配置完成后即可启动项目:
三、漏洞代码审计:
1、SQL注入审计:
(1) Mybatis 与 mapper.xml:
mapper.xml 文件用于定义 SQL 映射语句,包括查询、插入、更新和删除等操作。每个 mapper.xml 文件通常对应一个 DAO 接口(或 Mapper 接口),并在其中定义具体的 SQL 语句
由配置文件 application.properties中可知后端采用了 Mybatis框架,所以需要重点审计 mapper.xml中的SQL注入问题:
(2) 在 mappers文件夹中进行全局搜索 (ctrl + shift + F) 字符 ${,可以看到 mapper.xml中大量使用了 ${}来进行了参数替换,点击其中之一进行跟进:
代码使用了 LIKE语句进行了模糊查询,但是 LIKE 后使用了 ${}进行拼接,这会造成SQL注入:
点击绿色箭头回到 mapper接口位置:
通过分析接口可得接收的第二个参数即为漏洞点 pinyin:
跟进 allDirector,查看谁调用了该方法,跟进 AddController.java:
显而易见,参数 alph处存在SQL注入,此处的alph参数等效于 ${pinyin}:
(3) 根据 接口注释信息以及接口参数,在项目中寻找到漏洞点,漏洞在 "通讯录" -> "外部通讯录"处:
来到漏洞位置,点击 "刷新"并抓包:
将数据包发送至 sqlmap 中进行梭哈:
sqlmap注入语句为:
python sqlmap.py -r 数据包信息.txt --batch --risk=2 --level=2
(4) mapper.xml文件中还有其他同理的注入点,比如 ${outtype}:
产生原理同样是使用了 ${} 而不是 #{},就不再过多赘述了。
2、XSS审计:
XSS问题通常产生在信息存储并渲染在前端,并且存储语句未作充分的过滤的位置。
在 "用户面板" -> "存储便签" 位置未进行字符过滤从而导致XSS产生:
且save()方法中也未进行任何的过滤措施:
构造XSS语句产生XSS漏洞: