Java代码审计靶场
SQL注入实战与修复
缺乏合适的靶场一直是Java代码审计学习的难点。本文将带你通过一个专为安全学习设计的靶场,实战分析SQL注入漏洞,并讲解如何修复与防御,为你的安全技能加码。
如何使用靶场呢
首先关注公众号
发送bug,然后访问返回后的那个url即可登录成功。
在个人中心输入我的邀请码,可以获得一个月会员。3d1baa8fbebf4bdb
另外,转发此文章到朋友圈,公众号,都可以私聊我获取额外的会员以及积分奖励。
前言
从来没有那种很好用的靶场来学习Java代码审计,所以它来了,我们今天就会通过这个靶场来学习代码审计的内容。
这里是好靶场,我们会做出好的网络安全靶场。学了不练,等于白练,做练习就用好靶场。
本文需要在有一定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 `关键字。
我们在他的前后去找执行的SQL语句。从而达到快速发现SQL注入的目的。
// END //
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...