DVWA靶场(Low)通关笔记

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,有两张表guestbookusers。爆列名

说明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级别的难度很简单,主要是掌握工具的使用,就没必要从代码的层面去分析,多练习即可。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。