【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

admin 2023年4月25日23:43:09评论74 views字数 2292阅读7分38秒阅读模式
【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)
点击上方“公众号” 可以订阅哦!

Hello,各位小伙伴大家好~

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

这里是一名白帽的成长史~


上期讲完了SSH框架的搭建:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(上)

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


今天一起来看看Hibernate的注入挖掘吧~

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)
【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


Part.1

SSH路由分析


框架判断

在代码审计之前,我们需要先判断一下该cms使用什么框架进行运作。

 

翻看src目录,可以找到Spring核心配置文件applicationContext.xml:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


可以看到applicationContext.xml加载了hibernate配置文件:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


可以找到struts路由配置文件:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


由此可以判断这是一个SSH框架,即Struts2 + Spring + Hibernate。


【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


路由分析

判断为SSH框架后,来分析一下路由,参考下图:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


假如用户请求以下url:

https://127.0.0.1:8080/lcmsnewfujian/repair/showReportRepairSearch.action?repairNumber=123&page=1


其中/lcmsnewfujian 为网站根目录,后面/repair/为命令空间,用于标记struts路由配置。


我们可以根据url中的命名空间(/repair/),找到对应的路由配置文件struts-repair.xml:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


根据url中的/repair/showReportRepairSearch.action锁定struts-repair.xml中的控制器配置:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

//上图可以看出该控制器对应的方法为ckupFixAction.java中的showReportRapairSearch()方法


//因此url中的showReportRepairSearch.action?repairNumber=123,

即向ckupFixAction.java中的showReportRapairSearch()方法,传递参数repairNumber=123

 

全局搜索,找到ckupFixAction.java类,以及showReportRapairSearch()方法:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

//根据路由,该请求将repairNumber=123发送给了chupFixService类的showReportRapairSearch()处理。


showReportRapairSearch()执行到最后,会return SUCCESS到控制器struts-repair.xml:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


控制器收到SUCCESS后,根据result配置,将结果跳转至showReportEquipment.jsp页面,本次访问就结束了。

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


以上就是ssh框架的基本路由流程。


总结一下:

1、当我们输入url访问SSH框架服务时,服务端先根据url中的/命名空间/控制器名称.action找到对应的struts.xml中的控制器配置。

2、由此确定下一步访问的控制器及该控制器对应的方法,再往下一步步追溯到dao层即可。

3、最后再根据result的值(return SUCCESS),将结果跳转至对应的页面即可。


梳理完路由之后,来看看漏洞挖掘。

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


Part.2

漏洞挖掘


漏洞挖掘

Hibernate大多采用HQL来进行数据库操作,HQL是hibernate框架提供的一种查询机制,可以完成查询、修改、删除等操作。


全局搜素String hql等关键字,找到以下直接拼接参数的sql语句,位于Dao层CkupFixDaoImp.java中的showReportRepairSearch()方法:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

//可以看到这里直接拼接repairNumber参数,且为string类型,如果没有过滤,则可能存在sql注入。

 

往service层追溯,或者全局搜素showReportRepairSearch方法:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


定位到CkupFixServiceImp.java 的 showReportRepairSearch()方法:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


再往上追溯,定位到控制器CkupFixAction的showReportRepairSearch()方法:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

//可以看到该代码的功能点为:
   维修管理 -> 设备维修 -> 查询


根据前面分析的路由,可知class=ckupFixAction,method=showReportRepairSearch,可以在路由文件struts-repair.xml中找到该配置,且该配置的name=showReportRepairSearch:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


由struts-repair.xml可知,命名空间为/repair/

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


全局搜索/repair/showReportRepairSearch,可以定位到漏洞前端页面showReportEquipment.jsp,及漏洞触发url:

/lcmsnewfujian/repair/showReportRepairSearch.action?repairNumber=123&page=1

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


找到漏洞页面测试,或者根据前面的url直接构造报文测试均可:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


拼接sql注入语句  11’ or ‘1’=‘1  :

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


通过sql注入,查出全部保修订单:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


漏洞修复

和mybitis一样,需要对用户输入的内容进行检查。


或者通过占位符的方式进行规避,hql有两种常用占位方式:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


(1)通过?号作为占位符:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

(2)通过参数名称进行占位:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


将本文中的代码通过占位符或者命名参数的方式进行修复:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


再次测试,漏洞已修复:

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)
【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)


Part.3

以上就是今天的全部内容了~

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

欢迎关注我的公众号~ 

Peace!

“在看”我吗?

【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

原文始发于微信公众号(一名白帽的成长史):【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月25日23:43:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【JAVA代码审计】从零开始的Hibernate框架SQL注入审计(下)https://cn-sec.com/archives/1691313.html

发表评论

匿名网友 填写信息