XSS在线习题分析 (https://alf.nu/alert1

1. Warmup

function escape(s) {
  return '<script>console.log("'+s+'");</script>';
} 

没有进行过滤,只需要语句闭合就行。闭合语句思路:把console.log() 单独作为一个语句,alert(1)单独作为一个语句,包含在里面。
最好就是这个样子。

<script>console.log();alert(1);</script>

当我们输入");alert(1);//或者");alert(1);(",JavaScript语句就变成了

<script>console.log("");alert(1);("");</script>  

或者

<script>console.log("");alert(1);//");</script>  

第一条和第二条区别是,第一条完全的闭合了:(""),只要语法没错就可以。第二条//将后边的注释掉了,不用闭合,没有后边的</script><script>与之匹配,JavaScript照样可以正常输出。

2.Adobe

function escape(s) {
  s = s.replace(/"/g, '\\"');
  return '<script>console.log("' + s + '");</script>';
}

这个啥意思呢,就是函数replace把双引号换成了反斜杠+双引号:" -> \"。我们按照第一关的构造:<script>console.log("\");alert(1);//");</script>
可以看到在log()输出的那里,第二个双引号被\转移了,没办法有前边的双引号闭合。我们要想办法让\双引号失去作用:
");alert(1);//
在最前边加上一个反斜杠,replace函数自动添加的那个反斜杠和自己添加的那个反斜杠正好组一起了,log可以正常输出,两个双引号成功的闭合了。

<script>console.log("\\");alert(1);//");</script>  

3.JSON

先把第二关的输入进去,发现log("\"),三个反斜杠,去掉输入的第一个反斜杠,发现输出变成了log("")。上网查了查,JSON.stringify()处理双引号和反斜杠 的时候,会在前边加上个反斜杠,这就说明第二关的思路不行了。因为这里输入无论有多少个反斜杠,输出反斜杠都是奇数 个,log()这里永远闭合不了。
我们只好转变思路,一开始是让这几句话在一个<script></script>里面,能不能让它们在两个里面呢?
别的不管,我把别的语句先闭合,里面是什么样子有没有错误我不管。我就让alert(1)这个包含在一个里面并且没有错误就行。
构造</script><script>alert(1)</script>// 其实到这里,我本来没有想到会成功的, 可能是因为优先级的原因,双引号没有匹配但是遇到script标签,也会优先执行后者。

结果:<script>console.log("</script><script>alert(1)</script>//");</script>

以后的等学了js再说吧,看代码云里雾里的。。。

alert(1) to win部分解题的更多相关文章

  1. 【alert(1) to win】不完全攻略

    alert(1) to win 一个练习XSS的平台,地址:https://alf.nu/alert1 Warmup 给出了一段JavaScript代码 function escape(s) { re ...

  2. alert(1) to win Part Ⅰ

    alert(1) to win Adobe: function escape(s) { s = s.replace(/"/g, '\\"'); return '<script ...

  3. 【20171027中】alert(1) to win 第13,14,15,16题

    第13题 题目: function escape(s) { var tag = document.createElement('iframe'); // For this one, you get t ...

  4. 【20171027早】alert(1) to win 第9,10,11,12题

    人在江湖,不服就干! 第9题: function escape(s) { function htmlEscape(s) { return s.replace(/./g, function(x) { r ...

  5. 【20171026早】alert(1) to win - 第六、七、八题

    早上7点起床,又写了一篇小说发在了起点网上,有兴趣的可以看看.点击这里 忙完后,继续练习,刚开始发现自己答题的速度有些慢,可能是因为对于html,javascript知识不是很精通,但是话又说回来,谁 ...

  6. 【20171025晚】alert(1) to win 第五题 正则表达式过滤

    吃过晚饭,再练一题 第五题 function escape(s) { var text = s.replace(/</g, '<').replace(/"/g, '"' ...

  7. 【20171025中】alert(1) to win 脚本渲染自建

    游戏误人生,一下午玩了将近四个小时的三国杀,后悔不已,然后重新拾起xss challenge,突发奇想,自己构建渲染后的html. 从最简单的开始. 自动检测html: <!DOCTYPE ht ...

  8. 【20171025早】alert(1) to win 练习

    本人黑绝楼,自称老黑,男,25岁,曾经在BAT工作过两年,但是一直都是底层人员,整天做重复性工作,甚敢无趣,曾和工作十年之久的同事聊天,发现对方回首过往,生活是寡淡如水,只有机械性工作.旋即老黑毅然决 ...

  9. "alert(1) to win" writeup

    地址:http://escape.alf.nu/ level 0: 注意补全,");alert(1)// level 1: 通过添加反斜线使用来转义的反斜线变为字符,\");ale ...

随机推荐

  1. <logger>和<root>

    <logger>用来设置某一个包或者具体一个类的日志打印级别.以及制定<appender>.<logger>可以包含零个或者多个<appender-ref&g ...

  2. 【转】【C++】【MFC】关于RADIO BUTTON的使用方法

    *原文地址:http://blog.csdn.net/c_cyoxi/article/details/23868979 1. 环境:VS2010 2. 分组 将radio1.radio2.radio3 ...

  3. uvm_port_base——TLM1事务级建模方法(五)

    文件: src/tlm1/uvm_port_base.svh 类: uvm_port_base uvm_port_component_base派生自uvm_component,因此具有其所有特性.提供 ...

  4. 转 zigbee学习笔记---Channel、PANID、发射功率及其它参数

    现对z-stack里几个网络参数的设置以及如何获取总结一下.信道配置:Zigbee在3个频段定义了27个物理信道:868MHz频段中定义了1个20Kb/s信道,915MHz频段中定义了10个40Kb/ ...

  5. codeforces 600A Extract Numbers

    模拟题,意思是一个字符串,单词直接用','或';'来分割,可以为空,把不含前导0的整数和其他单词分别放入A和B.按照一定格式输出. 没有用stl的习惯.维护两个下标i,j,表示开区间(i,j),两段补 ...

  6. 【BZOJ3930】[CQOI2015] 选数(容斥)

    点此看题面 大致题意: 让你求出在区间\([L,H]\)间选择\(n\)个数时,有多少种方案使其\(gcd\)为\(K\). 容斥 原以为是一道可怕的莫比乌斯反演题. 但是,数据范围中有这样一句话:\ ...

  7. 查看数据库表存储引擎MyISAM/InnoDB

    Mysql: show table status *MyISAM不支持PDO的事务

  8. 实现带复选框的TreeView控件

    实现效果: 知识运用: TreeView控件的CheckView属性 //是否在树形视图控件中显示复选框 public bool CheckBoxs{ get;ser } 实现代码: TreeView ...

  9. elasticsearch RestHighLevelClient 使用方法及封装工具

    目录 EsClientRHL 更新日志 开发原因: 使用前你应该具有哪些技能 工具功能范围介绍 工具源码结构介绍 开始使用 未来规划 git地址:https://gitee.com/zxporz/ES ...

  10. 操作文件 -------JavaScrip

    本文摘要:http://www.liaoxuefeng.com/ 在HTML表单中,可以上传文件的唯一控件就是<input type="file">. 注意:当一个表单 ...