版权声明: 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
-
-