参考资料:
《Web安全深度剖析》
《Web安全攻防:渗透测试实战指南》
《XSS跨站脚本漏洞精讲/原理/绕过/防御》
《PHP网站漏洞挖掘从入门到精通》
目录
1. XSS漏洞原理解析
2. XSS攻击类型
3. 反射型XSS
4. 分析反射型XSS
5. 存储型XSS
6. 分析存储型XSS
7. DOM型XSS
8. 分析DOM型XSS
XSS跨站脚本攻击(Cross Site Scripting,简称为XSS)是一种针对web网站安全的漏洞攻击技术,恶意攻击者利用网站程序对用户输入过滤不足,在网站中插入对用户有影响的恶意脚本代码(通常是js或html等脚本代码),当用户使用浏览器打开浏览该网页时,恶意代码就会在用户浏览器上执行,从而盗取用户cookie,黑掉网页,导航到恶意网站。
看起来XSS漏洞主要是攻击用户,属于客户端攻击,跟网站服务器的安全并没有直接关系,但是别忘了web网站的管理后台的用户也属于被攻击的用户之一,而管理员用户往往拥有很高的管理权限,可以对网站的后台数据库进行操作。这意味着XSS漏洞可以通过管理员作为“跳板”来达到攻击服务器的目的。
XSS攻击主要有三种:
- 反射型XSS
- 存储型XSS
- DOM型XSS
以上几种XSS攻击中,存储型XSS的危害是最大的,要高于反射型和DOM型。
其实XSS漏洞大致可分为两种类型:持久型和非持久型,反射型XSS就属于非持久型XSS,具有一次性攻击。
反射型XSS攻击:恶意攻击者通过电子邮件或站内信等方式欺骗诱导用户点击包含XSS代码的恶意URL链接,当用户访问该链接时服务器就会接收到目标用户请求并处理,然后服务器会把带有XSS代码的数据发送给用户的浏览器,浏览器解析了这段XSS代码后就会触发XSS漏洞。
反射型XSS代码通常是存在于URL中,攻击者需要通过欺骗或加密形式将存在恶意代码的连接发送给用户,只有在用户点击后才能触发反射型XSS攻击。
最常见的反射型XSS就是web网站的搜索框,来看一个简单的反射型XSS漏洞,测试网址为:http://www.test1.com/search.php ,输入php进行搜索:
在搜索框正常里正常输入php搜索,后台会把所有跟php相关的留言展示出来。
在搜索栏中输入: ,页面返回结果如下:
浏览器并没有搜索出对应的内容,而是把输入的这段代码当做JS脚本执行了,JS函数alert执行在浏览器弹窗。
分析反射型XSS漏洞代码,search.php文件内容:
getAll($sql_comment);
require "./view/search.html";
}else{
echo "搜索信息为空!操作失败";
header("Refresh:3;url=index.php");
}
}
search.html页面:
search.php文件中的PHP代码通过GET获取search参数中的值,然后通过echo函数输出到html页面中,而,点击留言提交后,当前页面显示了一个弹窗。
页面中的留言只显示了一部分,通过查看当前页面元素发现浏览器在解析html页面时,只将留言中的this a test一部分作为普通文本数据进行输出了,
当点击“选择”按钮时,就会执行,然后回车,页面弹窗说明是存在DOM型XSS的。