DVWA靶场通关教程

gsupl.落浅~ / 2024-07-09 / 原文

一:Brute force(暴力破解)

low

1、分析后端代码
low等级的只是把输入的username和password放到数据库进行匹配查询然后返回结果、并没有做任何的限制、只要dict强大,就可以跑出来
image

2、发现没有任何安全防范措施;尝试BP爆破
(1)随便输入username和password
image
(2)bp抓包发送到intruder爆破模块
image
(3)设置攻击username和password两个攻击载荷,选择攻击类型Cluster bamb
image
Sniper: 单参数爆破,多参数时使用同一个字典按顺序替换各参数,只有一个数据会被替换
Battering ram: 多参数同时爆破,但用的是同一个字典,每个参数数据都是一致的
Pichfork: 多参数同时爆破,但用的是不同的字典,不同字典间数据逐行匹配
Cluster bamb: 多参数做笛卡尔乘积模式爆破
(4)配置攻击字典,开始爆破,爆破完之后根据length的长度筛选
image
查看响应发现爆破成功了
image

medium

1、分析后端代码
判断是否有GET参数login,然后对输入的username和password进行了数据库查询、返回响应结果、唯一不同的就是在登录失败后会执行sleep(2),让程序休眠两秒,但是只要dict够强大,还是能跑出来的,只是花费的时间变长了
image

high

1、分析后端代码
sleep(rand(0,3)),最重要的就是增加了session_token,每次登录需要检查session_token
image
2、攻击过程
(1)假设知道用户名admin、只需爆破密码(便于测试)
输入admin、密码随意、进行抓包、发送到爆破模块intruder
image
(2)选中密码变量和token变量,然后选择Pichfork攻击类型
image
(3)设置密码载荷的参数,添加字典
image
(4)设置token参数
在options中将线程数修改为1(token是每次验证完之后才会生成新的token )
image
下滑找到Grep-Extract(这里是为了从我们的请求中提取到token,分辨特征,以便为每个密码找到对应的token)
image
点击添加,在弹出的界面中点击获取回复
image
image
回到在和页面,设置token参数,载荷攻击类型改为recursive grep(该类型只能单线程爆破)
image
image
设置完毕,开始爆破
![image](https://img2024.cnblogs.com/blog/3300136/202407image

impossible

1、后端代码分析
使用了failed_login字段来记录每个用户的失败登录次数,如果失败登录次数达到设定的阈值,则会锁定用户账户一段时间,如果用户的失败登录次数达到阈值,系统会计算并比较最后一次登录时间与当前时间之间的间隔,如果未到达设定的锁定时间 $timeout,系统会将账户锁定标记为真,并拒绝登录尝试,在登录失败的情况下,代码使用 sleep( rand( 2, 4 ) ) 函数引入了一个随机的短暂延迟对于登录失败的情况,代码明确地告知用户用户名或密码错误,或者账户由于失败登录次数过多而被锁定。

二:command injection(命令注入)

low

1、常用的系统命令(Windows/Linux)
image
2、后端代码分析
检查是否有POST型参数Submit;然后获取用户的输入,利用shell_exec()远程执行函数执行ping命令,并将结果返回给用户
image
3、攻击过程
使用命令连接符号进行命令注入
& :前面一个命令无论是否执行,后面的命令都能执行,两个命令都执行
&&:前面一个命令执行成功后,才能执行后面一个命令,两个命令都执行
|:前面一个命令无论是否执行,后面的命令都能执行且只执行后面一个
||:前面一个命令不能正常执行后,才能执行后面一个命令
示例:
image
乱码问题的解决
找到dvwaPage.inc.php文件,修改文件中的编码格式,将utf-8修改为GBK
image
image
显示正常
image

medium

1、后端代码分析
对命令连接符进行了过滤,但是没有过滤完全,可以使用其他的命令连接符
image
2、攻击过程
image

high

1、后端代码分析
发现还是一样的套路,也是过滤字符但过滤得更多了。但仔细观察发现有一个过滤是’| ‘,注意这个过滤是加了空格的,说明这个过滤其实是没用的,只需要’|’后面直接加入参数,不保留空格,我们依然可以用这个命令连接符进行命令注入
image
2、攻击过程
使用' |dir'命令连接符进行攻击
image

impossible

1、原理分析
使用is_numeric()函数验证输入的ip地址是否位数字,然后使用explode()函数将IP地址分割为4部分,然后在验证4个部分是否为数字,确保了IP地址仅包含数字
2、后端代码分析
后端代码增加了token随机值的验证,首先进行检查token和session token的值是否相同,然后去除ip地址中的反斜杠,并且将IP地址拆分成四个部分,进行进一步的过滤和检查,如果是单纯的数字,则将拆分的IP地址重新拼接,进而继续后续的操作,is_numeric()用于检测用户输入的是否为数字或者数字字符串,不难看出该方法对输入的IP地址做了合法的验证,只有输入符合IPV4格式才能被正常的执行,排除了一切可以注入其他命令的可能,安全型方面得到了大幅度提升。

三:CSRF(跨站请求伪造)

low

medium

high

四:file inclusion(文件包含)

low

medium

high

五:file upload(文件上传)

low

medium

high

六:SQL injection

low

medium

high

七:SQL injection(blind)

low

medium

high

八:weak session ids

low

medium

high

九:XSS(DOM、反射、存储)

low

medium

high