pikachu靶场-XSS跨站脚本-DOM型xss-x – 作者:知非知非知非

1626243209_60ee8089e18db48ee48e0.png!small

请说你的伤心往事!

这里我们输入一个abc,点请说出你的伤心往事!!!

输出是这样!!!

1626243217_60ee8091365dcbc5ac49c.png!small

接着我们直接查看源代码??

分析数据的来龙去脉???

核心代码如下!!!!

JS代码:

function domxss(){

var str = window.location.search;

var txss = decodeURIComponent(str.split(“text=”)[1]);

var xss = txss.replace(/\+/g,’ ‘);

//                      alert(xss);

document.getElementById(“dom”).innerHTML = “<a href='”+xss+”‘>就让往事都随风,都随风吧</a>”;

}

//试试:’><img src=”#” onmouseover=”alert(‘xss’)”>

//试试:’ onclick=”alert(‘xss’)”>,闭合掉就行

HTML代码:

1626243234_60ee80a2dc651218c96b3.png!small

接下来,我们分析下,我们输入abc,并提交abc,系统的处理流程!!!

1、提交abc后,系统会用get的方式传递abc这个参数。

此时,url值为http://localhost/pikachu/vul/xss/xss_dom_x.php?text=abc

TIPS:当时本作者还怀疑,这也没有个action,这输入的数据是怎么传递呢?

2、后来,我看到了JS代码,我们一条一条分析JS代码

var str = window.location.search;

window.location.search;   作用:用该属性获取页面 URL 地址:

即获取http://localhost/pikachu/vul/xss/xss_dom_x.php?text=abc

var txss = decodeURIComponent(str.split(“text=”)[1]);

decodeURIComponent(URIstring) 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。

返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。

split() 方法用于把一个字符串分割成字符串数组。

语法:

stringObject.split(separator,howmany)

separator:必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。

howmany:可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

JS代码: var txss = decodeURIComponent(str.split(“text=”)[1]);

所以分隔后:会出现两个字符串

字符串0:http://localhost/pikachu/vul/xss/xss_dom_x.php?

字符串1:abc

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

语法:stringObject.replace(regexp/substr,replacement)

参数:

regexp/substr

必需。规定子字符串或要替换的模式的 RegExp 对象。

请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。

replacement

必需。一个字符串值。规定了替换文本或生成替换文本的函数。

返回值:

一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。

JS代码:var xss = txss.replace(/\+/g,’ ‘);

首先,我们分析一下,/\+/g,被替换字段内容

最前面的“/”与最后面的“/”是分隔符,表示正则表达式的开始与结束。

最后的“g”标志表示正则表达式使用的global(全局)的状态。使用 global 标志表明在被查找的字符串中搜索操作将查找所有符合的项,而不仅仅是第一个。这也被称为全局匹配。【相关的标志还有i(ignoreCase,表示忽略大小写)、m(multiline,表示允许跨行)】

“+”表示前面表达式一次乃至多次。

所以,即\,反斜杠,出现一次乃至多次,替换为空!!!

原理讲完了!!!

可XSS字段在这:

document.getElementById(“dom”).innerHTML = “<a href='”+xss+”‘>就让往事都随风,都随风吧</a>”;

显示结果在这:

<div id = “dom”></div>

利用出题者的提示构造:

//试试:’><img src=”#” onmouseover=”alert(‘xss’)”>

菜鸟问题:那个刷新不出来的图片就是#,鼠标放上,就出XXS

//试试:’ onclick=”alert(‘xss’)”>,闭合掉就行

菜鸟问题:点一个红字的超链接,就出XSS

1 <a href=”><img src=”#” onmouseover=”alert(‘xss’)”>’>就让往事都随风,都随风吧</a>”;

1626243261_60ee80bd8d2cb4bd37532.png!small

2 <a href=” onclick=”alert(‘xss’)”>’>就让往事都随风,都随风吧</a>”;

1626243268_60ee80c420a8e620f2f8c.png!small

大佬总结:DOM型XSS只在前端,与后端毫无关系。DOM-X型危害更大,它能够像反射型一样在URL中体现,将URL发给了受害者就能进行攻击。

来源:freebuf.com 2021-07-14 14:15:17 by: 知非知非知非

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论