DVWA
DVWA
一、环境配置
1 下载
DVWA的默认账号和密码:
用户名 | 密码 |
---|---|
admin | password |
gordonb | abc123 |
1337 | charley |
pablo | letmein |
smithy | password |
2 配置数据库
- 复制一个
./config/config.inc.php.dist
,改名为config.inc.php
。- 打开,修改其中的数据库账号密码为对应的账号密码。
二、Brute Force
1 Low
流程:
- 在网站中输入任意数据,使用burp suite进行抓包。
- 将数据包发给Intruder。
- Positions:攻击参数选定username,password,攻击方式选择集束炸弹。
- Payloads:载入字典进行攻击。
- 点击结果中的长度,正确的页面的长度和错误的是不一样的。找到不同的长度的界面,记下用户名和密码后到界面中进行验证。
由源码得也可以直接username =
admin' and 1=1#
进行登录(密码可为空)
2 Medium
对sql注入进行了过滤。直接按照Low的方式爆破即可。
3 High
- 正常抓包,发现包中携带token信息。
- 通过重发器修改账号或密码重复,发现响应包中携带了token,猜测该响应包的token的value是下一次的token值
- 将包发送给Intruder,选定username,password,token。因为每次的token只用一次,所以攻击方式选择音叉。
- Payloads:username和password不变。token的有效载荷类型选择递归搜索。
- Positions:Payload选择3(token),在请求引擎中修改线程数为1(因为token要由上一个请求产生)。在Grep-Extract中点击添加,找到
<input type="hidden" name="token" value="..." />
,选中value中的值,点击OK。- 在Positions中将刚刚的token作为Payload3的初始数据填入。
- 攻击,验证结果。
4 Impossible
通过观察源代码发现,登录3次会锁定15s,且数据库查询使用的是PDO(PHP Data Object)机制防御sql注入。
三、SQL Injecton
报错:
Illegal mix of collations for operation 'UNION'
解决方案:打开phpMyAdmin,修改dvwa库的排序规则为utf8_general_ci,同时要选中更改所有表排序规则,更改所有列的排序规则。
1 Low
# 1.注入点 |
2 Medium
# 1.注入点 |
3 High
# 1.注入点 |
4 Impossible
数据库查询使用的是PDO(PHP Data Object)机制防御sql注入。
四、[ing]SQL Injection (Blind)
1 Low
# 手动 |
2 Medium
3 High
4 Impossible
五、XSS (Reflected)
1 Low
直接用最常见的payload:
?name=<script>alert('111')</script>
2 Medium
输入普通payload发现script和<>没有了。然后输入
img src onerror
发现会有回显。所以直接使用:
?name=<img src="1" onerror=alert('111');>
即可。此题也可以大小写或双写绕过。
<sCript>alert("123")</SCript>
<scr<script>ipt>alert("123")</script>
3 High
此题源码中有一个scirpt的正则匹配,所以大小写和双写无效。但是图片构造一样有效。
所以也可以用:
?name=<img src="1" onerror=alert('111');>
4 Impossible
使用了函数htmlspecialchars()对特定字符进行实体化,且内容不是插在标签内部,无法闭合标签。
六、XSS (Stored)
1 Low
直接输入:
<script>alert('111')</script>
发现有长度限制,直接F12改前端代码。最后发现Name和Message都会触发存储型XSS。
2 Medium
先改前端长度,再输入Low的payload,发现Name和Message的
<script>
都不见了,并且Message还加上了反斜杠。测试大小写和双写,成功。
测试发现Name可以注入,但是Message不行。
3 High
同理反射型,用
<img src="1" onerror=alert('123');>
即可。测试发现Name可以注入,但是Message不行。
4 Impossible
同理反射型。
七、XSS (DOM)
1 Low
直接:
?default=<script>alert('123')</script>
成功。
2 Medium
输入
?default=<script>
,发现他会默认选择English,说明应该是对<script>
有过滤。输入
</option>
,F12查看源码,发现可以闭合标签。所以可以把标签全部闭合,然后使用img标签报错产生漏洞。所以payload:
</option></select><img src='1' onerror=alert('123'); />
3 High
直接输入
</option>
,发现选择了English,说明<>很可能被过滤了。查看源码,发现是白名单,仅限指定的字符。
所以可以用如下payload:
?default=# <script>alert('xss')</script>
绕过服务器检测。(被注释的内容不会发给服务器,但是会在前端被执行)
4 Impossible
代码在前端被编码不执行,服务器不进行处理。
八、CSRF
1 Low
任意输入密码,发现了URL中GET请求的参数。构造payload包:
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
。之后可以再网上将其转化成短连接,然后引诱用户点击。当用户登录了该网站并点击了链接时,密码就会被改变。
2 Medium
>
... |
3 High
>
... |
4 Impossible
>
... |
九、Command Injection
问题:乱码。
解决方案:进入
DVWA\dvwa\includes\dvwaPage.inc.php
,修改所有的charset=utf-8
为charset=gb2312
。
1 Low
没有过滤,直接:
127.0.0.1&dir
2 Medium
源码发现过滤了
&&,;
直接:127.0.0.1&dir
3 High
大部分字符会被过滤,但是
|
没有,因为源码是|
,在|
后面还有个空格,所有payload中的|
后面没有空格即可127.0.0.1|dir
4 Impossible
对IP严格限定了数字,无法绕过。
十、
1 Low
>
... |
2 Medium
>
... |
3 High
>
... |
4 Impossible
>
... |