洞 OVO
首先根据题目信息直接搜索 给定版本的 WinRAR,一搜就有。
确定漏洞为 WinRAR version 6.22 - Remote Code Execution via ZIP archive (CVE-2023-38831).
找点参考文章学一学:
通过文章阅读了解主要流程:获取点击的文件 → 释放到临时目录 → 执行。
那么题目要求找的函数段大概率就是释放到临时目录这一段。
网上的文章一般来说都是给的这一段:
c
// 0x140089948
char __fastcall compare(WCHAR *click_name, WCHAR *deFileName, int a3)
...
if ( (_WORD)a3 )
{
v7 = -1i64;
tName_len = -1i64;
do
++tName_len;
while ( click_name[tName_len] );
if ( (unsigned int)(unsigned __int16)a3 - 2 > 2 )
{
if ( a3 >= 0 )
v9 = sub_1400AF168(click_name, deFileName);
else
v9 = wcsncmp(click_name, deFileName, tName_len);
if ( !v9 )
{
tail = deFileName[tName_len];
if ( tail == '\\' || tail == '/' || !tail )
return 1;
}
if ( v3 == 1 )
return 0;
}
...
}
题目当然没有这么简单,不过离答案也很接近了,向上溯源,再结合使用 bindiff,得到 sub_1400EF508
.
流程如下:
sub_1400EF508
->sub_140009290
->sub_14000A650
->sub_1400D6070
->0x1400D6478
->0x1400D3474
->0x1400CEBF4
->0x140077054
->0x140089948
预期做法难度可能较大,不过本题还有其他解法。
PS: 可疑函数并不多,锁定范围爆破提交一下基本就 easy 结束了。偷鸡做法:因为修复之处增加了 3 条汇编 所以把所有新旧对比改了 3 条汇编的地方 全交一遍估计也能成。