XSS攻击
概念:XSS攻击是指攻击者利用网站程序对用户输入过滤不足的缺陷,输入可以显示在页面上或者对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
实质:跨站脚本攻击本质上是一种将恶意脚本嵌入到当前页面中并执行的攻击方式。通常黑客通过“HTML注入”行为篡改网页,并插入恶意JavaScript(JS)脚本,从而在用户浏览网页时控制浏览器的行为。
产生原因:网站对用户提交的数据过滤不严格,导致用户提交的数据可以修改当前页面或者插入一段脚本。
XSS攻击通常在用户访问目标网站时或者之后进行某项动作时触发并执行
根据攻击代码存在的地点、是否被服务器存储及存在的形式和效果可分三类:
反射型XSS:浏览器—服务器交互
将用户输入的数据通过URL的形式直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据(黑客通常需要通过诱骗或者加密变形等方式,将恶意代码的链接发送给用户,用户触发后才能攻击成功)
存储型XSS:浏览器—服务器—数据库交互(可直接产生大范围危害,具有较强的稳定性)
web应用程序将用户输入的数据信息保存在服务端的数据库或者其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,只要用户访问具有XSS攻击脚本的网页时,就会触发攻击
DOM型XSS:浏览器—服务器交互(由于构造语句难度较大,比较少见)
是由JavaScript的DOM节点编程可以改变HTML代码的特性形成的XSS攻击,需要针对具体的JavaScript DOM代码进行分析,从而利用
漏洞测试
测试思路
1.寻找输入点
注意网页中用户可自行输入数据的地方,可以通过观察页面的交互行为确定输入点,要求提交的数据量在20字符以上
当输入点较隐蔽或者被限制时,可以使用Burpsuite抓包,查看是否含有隐藏参数并定位,从而寻找输入点
2.寻找输出点
开始可以利用正常内容进行测试,提交后寻找内容显示点从而发现输入参数的具体输出位置,也可以避免攻击行为提前暴露。
3.确定测试数据输出位置
4.输入简单的跨站代码测试
(1)弹窗测试是测试XSS攻击比较经典的方法,在输入中插入一段可以产生弹窗效果的JavaScript脚本,如果刷新后页面产生弹窗,说明XSS攻击测试成功
通过JavaScript执行弹窗命令,命令为alert,内容为/xss
<script>alert(/xss)<</script>
(2)当网站后台设置了针对script的标签过滤时,弹窗测试将会被删除,从而不能达到测试效果
比较高级的方法是识别漏洞的防护方式,并绕过(闭合标签测试、大小写混合测试、多重嵌套测试、宽字节绕过测试、多标签测试)