Paypal的一个Dom型XSS漏洞分析

前言

DOM xss也称为第三种类型的xss或者类型0。现在DOM型的xss越来越多了,除了因为各种JS库比如YUI,Jquery,Jquery mobile等的使用,还有很多编程语言,比如php更多的支持了HTML5的特性。

W3school的缺陷代码样例

很多学习的资料的样例代码都不够安全,比如下面是来自于w3school的Jquery教程中的一段代码。

这段代码使用html()方法输出html,但是html()并不是一个安全的输出html的方式。可以参考DOM Based XSS Wiki。如果用户可控的输入经过html()输出之前没有合适的过滤,就会导致DOM xss。Jquery的html()相当于javascript的innerHTML。

Paypal的DOM xss

子域名financing.paypal.com上有一个功能引起了我的兴趣,它允许用户创建一个不同大小的广告。广告的大小是在客户端,使用jquery控制的。

比如

https://financing.paypal.com/ppfinportal/adGenerator/webCopy?460 * 80

上面是展示”460*80”大小的广告。修改460*80成别的字符串,也会输出在网页里。所以现尝试修改成一个xss payload

<svg/onload=prompt(1)>
https://financing.paypal.com/ppfinportal/adGenerator/webCopy?<svg/onload=prompt(1)>

很不幸,输出的结果经过了URL编码。当然这有两个可能,一个是javascript对我们的输入进行了编码,也可能是通用的浏览器行为,Google Chrome 和Firefox会对问号之后的所有数据进行URL编码。当使用IE测试的时候,成功的执行了我们的脚本。

我们也可以使用一些技巧在Chrome上弹窗。Chrome对#号之后的内容不会进行URL编码。所以可以通过以下payload在chrome上执行代码。

https://financing.paypal.com/ppfinportal/adGenerator/webCopy?#<svg/onload=prompt(1)>

代码分析

通过一些调试,我们找到了引起漏洞的代码。

517行document.url通过split函数取了?号的部分,存到了变量url里。然后通过html()进行了输出。

结论

随着各种动态js库的使用,DOM xss也会越来越普遍。本文希望告诉读者,除了在服务端对用户的输入进行过滤,在客户端同样要对用户的输入进行恰当的过滤。

[via rafayhackingarticles.net 翻译整理 by litdg@freebuf]

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2014-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DeveWork

WordPress删除头部wp_head()多余代码

如果你有查看过你的WordPress博客的“查看源代码”的话,你会发现头部的html代码非常多,而且是密密麻麻,有些像meta name="generator"...

92070
来自专栏张善友的专栏

Web打印组件jatoolsPrinter

应用web化,不论对开发商,还是对用户来说,实在是一种很经济的选择,因为基于web的应用,客户端的规则很简单,容易学习,容易维护,容易发布。但对程序员来说,因为...

84690
来自专栏python学习指南

Python爬虫(九)_非结构化数据与结构化数据

爬虫的一个重要步骤就是页面解析与数据提取。更多内容请参考:Python学习指南 页面解析与数据提取 实际上爬虫一共就四个主要步骤: 定(要知道你准备在哪个...

26660
来自专栏张善友的专栏

Expression Web设计工具

从MS company store买了个Expression web软件,在Vista下安装了一个,今后可以用这个工具和Vistual studio 2005协...

201100
来自专栏大史住在大前端

【Recorder.js+百度语音识别】全栈方案技术细节

技术栈:React+recorder-tool.js +recorder.js + Express + Baidu语音识别API

54930
来自专栏云计算教程系列

如何在Python 3中安装pygame并创建用于开发游戏的模板

Pygame库是专门为了帮助您做出的游戏和其他多媒体应用Python编程语言的一个开放源代码模块。pygame 构建于高度可移植的SDL(Simple Dire...

81120
来自专栏walterlv - 吕毅的博客

为带有多种语言的 Jekyll 博客添加多语言选择

发布于 2018-03-06 06:47 更新于 2018-09...

19310
来自专栏大数据

python3.6抓取100知乎用户头像详解(四)

因公众号编辑器对代码不友好 在手机上阅读体验不佳 建议前往文末我的知乎文章链接 目标:抓取知乎最高点赞者的关注者的头像,并下载于本地文件夹。 我们采用:requ...

32470
来自专栏技术博文

php性能监测模块XHProf

一,什么是XHProf XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可...

41560
来自专栏C语言及其他语言

CodeBlocks的入门使用教程

之前自推出VC6作为教学、训练的编译器以后,VC6的种种问题及与训练场判题系统标准的不符,导致不少新同学被坑不少,今天起我们将加大对其他编译器学习的支持,对于训...

73950

扫码关注云+社区

领取腾讯云代金券