xss安全测试流程

版权声明: https://blog.csdn.net/Breeze_CAT/article/details/84955679

xss安全测试流程

1. xss本质

xss产生的本质只有两点,1. 对用户可控的输入内容没有进行有效的过滤;2. 将(没过滤的)用户可控内容输出回前端页面。所以xss的安全测试可以从这两方面入手。

2. 收集xss可能存在的点

由于xss的利用特征,存储型xss危害最大,可以盗取用户cookie,形成蠕虫等;反射型和DOM型主要用于钓鱼。所以在关注上述两点时应遵循以下规律:

  • 用户可控的输入在协议层面上分为GET请求和POST请求,通过对用户可见的页面浏览,进而对参数进行归类
    • 将会存入数据库中的参数单独分类。
    • 在其他不需要存入数据库中的参数只查看GET请求的参数

3. 对搜集到的点做返回测试

自定义一个特殊字符串,如projecttest1这类,不会和前端中的变量名或值相同的特殊字符串,在这里称其为“标记”。对上述两类变量以标记字符串赋值后提交。在返回页面中查看源码,ctrl+f搜索源码中出现标记的地方。出现哪个变量的标记值,即认为此变量的值回显在前端。对所有值回显的变量进行下一步测试。

4.xss测试

  • xss测试payload:

    <script>alert(1)</script>
    <img src=x onerror=alert(1)>
    
  • 若标记参数的值存在于html标签的属性中的,先闭合属性和标签再尝试xss payload,或指在属性中引用js

    <input type="text" name="YJDZ" value="protest1" title="通知书邮寄地址">
    //在这个例子中,标记protest1在value属性中,在进行测试时需先闭合当前标签
    "><script>alert(1)</script>
    888" onload=alert(1)
    
  • 对没有输出在属性中的,直接尝试xss测试代码在返回界面中变成了alert(1),那么存在过滤,进行过滤测试

5. 过滤测试

  • 首先针对测试过程中用到的敏感单个字符进行测试

    <>"';()\/#%等
    
    • 若有某些标签没有被输出,则说明被过滤,尝试绕过或替代,若无法绕过,则说明不存在xss

    • 若都正常输出,则不存在某个字符被过滤,继续进行标签测试

      <script></script>,<img src=x>
      • 查看源码,若找不到对应位置应出现的标签,说明被过滤,尝试使用其他标签绕过,若无法绕过,说明不存在xss

      • 查看源码,若能找到标签并在前端没有输出成字符串,说明标签成功被浏览器解析,可进行代码测试

        <script>alert(1)</script>
        
        • 若在源码中可以看到标签,但没有看到代码,则说明针对函数进行了过滤,尝试使用其他函数绕过,若无法绕过,说明不存在xss

猜你喜欢

转载自blog.csdn.net/Breeze_CAT/article/details/84955679