目录
一、环境安装
二、开始闯关
2.1暴力破解
2.1.1 low:
2.1.2 medium:
2.2命令注入
2.2.1 low:
编辑编辑 2.2.2 medium:
2.3跨站请求伪造(CSRF)
2.3.1 low:
2.3.2 medium:
2.4文件包含漏洞
2.4.1 low:
2.4.2 medium:
2.5文件上传漏洞
2.5.1 low:
2.5.2 medium:
2.6不安全的验证码
2.6.1 low:
2.6.sql注入
2.6.1 low:
2.6.2 medium
2.7.sql盲注
2.7.1 low:
编辑
2.7.2medium
2.8.弱会话IDS
2.8.1 low:
2.8.2 medium:
2.9.跨站脚本攻击(XSS(DOM型))
2.9.1 low:
2.9.2 medium:
2.10.跨站脚本攻击(XSS(反射型))
2.10.1 low:
2.10.2 medium:
2.11.跨站脚本攻击(XSS(存储型))
2.11.1 low:
2.11.2 medium:
2.12.内容安全策略(CSP)
2.12.1 low:
2.12.2 medium:
2.13.JS攻击
2.13.1 low:
2.13.2 medium:
2.14.Authorisation Bypass(未授权访问)
2.14.1 low
2.14.2 medium:
2.15.Open HTTP Redirect(HTTP重定向)
2.15.1 low
2.11.2 medium:
一、环境安装
可以Windows也可以linux建议linux,博主linux搭建(网上搜这个搭建很多自己搭)
二、开始闯关
2.1暴力破解
2.1.1 low:
不多说直接暴力破解,很明显第一个4596跟其他的都不太一样
自然暴力破解成功
2.1.2 medium:
第二个难度只是对于我们爆破的一个速度进行了限制,没有一开始那么快而已,跟low一个水平,直接爆破即可
2.1.3
2.2命令注入
2.2.1 low:
这里我们要说一下命令连接符
& :前面一个命令无论是否执行,后面的命令都能执行,两个命令都执行
&&:前面一个命令执行成功后,才能执行后面一个命令,两个命令都执行
|:前面一个命令无论是否执行,后面的命令都能执行且只执行后面一个
||:前面一个命令不能正常执行后,才能执行后面一个命令
我们使用“|”符号作为连接符让计算机做出除ping以外的操作实现命令注入
结果显示注入成功!
命令:
127.0.0.1 | dir
2.2.2 medium:
这关我没看到难度增加有什么区别,正常命令注入一样过
2.3跨站请求伪造(CSRF)
2.3.1 low:
网站本意是让我们更改密码,并且是在站内
当我们更改url上面参数后可以在网站外部进行更改密码并直接跳转在站外修改
总的来说,网站的本意是在网站内更改密码,而通过控制url的传参就能使我能在网站之外执行更改密码的操作,那么当知道一个网站有csrf漏洞后也可以通过构造url的方式让别人点击执行他意想之外的行为
2.3.2 medium:
这关跟low一样正常修改的话并不能更改,因此我查看源码
第一个函数stripos()会查找字符串在另一字符串中出现的位置
第二个函数会链接到当前页面的前一页面的url地址
第三个函数是服务器主机的名称,当我们跟low一样的话就会导致我刚才的修改不成功,这个时候就需要用到我们的BP了
只要保证referer字段是本机名字就可以实现
2.4文件包含漏洞
2.4.1 low:
把php的配置文件ini文件中allow_url_include这个参数打开
通过访问1.php,2.php, 3.php会返回不通的内容,同时会将文件名传参给page参数
可以看到成功解析包含外部文件
2.4.2 medium:
跟low一样的没什么区别
2.5文件上传漏洞
2.5.1 low:
我们准备一个一句话木马,之后去上传
可以看到成功解析
2.5.2 medium:
加了前段上传限制但是不影响,我们直接用BP去进行抓包,之后修改后缀上传
我现在修改php为一张图片
修改后
2.6不安全的验证码
2.6.1 low:
看源码可以看到,开发人员将该密码修改操作分成了两步,第一步通过验证码验证是否机器人且验证两次密码输入是否一样,验证通过后,服务器返回表单,第二步,要求用户确认修改密码,客户端提交post请求,服务器完成更改密码的操作。但是,这其中存在明显的逻辑漏洞,服务器仅仅通过检查Change、step 参数来判断用户是否已经输入了正确的验证码。
启动burp抓包,将step参数改为2,修改密码为123456,点击change
源码分析:
2.6.2 medium
DVWA Security设置为Medium,开发人员在session设置状态变量,跟踪用户在提交数据之前是否成功完成了验证码。因为状态变量在客户端,它也可以被攻击者修改。
代码审计
通过源码知道,medium相比low就是在第二步多了passed_captcha验证。把这个参数改为如下就好passed_captcha=true然后send,修改密码成功,绕过验证码。但是好像是我在ubentu安装版本原因并没有显示出passed_captcha这个参数,代码审计的时候应该是有的,不过知识点就是如上
2.6.sql注入
2.6.1 low:
先测试闭合点很明显有报错必有注入点
判断出注入点之后,我们用burpsuite去进行抓包
抓包之后保存为1.txt去进行联动sqlmap
python sqlmap.py -r 1.txt --dbs -D dvwa -T users --dump
最终自然可以跑出来
2.6.2 medium
我们可以看到这次不让我们进行手动输入查询了而是固定的选择,这样的情况下直接使用BP去进行抓包处理
更改id语句为1' and '1'='1查看是否是单引号闭合,很明显报错了,有报错必有注入点
这次我们用超级sql注入工具或者sqlmap就可以直接跑出来了,但是为了更好的学习,我这里采用手工注入
先判断列,很明显是两列
合并查询,发现回显位置在2
查库
查看表名,发现我们的单引号被转译
尝试一下16进制转译吧
可以回显200,证明可以成功,但是我这里靶场在ubentu中安装sql的有问题,因此没有回显,正常的情况下表中的列名就已经回显成功了
成功出表中的数据
2.7.sql盲注
2.7.1 low:
正常输入ID
输入超级大的ID
很明显满足布尔盲注的条件,那就开始吧bp联动sqlmap
python sqlmap.py -r 2.txt --dbs -D dvwa -T users --dump -p id
可以见得成功
2.7.2medium
2.8.弱会话IDS
cookie
位于用户的计算机上,用来维护用户计算机中的信息,直到用户删除。比如我们在网页上登录某个软件时输入用户名及密码时如果保存为cookie,则每次我们访问的时候就不需要登录网站了。我们可以在浏览器上保存任何文本,而且我们还可以随时随地的去阻止它或者删除。我们同样也可以禁用或者编辑cookie,但是有一点需要注意不要使用cookie来存储一些隐私数据,以防隐私泄露。
session
session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求http地址时,将传递到web服务器上并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据,我们无法访问以及禁用网站。
session与cookie的区别
(1)Cookie以文本文件格式存储在浏览器中,而session存储在服务端它存储了限制数据量。它只允许4kb它没有在cookie中保存多个变量。
(2)cookie的存储限制了数据量,只允许4KB,而session是无限量的
(3)我们可以轻松访问cookie值但是我们无法轻松访问会话值,因此它更安全
(4)设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
总结:如果我们需要经常登录一个站点时,最好用cookie来保存信息,如果对于需要安全性高的站点以及控制数据的能力时需要用会话效果更佳,也可以结合两者,使网站按照我们的想法进行运行。
2.8.1 low:
当我们在firfox的时侯是有一个Cookie的,当我们复制链接重新访问的时候就需要登录,但当我们在谷歌浏览器替换抓包的Cookie后就可以直接绕过登录了
2.8.2 medium:
2.9.跨站脚本攻击(XSS(DOM型))
2.9.1 low:
选择不同的标签,后面这个会变化
那我们直接更改标签元素
2.9.2 medium:
2.10.跨站脚本攻击(XSS(反射型))
2.10.1 low:
单标签直接反射攻击用户
2.10.2 medium:
2.11.跨站脚本攻击(XSS(存储型))
2.11.1 low:
单标签直接过,这种存储型多存在于评论区,可联动kill中的beef去进行盗取用户Cookie
2.11.2 medium:
2.12.内容安全策略(CSP)
2.12.1 low:
Content-Security-Policy:允许站点管理者控制用户代理能够为指定的页面加载哪些资源。
从名字都可以知道这个攻击是直接攻击用户的,当用户输入之后,进行抓包替换csp字段,即可实现
比如我在我本地搭建了一个服务器
2.12.2 medium:
2.13.JS攻击
2.13.1 low:
提交success但是自动跳转是ChangeMe
去看看源码吧
我们会看到这个 token,不是后台生成的,而是前台生成的,而前台生成的 token,是用 md5("ChangeMe"),而后台期待的 md5 是 md5("success")。
那只是前段验证那就好办多了,我们直接去前段改就行了,抓包更改token值,自然成功
2.13.2 medium:
2.14.Authorisation Bypass(未授权访问)
2.14.1 low
登录他给的账号
没有这个关卡页面了
直接访问,没有选项也访问到了,未授权访问,限制不严格
2.14.2 medium:
2.15.Open HTTP Redirect(HTTP重定向)
2.15.1 low
打开题目出现了两个按钮
选择quote 1,发现了url中使用id传递参数,可以构造:
192.168.9.129:8081/DVWA/vulnerabilities/open_redirect/source/low.php?redirect=http://127.0.0.1/1.html
直接跳转