免责声明
本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。
如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。
文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。
#知识点:
1、Java安全-SQL注入-JDBC&MyBatis
2、Java安全-XXE注入-Reader&Builder
3、Java安全-SSTI模版-Thymeleaf&URL
4、Java安全-SPEL表达式-SpringBoot框架
靶场搭建
JavaSec
https://github.com/bewhale/JavaSec
使用java8运行jar文件
Hello-Java-Sec
java8 -jar javasec-1.11.jar
一、演示案例-Java安全-SQL注入-JDBC&MyBatis
JDBC(Java语言连接数据库操作)
1、采用Statement方法拼接SQL语句(没有预编译)
2、PrepareStatement会对SQL语句进行预编译,但如果直接采取拼接的方式构造SQL,此时进行预编译也无用。
3、JDBCTemplate是Spring对JDBC的封装,如果使用拼接语句便会产生注入
安全写法
SQL语句占位符(?)
+ PrepareStatement预编译
MyBatis( mybatis是一个优秀的基于java的持久层框架,它内部封装了 jdbc)
MyBatis支持两种参数符号,一种是#
,另一种是$
,#使用预编译,$
使用拼接SQL。(造成注入原因也是因为使用了$
进行拼接)
1、order by注入:由于使用#{}会将对象转成字符串,形成order by “user” desc造成错误,因此很多研发会采用${}来解决,从而造成注入.
2、like 注入:模糊搜索时,直接使用’%#{q}%’ 会报错,部分研发图方便直接改成’%${q}%'从而造成注入.
3、in注入:in之后多个id查询时使用 # 同样会报错,从而造成注入.
白盒审计
在真实情况下,需要先分析源码里用了那种方式操作数据库(JDBC还是MyBatis),然后在针对性看代码写法,JDBC如果没用到安全写法,那么就容易出现问题。MyBatis看代码用了$
还是#
,#
号就可以不用看了,$
符号就看是不是在order by、like、in
里面,在就恭喜了。
代码审计案例:inxedu后台MyBatis注入
1、配置安装源码
端口要与配置文件一致
默认/inxedu_war
路径即可
2、代码审计分析
通过java文件名判断应该是admin
目录,登录后台。
直接把整个请求数据包放到txt给sqlmap跑即可
二、演示案例-Java安全-XXE注入-Reader&Builder
XXE (XML External Entity Injection), XML外部实体注入,当开发人员配置其XML解析功能允许外部实体引用时,攻击者可利用这一可引发安全问题的配置方式,实施任意文件读取、内网端口探测、命令执行、拒绝服务等攻击。
XMLReader
SAXReader
SAXBuilder
Unmarshaller
DocumentBuilder
审计的函数
1. XMLReader
2. SAXReader
3. DocumentBuilder
4. XMLStreamReader
5. SAXBuilder
6. SAXParser
7. SAXSource
8. TransformerFactory
9. SAXTransformerFactory
10. SchemaFactory
11. Unmarshaller
12. XPathExpression
三、演示案例-Java安全-SSTI模版-Thymeleaf&URL
SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容。
1、URL作视图
2、Velocity
3、Thymeleaf
其他语言参考:https://www.cnblogs.com/bmjoker/p/13508538.html
四、演示案例-Java安全-SPEL表达式-SpringBoot框架
SpEL(Spring Expression Language)表达式注入,java独有漏洞,是一种功能强大的表达式语言、用于在运行时查询和操作对象图,由于未对参数做过滤可造成任意命令执行。