CVE-2023-38831-winrar漏洞
2023-09-04 / 共计1536 字
CVE-2023-38831 WINRAR漏洞复现
感谢b1tg提供的POC和CVE-2023-38831: WinRAR Bug Or Windows Feature? In-Depth Analysis of Winrar Vulnerability的分析。
经测试新版本winrar 6.23无法进行利用。
Tip:下文中{{
}}表示空格
漏洞复现
环境详情:
winrar: 5.91
操作系统:win10
构造恶意winrar文件:
python cve-2023-38831-exp-gen.py CLASSIFIED_DOCUMENTS.pdf script.bat poc.rar
生成压缩文件如下:
CLASSIFIED_DOCUMENTS.pdf 目录下:
点击”CLASSIFIED_DOCUMENTS.pdf“时,会执行CLASSIFIED_DOCUMENTS.pdf\CLASSIFIED_DOCUMENTS.pdf{{
}}.cmd
漏洞分析
详情可阅读CVE-2023-38831: WinRAR Bug Or Windows Feature? In-Depth Analysis of Winrar Vulnerability和b1tg的文章。
在winrar解压文件时,会将压缩目录中的文件与要解压的文件名进行对比,若匹配,则进行解压。具体伪代码如下
int i = 0;
dec_file_list[i] = choose_file; //要解压文件
i++
for file in files{
if(compare_wstr(choose_file.name,file.name,choose_file.name.length)\=\=1){ //对比函数
dec_file_list[i] =file;
i++;
}
}
for dir in directories{
if(dir.name \=\= choose_file.name){ //文件夹与解压文件同名,则匹配该文件夹下文件
for file in dir.files{
if(compare_wstr(choose.name,file.name,choose.name.length) \=\= 1){
dec_file_list[i] = file;
i++;
}
}
}
}
例如,解压t0ngmystic.zip t0ngmystic.zip目录如下:
t0ngmystic.txt //这是一个文件夹
t0ngmystic.txt .cmd
t0ngmystic.txt //txt文件
winrar要解压t0ngmystic.txt(txt文件)时,winrar匹配文件名的时候匹配到t0ngmystic.txt(文件夹)会继续匹配这下面的t0ngmystic.txt .cmd,由于匹配文件名时,传入的匹配名字的长度为t0ngmystic.txt的长度14,t0ngmystic.txt{{
}}.cmd文件只配置了前面t0ngmystic.txt,所以也给解压出去了。
解压之后为什么最后执行能够执行.cmd文件呢,其实是调用了windows api中的ShellExecuteExW而形成的。
ShellExecuteExW详情如下
SHELLEXECUTEINFOW为一个结构体,具体如下,其实只用关注LPCSTR lpVerb和LPCSTR lpFile就可以了。 lpVerb表示打开文件所执行的动作,可以为空,当为空时会使用默认动作,若默认动作不可用,则会使用open动作。
lpFile为一个以 null 结尾的字符串的地址,指定将执行lpVerb所指定的动作的文件路径。 在ShellExecuteExW在打开文件的时候,当lpVerb为空时,会模式用open打开文件,但仅可用于可执行文件(.cmd、.exe、.bat),document file,目录。就由微软对IpVerb描述的一样:
- open: Opens the file specified by the lpFile parameter. The file can be an executable file, a document file, or a folder.
漏洞总结
对于CVE-2023-38831-winrar漏洞的分析b1tg和CVE-2023-38831: WinRAR Bug Or Windows Feature? In-Depth Analysis of Winrar Vulnerability都有具体的分析,我就不多赘述了。
根据漏洞分析猜想,可执行文件可以隐藏在多层文件夹下,只要文件夹的名称为样本文件开头即可。 例如,将.cmd文件放在\CLASSIFIED_DOCUMENTS.pdf \CLASSIFIED_DOCUMENTS.pdf .eesww\下面
同样可以进行漏洞利用
该漏洞成因可以分为winrar和windows api两个部分, winrar在解压文件时,传入文件名长度,导致文件名的不完全匹配,将携带攻击载荷的文件也解压到临时目录中。 windows api的ShellExecuteExW中的lpVerb为空,默认到open操作,从而执行.cmd文件。
在任何程序中,只要能够落地文件,在文件执行时不管是隐式或显式调用了ShellExecuteExW,都有可能触发该漏洞。
经过检验python中的os.startfile()同样使用了ShellExecuteExW。
文笔垃圾,技术欠缺,欢迎各位大师傅请斧正,非常感谢!
如果文章对您有帮助
部分文章会发布公众号!
感谢您的支持!