XSS(跨站脚本)概述
Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。
一般XSS可以分为如下几种常见类型:
- 反射性XSS;
- 存储型XSS;
- DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
反射型xss
get传参
页面输入kobe,有返回,所构造出的链接如下,可见是get形式传参。
https://www.bihuoedu.com/vul/xss/xss_reflected_get.php?message=kobe&submit=submit
将链接中的kobe参数改为xss代码,如下,成功弹窗。
https://www.bihuoedu.com/vul/xss/xss_reflected_get.php?message=<script>alert(document.cookie)</script>&submit=submit
post传参
先登录,具有登录的cookie,再输入kobe,发现链接没有变化,所以不再是get传参而是post传参。
直接在搜索框里加入xss代码,如果有限制,可以更改html参数或者抓包进行修改绕过。
<script>alert(document.cookie)</script>
是可以得到登录人的cookie的。
存储型xss
在留言板上留下xss代码,发表留言,代码将插入数据库中,
代码将长期留在这个页面,除非管理员删除该留言,
只要有人访问这个页面,就会执行代码。
DOM型xss
初步观察,点击 click me! 后会出现 what do you see? 的链接按钮,其指向是当前目录/you_input,审查元素时发现onclick后会执行函数 domxss() ,其作用是读取input的值并将其拼接到新创建的link节点中,源码如下:
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
//试试:'><img src="#" onmouseover="alert('xss')">
//试试:' οnclick="alert('xss')">,闭合掉就行