跨站脚本攻击XSS(Cross Site Scripting),恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
XSS分为:存储型 、反射型 、DOM型XSS

以下所有标签的 > 都可以用 // 代替, 例如 <script>alert(1)</script//
<script>标签:<script>标签是最直接的XSS有效载荷,脚本标记可以引用外部的JavaScript代码,也可以将代码插入脚本标记中
svg标签
<img>标签
<body>标签
video标签
style标签
黑盒测试
尽可能找到一切用户可控并且能够输出在页面代码中的地方,比如下面这些:
常见业务场景
白盒测试(代码审计)
关于XSS的代码审计主要就是从接收参数的地方和一些关键词入手。
PHP中常见的接收参数的方式有、、等等,可以搜索所有接收参数的地方。然后对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和html编码等处理。
也可以搜索类似这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。
大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过滤,能否绕过等等。
同理审计DOM型注入可以搜索一些js操作DOM元素的关键词进行审计。
反射型XSS漏洞:
存储型XSS漏洞:
当空格被过滤了时,我们可以用 来代替空格:
如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号:
当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。
利用eval()函数
与PHP的eval()函数相同,JavaScript的eval()函数也可以计算 JavaScript 字符串,并把它作为脚本代码来执行。
利用top
源代码
绕过技巧:可以使用大小写绕过 <scripT>alert('hack')</scripT>
绕过技巧:可以使用嵌套的script标签绕过 <scr<script>ipt>alert('hack')</scr</script>ipt>
虽然无法使用<script>标签注入XSS代码,但是可以通过img、body等标签的事件或者 iframe 等标签的 src 注入恶意的 js 代码。
payload: <img src=https://www.cnblogs.com/pursue-security/p/1 onerror=alert('hack')>
这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。当浏览器装载了这样的URL时,并不会转向某个URL,而是执行这个URL中包含的javascript代码,并把最后一条javascript语句的字符串值作为新文档的内容显示出来。
a 标签Javascript 中可以识别的编码类型有:
- Unicode 编码
- 八进制编码
- 十六进制编码
一般情况下我们使用Unicode编码的比较广泛,而八进制和十六进制只有在DOM环境或eval()等函数中才可以用。
Unicode编码绕过
url编码绕过
Ascii码绕过
hex绕过
八进制

当我们输入参数的请求类型的get类型的,即我们输入的参数是以URL参数的形式。该链接的为:http://127.0.0.1/vulnerabilities/xss_r/?name=<script>alert(/xss/)</script>
我们构造了如下代码,将其保存为html页面,然后放到我们自己的服务器上,做成一个链接。当用户登录了存在漏洞的网站,并且用户点击了我们构造的恶意链接时,该链接页面会偷偷打开iframe框架,iframe会访问其中的链接,然后执行我们的js代码。该js代码会把存在漏洞网站的cookie发送到我们的平台上,但是用户却浑然不知,他会发现打开的是一个404的页面!
我们现在知道一个网站的用户名输入框存在反射型的XSS漏洞
我们抓包查看
我们构造了如下代码,将其保存为html页面,然后放到我们自己的服务器上,做成一个链接。当用户登录了存在漏洞的网站,并且用户点击了我们构造的恶意链接时,该恶意链接的页面加载完后会执行js代码,完成表单的提交,表单的用户名参数是我们的恶意js代码。提交完该表单后,该js代码会把存在漏洞网站的cookie发送到我们的平台上,但是用户却浑然不知,他会发现打开的是一个404的页面。
我们这里写了一个404页面,404页面中隐藏了一个form提交的表单,为了防止提交表单后跳转,我们在表单下加了一个iframe框架,并且iframe框架的name等于form表单的target,并且我们设置iframe框架为不可见。
当用户点击了我们构造的恶意链接,发现打开的是一个404页面。实际上这个页面偷偷的进行了表单的提交。
XSS防御的总体思路是:对用户的输入(和URL参数)进行过滤,对输出进行html编码。也就是对用户提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。
对输出进行html编码,就是通过函数,将用户的输入的数据进行html编码,使其不能作为脚本运行。
我们还可以服务端设置会话Cookie的HTTP Only属性,这样,客户端的JS脚本就不能获取Cookie信息了
设置CSP(CSP传送门)
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7628.html