代码审计(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)

  所以此处的修复方式简单来说就是回显不要有区别,或者干脆就没有回显就行了,这里简单一点就放一样的回显~

 

posted @ 2022-08-17 16:40  wavesky  阅读(84)  评论(0编辑  收藏  举报