20165207 Exp9 Web安全基础

20165207 Exp9 Web安全基础

一、实验过程

1、环境配置

本次实验要安装由OWASP开发出来的web实验平台Webgoat,实验指导里提供的webgoat版本是7.0.1版本的,根据官方解释jdk版本大于等于1.6即可正常运行那个jar包,然而并非如此。我在输入了正常的命令之后使用默认用户guest登录,登录后重定向的界面的左侧并没有预期的课程列表。经过我的队友张家佳同学的提示,我才知道我们kali里面的openjdk11运行Webgoat7.0.1版本的jar包就是会出现这样的结果。如果还是想使用这个版本的webgoat包就需要将原有的jdk卸载然后装上jdk1.7或者jdk1.8或者干脆换一个jdk版本是1.8版本的kali虚拟机。
可是……我并没有这么做,因为我的学习盘快满了并且换jdk有可能把kali搞坏,好吧……其实我就是想试一下大家都没用过的新版Webgoat8.0.0.M25,进入到github上webgoat项目的releases下找到8.0.0.M25的下载链接。

下载下来安装包之后,使用共享文件夹拷到虚拟机里,并参考下图输入安装命令

在出现这一行(start)之后终端发生了阻塞,应该是开启成功了

然后在浏览器中输入网址localhost:8080/WebGoat,会出现用户登录界面,然而没有告诉你默认的用户名和密码,需要自己注册。祖册完成之后登进去是这样的:

2、sql注入学习

选择injection flaws下的这个SQL injection(introduction)这一节,先学习一下入门级的SQL注入。如下图所示,这个introduction级别的SQL注入练习总共有13个环节组成,而前八个环节基本都是SQL语句的教学,像这种

像这样真正的SQL注入是从第九节开始的。那么就先从这个第九节开始吧!

2.1、SQL injection(introduction) -> String SQL injection


好的看来我需要在这几个下拉框里面进行一套选择构造出来一个满足出题者心意的SQL注入语句,经过分析选项,我选出了如下的组合

因为or前面要有一个闭合的单引号组合并且smith这个东西不应该是一个变量把孤立在单引号外的Smith写到SQL语句里只会出错,所以第一个我只选了那个单引号,后面两个选项显而易见,唯一的一个问题是末尾还会有一个自动拼接的单引号没有给我们显示出来,这个结果需要测试一下。这样我们就知道了这个后台拼接出来的SQL语句的全部结构了,然后做出上面那个图片里面的选择就变得非常简单(前提是你得错一下才能知道后面还会再拼接上一个单引号,否则最后一个下拉框的选择就会十分困惑)。
嗯,就是这里的单引号

然后就成功了
上面的那个数字9的小红方块也会变成绿色。

2.2、SQL injection(introduction) -> Numeric SQL injection

这是第10题

根据这句提示我们知道了这两个文本框里面应该只有一个文本框是有sql注入点,或者说是容易被SQL注入的地方只在其中一个文本框里面。
那么,我就开始了尝试。先随便输入两个1,看一下会给我回显什么,看来是这样啊,两个字段都是数字类型的。那应该再试一试究竟是哪个数字有注入点。

在第一个文本框里疯狂试探了几下:

mysql的#注释符被过滤掉了,下面抛出的异常说这不是一个数字,是啊#哪是数字,可是……它居然,发现了。看来这过滤的有点严格。
然后使用两个减号注释呢?当然也是不行的。
在这个文本框里or上一个1=1呢?估计也不行,试了一下,果然不行
所以我果断转向了下一个文本框,or了一下1=1,瞬间成功。

2.3、SQL injection(introduction) -> Compromising confidentiality with String SQL injection

学这个之前,我先把前面教SQL的哪几节课刷绿了,复习一下SQL,感觉这个要动真格的了

根据这节课的描述,这节课是想让我学习一下通过字符串SQL注入获取数据库中的敏感信息从而破坏一个数据库CIA三种特性中的Confidential的特性,也就是机密性。然后根据题干里面说的,我是一个叫约翰·史密斯的人,我在公司里有一个认证令牌,其他员工也有。然后,每天都只能从系统里面看我自己的工资让我感觉很不好,我要通过SQL语句把系统干掉从而获得其他同事的薪水信息。并且我已经知道后台做查询的时候动态构造的SQL语句的结构了,就是这样子的:

所以我应该怎么办呢?没什么好说的了,or一个永真式,然后把后面的东西都注释掉就好了。唯一需要试的就是,这个数据库支持的注释符号是哪种,是#还是--还是/*。经过一番尝试,注释原来是--。嗯,就这样

2.4、SQL injection(introduction) -> Compromising Integrity with Query chaining

这一节是要让我用SQL语句(查询链?)破坏掉数据库的完整性。题干里面有对SQL Query Chain的解释

就是用分号隔开,然后来做多个查询嘛,嗯,学到了。
然后,我继续被带入约翰·史密斯同学的情境里,我发现托比和鲍勃挣的钱比我多,但是我不能坐视不管。所以我要把数据库干掉,让我挣的钱变成最多的。并且,我要牢记我的名字是John Smith认证令牌是SL99A。
我先输一个中规中矩的John Smith和sl99A试一下。

啊哈,原来使用last_name匹配的

系统说我我挣得还是不够,hhhhhh,刚才那节课泄露的信息里挣到最多的人是tobi同学,好像是87000
然后就让我来帮助约翰同学挣到90000块吧,来吧

我是怎么做的呢,其实很容易,第一个text框输Smith第二个text框输SL99A'; UPDATE Employees set SALARY = 90000 where USERID = 37648 --
就是把第一句满足了之后做一个单引号闭合,然后用分号分割出来下一句,下一句利用到了之前泄露出来的userID,还要注意的是根据原来的结构,最后还会有一个单引号,我们要用--把这个单引号注释掉。然后就成功了。

2.5、SQL injection(introduction) -> Compromising Availability

这部分的最后一节了,好激动。

下面题干里给我介绍说,破坏掉一个数据库的可用性,办法有很多。比如删掉账户,改掉人家用户的密码,剥夺人家对数据操纵的权限,或者硬核一点直接把库删了
题的描述是这个样子的

原来约翰同学,心思缜密,想要在acces_log也就是访问记录里面删掉自己干坏事的记录,hhhhhhh
哇哦,原来这个access_log表里可以搜到这么多Smith同学(我)干坏事的记录,啧啧啧

我给他来了一个querychain:Smith' ; delete from access_log where ID BETWEEN 11 AND 14 --
然后他告诉我说,还是有史密斯同学干坏事的记录,建议我删了,好吧

那我来一发,优秀的,不能回滚的,truncate试一下;

这是什么意思,我要给一个架构的名字,可是我不知道啊???
那我直接drop table吧,我又给不出来架构名,我不知道啊
输入,Smith' ; drop table access_log --,成功

3、xss学习

4、csrf学习

5、burpsuite学习

二、问题回答

三、实验总结与体会

猜你喜欢

转载自www.cnblogs.com/ltl0501/p/10920067.html