代码审计(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)
所以此处的修复方式简单来说就是回显不要有区别,或者干脆就没有回显就行了,这里简单一点就放一样的回显~