从来没有那种很好用的靶场来学习Java代码审计,所以它来了,我们今天就会通过这个靶场来学习代码审计的内容。
这里是好靶场,我们会做出好的网络安全靶场。学了不练,等于白练,做练习就用好靶场。
https://github.com/haobachang-1/haobachangBlog/blob/main/README.md
本文需要在有一定Java基础的前提下进行,且掌握了基本的SQL手注的方式。
开启环境
访问一下
首先我们来看一下存在漏洞的源码,可以看到SQL语句是通过 +
号去拼接的
那么如果是+
号拼接的话就会出现输入的'
将前面的语句闭合,从而导致存在SQL注入。
根据提示进行测试,可以看到SQL注入是真实存在的。
接下来就需要各位去进行手注的练习了,比如order by 判断显示,等等,我们这里查询一个数据库名称。
查询Flag的事情就交给各位了。
我们再来看看安全代码。
安全代码使用了 PreparedStatement 预编译,从而规避了SQL注入。一般情况下预编译是可以规避大部分的SQL注入的。
PreparedStatement
是 Java JDBC 中的一个接口(继承自 Statement
),主要用于执行预编译的 SQL 语句,其核心原理围绕 “预编译” 和 “参数化查询” 展开,相比普通的 Statement
具有性能优化和安全增强的特点。
使用 PreparedStatement
时,SQL 语句中用 ?
作为占位符代替具体参数(例如 SELECT * FROM user WHERE id = ?
),这条 “带占位符的 SQL 模板” 会被提前发送到数据库服务器。
数据库收到后,会对 SQL 进行语法解析、语义检查、生成执行计划(这一过程称为 “预编译”),并将编译后的执行计划缓存起来。
大家看了这个案列应该就知道一般Java中SQL注入的样子了吧,这里有一个潜在的内容,就是如何快速的在一个项目中发现SQL注入,大家可以进行通篇的查询executeQuery
关键字。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。