【第66课】Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入

免责声明

本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。

如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。

文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。

#知识点:
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独有漏洞,是一种功能强大的表达式语言、用于在运行时查询和操作对象图,由于未对参数做过滤可造成任意命令执行。

1、Spring表达式

在这里插入图片描述
在这里插入图片描述

2、Spring反射绕过(黑名单过滤)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考:https://www.jianshu.com/p/e3c77c053359

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值