DVWA靶场(Low)通关笔记
无意间了解到dvwa这个靶场,也看到网上有很多人写的通关教程,不过我还是打算写一下wp,当做一种积累吧。虽然我很早之前就做过了,但是没有将过程写到博客里,现在补充上。网上很多人是按漏洞分类来写的,这里我还是按难度级别来划分。这篇是难度low的级别的wp。
DVWA简介
DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。
DVWA共有十个模块,分别是Brute Force(暴力(破解))、Command Injection(命令行注入)、CSRF(跨站请求伪造)、File Inclusion(文件包含)、File Upload(文件上传)、Insecure CAPTCHA(不安全的验证码)、SQL Injection(SQL注入)、SQL Injection(Blind)(SQL盲注)、XSS(Reflected)(反射型跨站脚本)、XSS(Stored)(存储型跨站脚本)。
需要注意的是,DVWA 1.9的代码分为四种安全级别:Low,Medium,High,Impossible。我们先从LOW的安全级别开始做。
-
暴力破解
因为我们登录dvwa的用户名是admin,先用admin测试,我们先只爆破密码。我们随便输一些密码观察,提示了不正确,并且在地址栏显示了参数,说明以get方式请求的。
直接bp抓包,题目说是要爆破,我们直接按Ctrl+I发送到Intruder。
加载字典,准备爆破。这种弱口令字典网上很多,直接下载一堆就行了。
设置线程,加快爆破速度。
开始爆破。
通过判断数据包返回的长度,判断爆破是否成功。小技巧就是按那个length字段进行排序,对比明显。
说明我们的密码是password,再次登录尝试。
-
命令注入
让我们ping一个ip地址,随手测试一个8.8.8.8,从返回结果来看应该是直接调用了系统的ping命令。因此很有可能参数是直接拼接进去的,并且没有过滤。
这里我故意将ip地址换成我的名称,这样ping就会出错,但是我后面用了&来拼接,这样后面的命令不管前面命令是否正确都会执行,这样就执行了pwd和whoami命令并回显。
-
CSRF (全称Cross-Site Request Forgery跨站请求伪造)
题目让我们改密码,我们输入两次密码后直接抓包。
复制bp生成的CSRF的HTML代码。
我们可以在本地保存一个html文件,粘贴刚才的csrf代码。
点击后发生了跳转,同时密码也被修改了。
产生CSRF漏洞的原因:
由于程序员的不严谨导致Web应用程序存在漏洞
Web浏览器对Cookie和HTTP身份验证等会话信息的处理存在缺陷
漏洞利用的前提:
用户已经完成身份认证
新请求的提交不需要重新身份认证或确认机制
攻击者必须了解Web APP请求的参数构造
用户会被吸引去点击链接
-
文件包含
题目给了3个文件,随便点进去一个,观察地址栏发现page=文件名,所以我们思考可以将文件替换为一下其他重要的系统文件,例如/etc/passwd
-
文件上传
随便上传了一张图片,发现回显了上传路径,猜测对文件后缀名也没有过滤。直接上传一句话木马。
访问我们的webshell
很多小伙伴有个误区,因为一句话木马没有回显,访问该页面时都是空白,实际是上传成功了的,否则404。接下来直接上菜刀连shell。
-
不安全的验证码
Insecure CAPTCHA,意思是不安全的验证码,CAPTCHA是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。但个人觉得,这一模块的内容叫做不安全的验证流程更妥当些,因为这块主要是验证流程出现了逻辑漏洞,并不是谷歌的验证码的问题。
因为还需要申请Google验证码的api,过于麻烦就不弄了,只要明白漏洞原理即可,所以直接看源码。
提交时将step改为2即可。
-
SQL注入
手工注入的思路
1.判断是否存在注入,注入是字符型还是数字型
2.猜解SQL查询语句中的字段数
3.确定显示的字段顺序
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
7.下载数据
拿出我们的hackbar,既然是注入,直接先上单引号,引发报错,有回显。
继续测试判断类型
此时没有返回,可以判断是字符型。
接着用order by查询有多少字段,当3的时候出现报错,说明只有2个字段,然后确定位置。
替换为我们要查询的内容,比如当前数据库用户,以及路径。
接下来获取当前数据库的表名,这里用到group_concat()函数。
看到当前数据库为dvwa,有两张表guestbook与users。爆列名
说明users表中有8个字段,分别是user_id,first_name,last_name,user,password,avatar,last_login,failed_login。查询所有用户的密码。
-
SQL盲注
很明显的布尔盲注。其实思路和相似的。这里我们就用sqlmap来注入。先用bp抓包,复制内容到文本,利用SQLmap的-r参数读取数据包。这里我们将右边的数据包保存为blind.txt。加上threads参数也是为提升注入的速度。
payload: ./sqlmap.py -r blind.txt –batch
注入成功,接下来获取所有的数据库名。
payload:./sqlmap.py -r blind.txt -dbs -threads 10
列出dvwa数据库下的表名。
payload:./sqlmap.py -r blind.txt -tables -D dvwa -threads 10
和我们手工注出的表名一致,接着爆列。
payload:./sqlmap.py -r blind.txt -tables -D dvwa -T users –columns -threads 10
爆字段,拿到user的password。
payload:./sqlmap.py -r blind.txt -tables -D dvwa -T users -C “first_name,password” –dump -threads 10
可利用sqlamp注入的效率真的提高了不少。
-
XSS (反射型)
猜测是没有过滤直接打印了我们的参数,所以用就最简单的xss语句script标签测试。
payload:<script>alert(“zgao”);</script>
弹窗成功。
-
XSS (存储型)
存储型xss类似于留言板这类的功能。还是和刚才一样的payload。
总结:
因为low级别的难度很简单,主要是掌握工具的使用,就没必要从代码的层面去分析,多练习即可。
赞赏微信赞赏支付宝赞赏
发表评论