当前位置: 首页 > 渗透测试 > 正文

PDF中的Javascript利用

一、PDF中的Javascript利用

pdf是portable document format的缩写,是目前广泛应用于各种场合的文件格式,其是由Adobe公司根据Postscript语言修改后提出的文件标准,并且被ISO组织接受,目前已经发展到2.0版本(ISO32000-2)。目前广泛使用的是1.7版本,该版本pdf功能已经相当丰富,可以显示3D模型,播放多媒体音视频,执行Javascript脚本等功能。

很多针对Adobe阅读器的CVE漏洞都是通过pdf文件中的某些结构触发,触发过程都需要执行事先嵌入在pdf文件中的Javascript脚本。例如CVE-2017-11254 Adobe Acrobat 和Reader中addAnnot Use After Free漏洞,就是通过调用Javascript代码调用addAnnot函数从而触发漏洞;以及CVE-2018-4901 针对pdf中Trailer结构里的ID字段的溢出漏洞,也是需要在文件中通过Javascript调用docID来进行触发。

在pdf文件中的Javascript内容是一个很有用且用途比较广泛的攻击手段。

然而在pdf的Javascript函数引用规范中,对于pdf中可以引用的函数进行了很严格的限制,可以进行的操作比较有限。

通过研究发现,目前针对该攻击面的攻击主要分为以下三种方式:

  • 通过Javascript调用pdf中的模块进行攻击;
  • 通过Javascript调用阅读器中提供的Javascript相关功能,进行攻击;
  • 其他未知形式的攻击。

二、pdf中的Javascript规范

在pdf中插入Javascript的相关介绍主要在Javascript_api_reference.pdf中进行介绍。文档在函数介绍时,会通过四元组对函数进行说明:

其中第一列说明该方法的启用版本以及是否还在使用、第二列说明该方法引起的变化是否会影响文件、第三列表明该方法执行需要特殊设置、第四列表明该方法的可用性。

Pdf中的Javascript按照影响范围分为以下几种:文件夹级脚本、文档级脚本、页面级脚本、域级脚本以及批处理级脚本。所有类型的脚本都是事件驱动的,即当发生相应事件时,才会响应执行。

1、文件夹级脚本

包含可以影响Acrobat的变量声明和函数定义,一般用于增加菜单或者菜单项等针对Acrobat有影响的函数,包括两种:app和user。

此类脚本一般是放到相应文件夹中,一般在Acrobat启动时载入,一般与event实体的应用初始化事件联系。

2、文档级脚本

包含可以影响给定文件的变量声明和函数定义,在文件之外不能应用。可以通过Acrobat创建该级别脚本嵌入pdf文件中。除该类型脚本外,还有文档级动作脚本,其触发动作包括:文件关闭前,文件保存前,文件保存后,文件打印前和文件打印后。

3、页面级脚本

该类型脚本在一页打开或关闭时执行。打开事件为当一个页面完成绘制或任何时候查看一个新页的时候。关闭事件为当用户查看的页面不再是当前页时。

4、域级脚本

域级脚本与Acrobat中的表格域绑定,当用户与相应区域直接或间接交互时,即触发相应的域事件,该级别脚步存放在pdf文件中。

三、潜在可利用内容

在pdf阅读器支持的所有Javascript函数中以下函数在实际应用中,还是可以对用户的使用造成一些困扰:

app.launchURL()、app.media.getURLdata()、app.alert()、app.execDialog()、doc.getURL。

1、app.launchURL()函数功能为访问远程url。

该函数的四元组如下:

该函数包含两个参数,为cURL(用于指定文件的路径)和bNewFrame(用于指定是否用新建页面显示文件)。

当打开包含该函数的pdf文件时,首先会弹出窗口提醒用户建立远程链接,随后使用默认浏览器打开一个远程连接。

2、app.media.getURLdata()函数功能为打开url指定的多媒体文件。

四元组如下:

该函数包含两个参数,cURL(用于指定文件的路径)和cMimeType(可选,用于指定文件MIME类型)。

当打开包含该函数的pdf文件时,首先会弹出窗口提醒用户建立远程链接,随后根据版本和应用不同可能会有安全提示,随后需要用户手动选择信任,最终使用系统默认的播放器播放URL指定的文件。

3、app.alert()函数功能为弹出一个警示对话框。

该函数四元组如下:

该函数包含多个参数分别为:cMsg(用于指定对话框的内容)、nIcon(可选,用于指定对话框图标)、nType(可选,用于指定按钮的类型)、cTitle(可选,用于指定对话框标题)、oDoc(可选,指定与警告相关的Doc结构)、oCheckbox(可选,在对话框中放一个checkbox并且可以指定相关内容、初始值以及结束值)

当打开包含该函数的pdf文件时,将会弹出相应对话框,但是在标题处会有提示:“警告:JavaScript Window”字样如下:

4、app.execDialog()函数的功能为创建一个对话框。

其四元组如下:

该函数可以通过设定相关参数实现高度定制化对话框,如下所示:

但是在对话框中包括“Javascript Window”标题,和红色的警告文本。

5、doc.getURL函数功能为通过GET方法获取URL指向文件。

其四元组如下:

该函数包含两个参数,分别为cURL(目标文件的地址)和bAppend(如果为true,将运行结果附加到当前文件;当文件在浏览器中运行时,推荐使用false)。当该函数运行后,仍然会有安全性提示,如下:

然而该函数还有另外一个功能是可以运行本地文件,同时为了防止执行任意文件,还在注册表项中\LOCAL_MACHINE\SOFTWARE\Policies\Adobe\Acrobat Reader\11.0\FeatureLockDown\cDefaultLaunchAttachmentPerms进行了限制。当用户尝试执行文件不在限制范围内时,还会调用系统函数SaferiIsExecutableFileType判断是否为可执行文件,同时不受两方面限制后将会出现以下两个弹窗进行提示:

并最终打开目标文件:

针对不同版本所使用的程序不同,在reader X中为上图使用默认浏览器打开,而在Acrobat XI pro中则直接使用notepad打开。

参考链接:

https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/Javascript_api_reference.pdf

https://www.pdfscripting.com/ 

本文固定链接: https://www.moondream.cn/?p=695 | 月梦工作室

该日志由 moondream 于2018年05月31日发表在 渗透测试 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: PDF中的Javascript利用 | 月梦工作室
关键字:

1
说点什么

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
foloren torium Recent comment authors

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
最新 最旧 得票最多
提醒
foloren torium
游客

I do agree with all of the ideas you’ve presented in your post. They’re very convincing and will definitely work. Still, the posts are too short for starters. Could you please extend them a bit from next time? Thanks for the post.