目录
1.第一题
2.第二题
3.第三题
4.第四题
5.第五题
6.第六题
7.第七题
8.第八题
1.第一题
在源码script标签里边,innerhtml是用于访问或修改 HTML 元素内的 HTML 内容的,这里是访问spaghet这个元素的,并通过括号里面的东西搜索当前页面有没有somebody这个参数,有的话使用get传参的方式给somebody传一个值,然后+Toucha Ma Spaghet!,如果没有传值,默认传Somebody+Toucha Ma Spaghet!,然后赋值给spaghet,放在h2标签中,显示出来。
因为他利用innerHTML直接更新somebody参数,所以我们可以利用
?somebody=<svg%20οnlοad=alert(1337)>在svg加载完成以后执行我们的xss代码
2.第二题
在这里面我们get传入jeff的值给jeff,然后ma是空,eval执行ma=ma name 传的值,然后settimeout延时1秒把ma赋值给manme.
因为这次使用的是innertext,他会把我们的标签整个识别成一个字符串输出就不能用一开始的
我们可以把eval进行闭合
?jeff=aaa";alert(1337);"
带入就会是这样,前后引号都闭合了,eval就执行alert
`ma = "Ma name aaa";alert(1337);"" `
3.第三题
replace是用来移除
wey
中的所有 <
和 >
字符。
/[<>]/g
是一个正则表达式,匹配<
或>
字符。g
是一个全局标志,表示将会在整个字符串中查找所有匹配的字符,而不仅仅是找到第一个匹配后就停止。
这里因为过滤了<>,我们不能用先前的方式了,所以我们使用onclick进行聚焦,只要用户点击输入框就会触发
同样的还有onfocus也是需要用户进行点击
为了不让用户交互也可以完成,我们可以用autofocus和onfocus一起,autofocus把焦点放在输入框上,onfocus把焦点事件进行触发,单独使用autofocus不会触发焦点事件,并且autofocus不包含代码。
所以要用?wey=aaa"%20οnfοcus="alert(1)"%20autofocus="
4.第四题
因为这里面有用action进行提交,并且没有过滤,在提交的时候可以触发我们传入的xss代码,同样在<a>标签里面我们也可以把href写入<a href="javascript:alert('Hello!')">,这样用户点击链接就会触发
?ricardo=Javascript:alert(1337)
5.第五题
因为括号等东西被过滤了,我们就要考虑绕过,尝试用编码绕过
把(1337)先用html实体编码再用url进行编码
成功绕过
?markassbrownlee=<svg%20οnlοad="alert%26%23x0028%3B%26%23x0031%3B%26%23x0033%3B%26%23x0033%3B%26%23x0037%3B%26%23x0029%3B">
6.第六题
这里过滤掉了字母数字,我们就只能借助一些别的工具和别的编码
https://jsfuck.com/
这个网站会把我们的输入编码为[] ! +组合
但是+好会被解析为空格,所以还要进行url编码
7.第七题
这里可以直接用
?mafia=confirm(1337)
但是真正的考点不是这个
我们可以通过
Function(/ALERT(1337)/.source.toLowerCase())()
绕过
/ALERT(1337)/
是一个正则表达式,用于匹配字符串 "ALERT(1337)"
。
.source
属性返回正则表达式的源码部分,不包括前后的斜杠,即 "ALERT(1337)"
。
toLowerCase()
方法将字符串中的所有字母转换为小写。
因此,/ALERT(1337)/.source.toLowerCase()
返回 alert(1337)
Function
是一个构造函数,用于动态创建一个新的函数。
Function("alert(1337)")
会创建一个函数
最后,()
用于立即调用刚刚创建的函数。
8.第八题
这里面有DOMPurify框架,很难绕过
但是setTimeout函数内的ok参数没有任何ok定义,所以我们可以使用DOM破坏
由于前端的一些特性,当boomer=<a id=ok href=tel:alert(1337)>时,settimeout(ok,2000)会获取到<a>标签的href内容,并执行,所以我们可以利用这个来进行绕过,但是如果是JavaScript:alert(1)的话,会被DOMPurify框架进行过滤,我们可以在他的文件找到白名单,然后利用白名单执行我们的alert(1337)