JAVA代码审计-jsherpcms

admin 2023年12月12日13:23:54评论23 views字数 1725阅读5分45秒阅读模式

免责声明

由于传播、利用本公众号亿人安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号亿人安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把“亿人安全设为星标”,否则可能就看不到了啦


原文首发在:奇安信攻防社

https://forum.butian.net/share/2555


环境搭建

源码:https://github.com/jishenghua/jshERP/releases/tag/2.3

下载之后用idea导入

JAVA代码审计-jsherpcms
导入数据库文件

JAVA代码审计-jsherpcms
然后修改配置文件

JAVA代码审计-jsherpcms
然后启动

测试用户:jsh,密码:123456

JAVA代码审计-jsherpcms

sql注入

因为是审计 在加上该cms用的是mybatis 那当然是sql注入最容易审了

因为mybatis的$ # 号的区别 一个拼接一个预编译 具体区别可自行百度

直接全局搜索${ 寻找拼接sql的地方

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms
在这里发现一个在like后面进行拼接sql的 然后全局搜索countsByUser这个

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms
发现在UserService里面的countUser函数调用了这个sql 然后全局找UserService调用countUser的地方

JAVA代码审计-jsherpcms

未授权

查看filter文件

JAVA代码审计-jsherpcms
.css#.js#.jpg#.png#.gif#.ico,/user/login#/user/registerUser#/v2/api-docs资源请求不拦截

继续往下看

JAVA代码审计-jsherpcms
因为是通过getRequestURI();来获取的

在看55行 只要包含这几个路径就放行 那么可以通过../来进行绕过

测试

JAVA代码审计-jsherpcms
没登录的情况下 访问home会302跳转

JAVA代码审计-jsherpcms
成功绕过

下面对于静态资源的校验也是一样的

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms
跟进这个函数

JAVA代码审计-jsherpcms
返回true

JAVA代码审计-jsherpcms
也是成功绕过

后续其他接口啥的该方式都可对鉴权进行绕过 未授权对接口进行操作

比如

JAVA代码审计-jsherpcms

存储xss

这个点是结合黑盒一起看的

先演示

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms
修改备注 然后保存会发现直接弹xss了

JAVA代码审计-jsherpcms
然后每次点进来也会弹

分析

首先抓到保存的时候的包

JAVA代码审计-jsherpcms
从数据包也可以看到前端也是没有过滤的 然后根据数据包路由找到代码

JAVA代码审计-jsherpcms
找到controller层 然后跟进分析

JAVA代码审计-jsherpcms
可以看到获取到body参数的row 然后直接调用depotHeadService.updateDepotHeadAndDetail函数 继续跟进

因为从数据包里面看到xss语句是在row里面 直接看row传的地方

JAVA代码审计-jsherpcms
继续跟进函数

JAVA代码审计-jsherpcms
从数据包里面可以看到xss payload是在remark参数里面 继续找

JAVA代码审计-jsherpcms
一直跟到这里

JAVA代码审计-jsherpcms
最后来到这里 然后前面没有看到过滤的操作 继续跟进

JAVA代码审计-jsherpcms
就直接调用mapper执行数据库插入了 没有进行过滤

打断点 调试到这里也可以看到

JAVA代码审计-jsherpcms
这是存入的时候没有过滤 下面看输出的时候

点击编辑的时候会抓到这个包

JAVA代码审计-jsherpcms
根据路由全局找到代码

JAVA代码审计-jsherpcms
根据headerId来进行查询数据

JAVA代码审计-jsherpcms
查到数据也是直接返回 没有过滤 然后返回给前端

JAVA代码审计-jsherpcms
返回的json格式

JAVA代码审计-jsherpcms
然后来到前端页面 因为返回的是json格式前端肯定是发出ajax请求来获取数据的 直接来到页面搜索api:/depotItem/getDetailList

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms
拿到数据后是通过datagrid来渲染的 也就没有过滤 所以造成了xss

datagrid可以自行百度一下

JAVA代码审计-jsherpcms
也就是说 其他地方也都是这种 存在存储xss 不止这一个页面

JAVA代码审计-jsherpcms

越权

进入账号用户管理 然后编辑用户 重置密码

可以看到这里有一个id

JAVA代码审计-jsherpcms
然后根据路由来到代码的地方

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms
在这里就校验了重置的账号是不是admin 没有其他鉴权操作 也就是说可以直接重置admin开外的所有账户

测试

登录test3

JAVA代码审计-jsherpcms
抓到cookie 替换到刚才的包

JAVA代码审计-jsherpcms
test2 id为135

JAVA代码审计-jsherpcms
这里越权重置密码之后 可以越权修改

越权2

越权修改密码

在第一个越权重置之后 修改密码的地方同样也可以越权

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms
同样也没有什么鉴权

比对了一下旧密码 但因为之前已经重置 所以 也可以修改

像什么删除这些也是同样可以的

JAVA代码审计-jsherpcms

接口泄露

JAVA代码审计-jsherpcms
这个是直接能够访问的 通过接口泄露 也就可以知道前面越权的api接口

3.1新版都已修复
如sql注入

JAVA代码审计-jsherpcms

JAVA代码审计-jsherpcms
${ 改成了#{
#{} : 对读取到的参数先使用?来占位,然后去预编译SQL,最后再将?替换为形参值。

${} : 直接替换读取到的形参值,没有预编译的过程。

接口泄露的url也没了

JAVA代码审计-jsherpcms

其他也都类似

原文始发于微信公众号(亿人安全):JAVA代码审计-jsherpcms

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月12日13:23:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JAVA代码审计-jsherpcmshttp://cn-sec.com/archives/2290283.html

发表评论

匿名网友 填写信息