慢慢来,学习以及练习一些"技巧"
***… ***
Warmap
没有任何过滤,直接进行闭合,; payload,还是截图方便
Adobe
escape函数将输入的引号"
转换为\\*
,对引号进行了转义。如果输入为\"
,就会转换为\\\"
,这个时候,本来要转义的引号变成转义反斜杠了,从而绕过这个简单的转义触发…
JSON
这个级别通过JSON.stringify进行对象序列化,说白了就是把对象的类型转换为字符串类型。
简单来说,就是过滤了\
,"
等字符,分别转化为\\
,\"
等,但没有过滤<>/
字符。闭合不了log函数了,但可以闭合script标签
Markdown
这个级别有点意思,需要脑筋”急转弯“一下。
1、将输入进行replace过滤掉<
和"
,转换为实体编码了
2、第二波处理,如果字符串包含有http://
开头的字符串,则变为<a href="http://">http://</a>
3、第三波,如果字符串包含[[img_src|img_alt]]
格式的字符串,则变为<img alt="img_alt" src="img_src.gif">
4、返回处理后的字符串
在这个级别中由于尖括号和引号都被过滤了,所以要利用第二三点寻求突破。本身没有办法闭合引号或标签,但是经过规则二三之后会带有引号。
输入:[[a|http://onload='alert(1)']]
经过第一次转换后:[[a|<a href="http://onload='alert(1)']]">http://onload='alert(1)']]</a>
再经过第二次转换后:<img alt="<a href="http://onload='alert(1)'" src="a.gif">http://onload='alert(1)']]</a>
以上相当于:<img alt="<a href=" http:="" onload="alert(1)" "="" src="a.gif">
只在chrome浏览器上成功了,我认为这是浏览器自作聪明的结果
DOM
Dom型XSS, 分析这几行简单的代码,可知,输入的字符串以#
作为分割,之后通过"构造语句"达到目的,
如果输入Element#alert
最后返回:document.createElement(“alert”)
常见的document的create开头的方法:
createElement
createTextNode
createComment
createAttribute
createEvent
这里可以使用createComment
,构造payload:
Comment#<iframe onload=alert(1)
Callback
根据注释提示可知依旧要求输入的字符串包含#
,结合最后的输出可知关键点在于:
<script>'(undefind strings)</script>
构造undefind strings并符合利用过滤规则,构造payload:
'#';alert(1)//
Win!
Skandia
只有一个toUpperCase()
方法将字符串小写字符转换为大写。alert
变成ALERT
肯定是不行了。
在属性值处使用实体编码的话,是可以自动解码的,其他地方则不行。所以,构造payload:
</script><iframe onload=alert(1)>
Template
***…让子弹飞一会 ***
未完待续