XSS基础

作者: const27 分类: All,XSS 发布时间: 2020-06-03 09:52

同源策略(sop)

同源的判断:主机,协议,端口一致 存在的意义:防止一个tab页从另一个tab页跨域执行脚本

XSS

基础攻击方法:

1.直接创建<script>code</script>并让浏览器执行

2.href,src等属性可能引起的XSS(JavaScript伪协议,data://)

image
image

其实就是利用伪协议控制如onmouseover,location.href,action等的输入流 传参javascript:payload到href等属性,实现如<a href=”javascript:alert(1)”>之类的效果 data:协议常用攻击的结构: data:[mime type];base64,payload 其中[mime type]在这里放个图算了,一般xss都是用text/html格式来触发恶意js代码的
好的,接下来来试验一下data:协议.

这里是放了一个data协议的超链接,base64解码后是<script>alert(1)</script>,点开后就会弹窗
注:这个data:协议在chorme里不能被window.location.href重定向,而且上面这图的这个链接在chrome直接点是点不动的,必须右键打开

3.onload事件

这个事件的作用:当整个页面加载完全后触发onload事件
<body>, <frame>, <frameset>, <iframe>, , <link>, <script>均支持这个事件 构造形如<body onload=alert(1)> 即可
它的内容可以是一个js函数,也可以是一个简单的alert(1)

4.img onerror连续技

利用img的src无效时,会直接使用onerror里的的事件,构造payload。
<img src=”#” error=alert(1)> 其中有个技巧就是,onerror=location=“JavaScript:alert(1)”
这样,加个=location就可以使用伪协议了


利用方法

1.盗取cookie

image
image

自己制作一个a.php

然后这是被攻击页,重定向到a.php并附带参数

就可以收集不同人的cookie并记录起来

另外提一句,可以利用类似方法,使用navigator.userAgent属性来获得useragent内容。

2.改变网页内容

就是存储型xss。

绕过方法

总的来说防御xss的方式只是三种:httponly、过滤字符、转义字符。 httponly是一种属性,用来设置cookie,当其为true时,js无法获取cookie (具体实现方法待补)

1.>标签被过滤或禁用的情况

可用//代替,这个能用的场景不适合<script>..</script>型payload,因为前面的script标签的>写成//的话,脚本不会被执行。使用情景应为<src=”” error=> 或<body onclick=>

2.xss探针

利用该payload在源码里检测过滤,可检测出网站对xss有没有基础防护 ”;!–“<XSS>=&{()}

3.htmlspecialchars函数与csp

htmlspecialchars函数,转义敏感字符:

但是,光靠一个htmlspecailchars函数,无法很有效进行防御。于是csp(内容安全策略)诞生了。
csp是和sop同一级别的安全策略。
csp功能:CSP只允许被认可的JS块、JS文件、CSS等被解析,只允许向指定的域发起请求。 csp大致格式:

header("Content-Security-Policy: default-src 'self'; script-src 'self' https://lorexxar.cn;");
image

这是各个属性:

image

这是各个属性的设置值:

4.利用<svg>标签(作用:编码绕过)

image

编码绕过:
在你的payload前植入<svg>标签并将敏感字符编码(字符实体),就可以绕过过滤模块,然后在执行时,svg标签会把字符实体转换成字符并执行

如这样,原函数过滤会把(给删除,但是你加了<svg>标签就会绕过过滤,并在执行时把字符实体还原成(

5.关于href属性的一个绕过小技巧

href属性里,//后面的内容会被忽略

6.关于注释绕过

html注释有两种形式,可以试试不同形式是否能绕过<!– –!>, js注释是/** /,出了<script>标签就没用了

7.type属性覆盖

input的type属性只遵循最前面一个的type属性,所以在一些情况下可以把type属性的值给覆盖为新的一个值

8.换行绕过

在html解析的时候,即使代码之间有换行也依旧会照常执行。所以在一些情况下可以构造换行来规避掉如正则表达过滤等手段

9.action属性覆盖(利用较苛刻)

image
image

这是在prompt(1)to win平台中看到的一个绕过方法,收藏一下吧
在一个from-input结构中,当你用document.forms[num].action去读取某个form的的action值时,若input标签里出现了name=’action’,读取出的acton属性就会从form上的action值变成 [object HTMLInputElement]. 以此来为action放入JavaScript伪协议创造机会,规避过滤
这是覆盖后的情况

这是覆盖前

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Leave a Reply

Your email address will not be published. Required fields are marked *

标签云