[渗透测试]:XSS(一)

[渗透测试]:XSS(一)

 
XSS 漏洞
 
XSS漏洞概述
 
*简介
 
XSS 被称为跨站脚本攻击,本来应该缩写为CSS,但是由于和CSS重名,所以更名位XSS。
 
XSS主要是基于JavaScript完成恶意的攻击行为。JS可以非常灵活的操作html、css和浏览器,这使得XSS 攻击的想象空间特别大。
 
XSS通过将精心设计构造的代码(JS)注入网页中,并由浏览器解释运行这段JS代码,以达到恶意攻击的效果。当用户访问被XSS脚本注入的网页,XSS脚本就会被提取出来。用户浏览器就会解析这段浏览器代码,也就是用户被攻击了。
 
用户最简单的动作就是使用浏览器上网,并且浏览器中有JavaScript解释器,可以解析JavaScript,然而浏览器不会判断代码是否恶意。也就是说,XSS的对象是用户和浏览器
 
什么是XSS呢?
 
编写如下测试页面
 
xss_test.php
 
    <?php
     
    $input = $_GET["var"];
     
    echo "<div>".$input."</div>";
     
    ?>
 
在浏览器输入端提交参数
 
    ?var=<script>alert(/xss/)</script>
 

image

会发现alert(/xss/)已经被执行了
 
查看页面源代码,会发现用户输入的script代码,已经被写入到页面中,显然,这不是开发人员想要看到的情况
 

image

XSS漏洞发生在哪里?
 
服务器
 

image

 
微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS 代码,都存在遭受XSS 攻击的风险,只要没有对用户的输入进行严格的过滤,就会被XSS 攻击。
 
*XSS 危害
 
XSS 利用JS 代码实现攻击,有很多种攻击的方法,以下简单列出几种
 
@
盗取各种用户账户
@
盗取用户Cookie资料,冒充用户身份进入网站
@
劫持用户会话,执行任意操作
@
刷流量、执行弹窗广告
@
传播蠕虫病毒
等等
 
*XXS 漏洞的验证
 
我们可以用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做PoC(Proof of Concept).
 
PoC
漏洞验证与检测
EXP
漏洞的完整利用工具
shellcode
利用漏洞时,所执行的代码
payload
攻击载荷(在不同的形式下含义不同)
sqlmap   攻击代码的模板
msf      shellcode 类似,功能是建立与目标的连接
 
验证漏洞存在的Poc 如下:
 
    ------
 
    <script>alert(/XSS/)</script>
 
    <script>confirm('XSS')</script>
 
    <script>prompt('XSS')</script>
 
    ---------
 
我们可以在测试页面中提交这样的代码<script>alert(/XSS/)</script>,当我发现提交的代码被当作字符串输出在HTML页面中,浏览器会根据[<script>]标签识别为JS 语句,并会执行它,并执行弹窗操作,即可以执行其他JS代码,因此我们验证了XSS漏洞的存在性。
 
XSS 的分类
 
XSS 漏洞大概分为三个类型:反射型XSS、存储性XSS、DOM 型XSS
 
*反射型XSS
 
反射型只是简单的将用户输入的数据"反射"给浏览器,其应用场景往往是黑客诱使用户点击一个恶意链接,从而获得用户带cookie信息等,XSS 是非持久性、参数型的跨站脚本。反射型XSS 的JS代码在Web 应用的参数中,如搜索框的反射型XSS。
 
在搜索框中,提交PoC[<script>alert(/XSS/)</script>],点击搜索,即可触发反射型XSS
 
注意到,我们提交的poc 会出现在search.php 页面的keywords 参数中
 
*存储型XSS
 
存储型XSS 是一个持久性跨站脚本。持久性体现在XSS 代码不是在某个参数中,而是写进数据库或文件等可以永久性保存数据的介质中。
 
存储型XSS 通常发生在留言板的地方。我们在留言板位置留言,将恶意代码写进数据库中。
 
此时,所有查看我留言的用户,甚至是管理员,都会在他们的浏览器端执行恶意的javascript代码,黑客把恶意的脚本保存到服务器端,所以这种XSS攻击就叫存储型XSS。
 
*DOM XSS
 
DOM XSS 比较特殊。owasp 关于DOM 型号XSS 的定义是基于DOM 的XSS 是一种XSS 攻击,其中XSS 攻击的payload 由于修改受害者浏览器页面的DOM 树而执行的。其特殊地方在于payload 在浏览器本地修改DOM 树而执行,并不会上传到服务器上,这也就使得DOM XSS 比较难以检测,其实其和反射型XSS类似,但是由于历史原因,将其单独作为一个分类。
 
如下面的例子
 
[#message=<script>alert(/XSS/)</script>]
 
我们以描点的方式提交PoC 并不会发送到浏览器,但是已经触发了XSS。
 
查看提交参数后的HTML 页面(DOM树),会被重新渲染,从而在不通过服务器端的情况下改变DOM 树。
 
posted @ 2021-06-23 12:31  jpSpaceX  阅读(358)  评论(0编辑  收藏  举报