代码审计(Java)——WebGoat_SqlInjection
一、Sql Injection_introduction
1.这里level1-8就不说了,都是介绍+简单的sql语句,直接上level9
这里可以看到,是给出了选择框的一道题,OWASP真不错,生怕你不会哈哈~
这里其实就是最简单的sql注入的情况,65行处没有对输入的语句(accountName参数)进行过滤,简单正则匹配修复一下即可~
这里本来想用常用的预编译的方法,但是忽然意识到还要去找他的字段,多一事不如少一事,就把预编译方法放到下一个修复方式中吧哈哈(这里感谢大学时期最要好盆友之一柴xx,java这边很多问题都咨询了他,技术大拿是也~)
2.level10
这里可以看到也是类似于level9,只是选择框换成了输入框,本质没变,下面换一种预编译的修复方式~
可以看到预编译处理后,也成功的修复了此注入~
3.level11
根据题目说的意思,就是在输入框里面进行sql注入,然后想办法看到别人的薪资……两个框都可以注入,甚至第二个TAN框都不用填……
找到POST文件提交的位置,直接正则砌墙,重启修复完成~
3.level12
题目说了完整性,那就是要进行数据更改的操作了,通读确实如此~这里就不猜解数据库和表名了,直接找SSM的数据库class,可以看到暴漏的列名为"last_name"以及"auth_tan",那就注入就好了~'; update employees set salary=1000000 where last_name='Smith'; --
修复和之前一样,正则砌墙,重启验证~
4.level13
大白话——删库跑路~
SqlInjection_introduction 完成,继续下一关,keep on fighting~
二、SqlInjection_advanced
1.level3
这里给出了两张表,按照题目所描述的方法,union简单联合一下,在查询第一张表的7个列中把第二张表的dave的password带出来~
老样子,问题出现在没有过滤输入参数,正则砌墙即可~
2.level5
解这个题目着实花费了一些功夫,这里主要是做一下代审,不涉及详细的解题过程,想要看解题过程可以点这里
为什么着实花费了一番功夫,这里可以看一下30行,他的表名是又长又随机的……真的是foqi~
这里可以看到预编译确实是把username_reg参数值过滤掉了~也就是说明问题不是出现在字段上,而是出现在逻辑上(回答true or flase)
所以此处的修复方式简单来说就是回显不要有区别,或者干脆就没有回显就行了,这里简单一点就放一样的回显~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义