请说你的伤心往事!
这里我们输入一个abc,点请说出你的伤心往事!!!
输出是这样!!!
接着我们直接查看源代码??
分析数据的来龙去脉???
核心代码如下!!!!
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代码:
接下来,我们分析下,我们输入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>”;
2 <a href=” onclick=”alert(‘xss’)”>’>就让往事都随风,都随风吧</a>”;
大佬总结:DOM型XSS只在前端,与后端毫无关系。DOM-X型危害更大,它能够像反射型一样在URL中体现,将URL发给了受害者就能进行攻击。
来源:freebuf.com 2021-07-14 14:15:17 by: 知非知非知非
请登录后发表评论
注册