XSS


XSS不仅可以用来弹窗,也可以正在javascript代码里发挥想象进行自己构造

简介:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

XSS常用的攻击手段和目的

1.盗用cookie,获取敏感信息。

2.利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。

3.利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的操作如发微博、加好友、发私信等操作。

4.利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。

5.在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDOS攻击的效果。

反射性XSS

反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。

反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

存储型XSS

持久型跨站脚本(Persistent Cross-Site Scripting)也等同于存储型跨站脚本(Stored Cross-Site Scripting)。

此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

DOM型XSS(较少

传统的 XSS 漏洞一般出现在服务器端代码中,而 DOM-Based XSS 是基于 DOM 文档对象模型的一种漏洞,所以,受客户端浏览器的脚本代码所影响。客户端 JavaScript 可以访问浏览器的 DOM 文本对象模型,因此能够决定用于加载当前页面的 URL。换句话说,客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于服务器端的数据,而从客户端获得 DOM 中的数据(如从 URL 中提取数据)并在本地执行。另一方面,浏览器用户可以操纵 DOM 中的一些对象,例如 URL、location 等。用户在客户端输入的数据如果包含了恶意 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到基于 DOM 的 XSS 攻击。

反射性XSS(GET与POST)

GET型XSS,在无过滤的情况下,可以直接构造XSS语句

 Post xss是不能在URL中进行直接构造的,这个需要我们去特意写一个恶意页面,这样用户在登录的情况下点击页面即可触发攻击,从而获取相关敏感信息(用户名密码)

存储型XSS

写入数据库,没刷新一次会弹出一次

XSS盲打

前端插入的XSS语句不会在前端去响应,而是在管理登录后台的时候进行弹窗

 

XSS之htmlspecialchars

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体

预定义的字符是:

& (和号)成为 &

" (双引号)成为 "

' (单引号)成为 '

< (小于)成为 <

> (大于)成为 >

以上可以看出’(单引号)没有被转义,可以利用

' onclick='alert(111)'

' onmouseover='alert(1)

' onmouseover='javascript:alert(1)'

XSS之herf输出

可以看到 先输入了一个submit参数,如果不等于baidu.com, 就对参数进行htmlspecialchars转义 ,其中ENT_QUOTES是对单双引号都进行转义了。然后将我们的参数输出到a标签的 herf属性中。这时候,我们就可以构造我们的payload: javascript:alert(1)

这种漏洞中我们可以轻易地利用javascript协议来执行任何我们构造的js代码。

XSS之js输出

输入动态的生成到了js中,形成xss

javascript里面是不会对tag和字符实体进行解释的,所以需要进行js转义

构造闭合,把原本的

修复:

这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。

所以在JS的输出点应该使用\对特殊字符进行转义

XSS常见的标签

  1. 无过滤

2.IMG

3.正常截断

">

'>

4.内联框架注入

">