参考地址:https://www.freebuf.com/articles/web/221947.html
一、webgoat是什么?
WebGoat是OWASP维护的,用于进行WEB漏洞测试和学习的JAVA应用程序
owasp是开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。
二、我们能用webgoat做什么?
安全测试项测试,包括xss,sql注入,等
三、安装
1.访问链接https://github.com/WebGoat/WebGoat/releases
选择图上的server和wolfjar包下载
2.将文档存储到一个文件夹内,在文件夹路径中cmd打开命令页面
输入java -jar 包名
如果需要修改server的默认监听端口8080
java -jar webgoat-server-8.0.0.M14.jar --server.port=8000 --server.address=0.0.0.0
启动后访问路径http://127.0.0.1:8080/WebGoat/login
3.注册一个账号,然后登录
四、进入正题
1.introduction(介绍)
第一部分是测试的分类,第二部分是每个分类的具体介绍和课程,第三部分就是具体的内容
introduction下面分为两个部分
第一个webgoat介绍了webgoat的是什么,可以翻译看看
第二个webwolf是让启动webwolf后,使用webgoat的账号登录,里面包括了一些邮件文件等功能,联合webgoat使用,可以作为攻击接受点
第一部分的webgoat是介绍
第二部分是webwolf的题
红色的表示没有通过的。绿色的表示通关了。灰色是介绍和一些教程
第三关要求填写你当前账号的邮箱,发送后在webwolf中去找到邮件里面的字符串
点击send e_mail后检查邮箱,这里我获取了两次,有两封邮件
找到code
将code输入下方的输入框,即可通关
第四关是让去webwolf中找到uniq code 提示了在/landing分类下
在webwolf中找到该uniq输入即可通关
第二类.http协议的介绍
第二关:将输入的值返回到页面上就算通关
第三关:这一关会用到上一关的请求数,在上一关发送请求之前,f12按出控制台,查看network 。将post输入,问题是下一个问题,什么是magic number
将post输入后,点击提交按钮,查看控制台的请求发现,在请求中存在一个magic number的数字,再次填入该数字,再次提交,提交成功
第六关的代理不知道为什么我的burpsuite没办法抓取本地的,修改了占用的8080端口也不行,算了直接进入下面吧
第三类 sql injunction
sql injunction(advance)这个,这个!最难的放到前面感觉不太合适啊(#`O′)。算了先讲吧
第三关:获取dave的密码
首先,我们可以通过第一个查询框,查询出一些信息,比如说全部的人员信息,哎你可能要问了,我填入的名字都不对啊,我都不知道数据库有哪些成员,怎么查询嘛
我们可以猜测,这一句sql的查询大概是:select * from userdata where username='xx'
那么我们要想,我们目前的输入框就是xx这个,如何让xx发挥最大的作用呢,那就是利用sql查询语句的特点,我们可以构造如下的一sql语句:
select * from userdata where username='a' or '1'='1
那么我们需要在查询的框内填入a' or '1'='1 ,,'1是为了和后面的'拼接
a'让最开始的查询语句先闭合,然后再拼接一个查询语句 or '1' ='1,让其成为一个比之前的查询语句更多的查询语句
执行一下:
执行出来了!但是我们仔细看没用dave的信息,dave的信息从哪儿来呢,看上面的表,上面提供了一个表
表中提供了三个字段,其中包括了password,那么我们想,既然上面随便改改sql的查询都能顺利查出来,那么,再魔改一下也是可以理解的吧,于是开始使用联合查询union,查询出两个表吧!
Smith' union select 1,user_name,password, cookie,'5','6',7 from user_system_data --'
照例,先闭合,然后union上面的表,这里注意,由于本来这张表的字段有七个,为了能联合查询出来,上面的表只有三个字段,由于这张表的第一个字段是数字,用1填补就好了,从第五个字段开始,是字符串,需要引用起来,然后最后一个是0,好像也是数字,用7填补,然后--表示之后的都不执行,最后一个单引号闭合查询,也可以不用,毕竟已经用了--
试试吧!
yes!那么我们可以查看字段,dave的密码是dave,填到下面试试
完成!
第五关,有点意思,发现登陆没有什么注入的,用语句tom' --去尝试没有用,从注册可以得到一些注入信息
在注册界面,输入已经有的名字,点击注册报的是已经存在,输入没有的就是提示登录。那么我们可以将代码写成这样
tom ' and length(password)<19 --
该语句可以判断密码的长度,如果密码的长度为19则会提示已经存在,否则则会提示创建成功.依次尝试
尝试tom ' and length(password)=23 -- 啊啊成功了
接下来再判断每一位的字母是什么
tom ' and substring(password,1,1)='t' -- t被试出来了,第一个字母是t
这里放一篇博主的文章,我因为代码能力有限懂个原理就行
https://bbs.ichunqiu.com/thread-53099-1-1.html
SQL INJUNCTION终于轻松一点的来了
第七关:字符串的注入
提示为字符串,那么需要用引号引起来,输入1' or '1' ='1
第八关:数字的注入
输入1 or 1=1 就ok
SQL INJUNCTION(MITIGATIO)
第八关:orderby查询
贴上大神地址,太多了,需要时间去验证(我的burpsuite无法拦截本地请求)
XXE
第三关需要将拦截到的请求修改成xml提交
第四关需要将拦截到的请求类型修改然后提交
第七关有空再完善吧,照例贴上地址,实在是拦截不到请求
https://www.freebuf.com/articles/web/221947.html