
前言
这个题目有点绕,主要涉及到了日常的办公文档的攻击手法,最后只有 63 solves,值得学习,难度系数不高。所有文内链接请看文末。
题目描述
We setup this PDF conversion service for public use, hopefully it's safe.
http://challenges.fbctf.com:8084
(This problem does not require any brute force or scanning. We will ban your team if we detect brute force or scanning).
我们公开了一个 PDF 转换服务,希望它别被干掉。无需也不允许扫描、爆破,否则就把你办了。
开搞!
打开一看是文件上传+转换文档功能,条件是:1..fods格式 2.最大 64kb 3.文件名小写

解释一下啥是 fods 文件[1]:
该文件是保存在一个 XML 格式。你可以查看在文本编辑器中文件的XML结构和内容的关闭群组。OpenDocument Flat XML Spreadsheet,一般用 Apache OpenOffice, FODS LibreOffice 打开
虽然翻译很辣鸡,但是看明白了,它就是一个 XML 文件。打开 LibreOffice[2],随便写点啥,保存为 .fods 格式

传上去试试看,就一个表格转 PDF 的转换功能,用 JavaScript 搞的:

这种题目一般两种解法,1. 文件上传 2. 文档攻击。上传的话找不到路径,先 pass 掉。
把 PDF 下下来看有啥信息,用 元数据在线查看[3] 网站看一波元数据:

LibreOffice 6.0 引起了我的注意,到 seebug[4] 看一下这个版本有没有漏洞,第一个就是 RCE,版本 6.0.7 之前都可以整,你完了


在先知社区找到了漏洞分析文章 Libreoffice 远程代码执行漏洞(CVE-2018-16858) 分析[5],发现利用条件是


枯了,继续找,Google 搜 libreOffice rce 6.0,第一个就是 LibreOffice Webservice 远程任意文件泄露(CVE-2018-6871)[6],看了一哈文章,利用方式极其粗暴:

太阔怕了……直接在表格中写 =WEBSERVICE("/etc/passwd"),上传后即可得到文件内容

咦,可是怎么只有一行,一通摸索原来是要拉一下表格的高度,撑开即可看到

接下来读其它文件,发现像 SSH 和 history 等等敏感文件没权限读。一通摸索之后发现在 /home/libreoffice_admin/flag 可以获取 Flag

总结
该题利用的是 LibreOffice 的一个 CVE,我写得这么详细是为了说明思路是怎么走的,方便读者们学习。主要是考察如何快速发现当前的版本,如何可使用搜索引擎快速搜索漏洞,加上一点点小脑洞。
源码和 Dockerfile 见:https://github.com/fbsamples/fbctf-2019-challenges
查看以往 CTF writeup 请点击公众号底部菜单栏 - CTF系列

References
[1] fods 文件: https://www.file-extensions.org/fods-file-extension[2] LibreOffice: https://donate.libreoffice.org/zh-CN/dl/win-x86_64/6.1.6/zh-CN/LibreOffice_6.1.6_Win_x64.msi[3] 元数据在线查看: https://www.get-metadata.com[4] seebug: https://www.seebug.org/search/?keywords=libreoffice&category=&level=all[5] Libreoffice 远程代码执行漏洞(CVE-2018-16858) 分析: https://xz.aliyun.com/t/4236[6] LibreOffice Webservice 远程任意文件泄露(CVE-2018-6871): https://www.exploit-db.com/exploits/44022


