今年一月份微软修补了来自天府杯的漏洞补丁,由于我对能利用的漏洞很感兴趣,所以决定看一下CVE-2022-21885 And CVE-2022-21914的补丁

由于没有公开的漏洞信息,第一个问题就是找到漏洞文件,唯一可以帮助我们的是Windows Remote Access Connection Manager这个标题信息,之前我有一些看补丁的经验,我发现一般来说文件说明会包含漏洞标题信息并且补丁后漏洞文件修改日期会改变,所以,我经常使用如下代码来寻找漏洞文件

//微软发布的补丁大多数标题名和漏洞文件的说明名相关 此程序则是遍历文件说明,如果匹配则打印文件名以及修改时间
//如果结果特别多那么一个好的处理方式是 cmd 这个exe名 >>1.TXT 安装补丁后(最好安装仅安全质量更新 体积小 只补漏洞) 这个exe名 >>2.TXT  之后再对比1.txt和2.txt文件内容
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <locale.h>
#include <atlstr.h>
#include "windows.h"
#include <Strsafe.h>
using namespace std;
#pragma warning(disable:4996)
#pragma comment(lib, "version")bool QueryValue(CHAR* ValueName, CHAR* szModuleName, CHAR* info)
{bool bSuccess = FALSE;BYTE* m_lpVersionData = NULL;DWORD   m_dwLangCharset = 0;CHAR* tmpstr = NULL;do{DWORD dwHandle;// 判断系统能否检索到指定文件的版本信息DWORD dwDataSize = ::GetFileVersionInfoSizeA(szModuleName, &dwHandle);if (dwDataSize == 0)break;m_lpVersionData = new (std::nothrow) BYTE[dwDataSize];// 分配缓冲区if (NULL == m_lpVersionData)break;// 检索信息if (!::GetFileVersionInfoA(szModuleName, dwHandle, dwDataSize,(void*)m_lpVersionData))break;UINT nQuerySize;DWORD* pTransTable;// 设置语言if (!::VerQueryValueA(m_lpVersionData, "\\VarFileInfo\\Translation", (void**)&pTransTable, &nQuerySize))break;m_dwLangCharset = MAKELONG(HIWORD(pTransTable[0]), LOWORD(pTransTable[0]));if (m_lpVersionData == NULL)break;tmpstr = new (std::nothrow) CHAR[128];// 分配缓冲区if (NULL == tmpstr)break;sprintf_s(tmpstr, 128, "\\StringFileInfo\\%08lx\\%s", m_dwLangCharset, ValueName);LPVOID lpData;// 调用此函数查询前需要先依次调用函数GetFileVersionInfoSize和GetFileVersionInfoif (::VerQueryValueA((void*)m_lpVersionData, tmpstr, &lpData, &nQuerySize)){if (strstr((const char*)lpData, (const char*)info) != 0){return 1;}}bSuccess = TRUE;} while (FALSE);// 销毁缓冲区if (m_lpVersionData){delete[] m_lpVersionData;m_lpVersionData = NULL;}if (tmpstr){delete[] tmpstr;tmpstr = NULL;}return 0;
}//传入要遍历的文件夹路径,并遍历相应文件夹
void TraverseDirectory(CHAR Dir[MAX_PATH], CHAR* info)
{WIN32_FIND_DATAA FindFileData;HANDLE hFind = INVALID_HANDLE_VALUE;CHAR DirSpec[MAX_PATH];                  //定义要遍历的文件夹的目录DWORD dwError;StringCchCopyA(DirSpec, MAX_PATH, Dir);StringCchCatA(DirSpec, MAX_PATH, ("\\*"));   //定义要遍历的文件夹的完整路径\*hFind = FindFirstFileA(DirSpec, &FindFileData);          //找到文件夹中的第一个文件if (hFind == INVALID_HANDLE_VALUE)                               //如果hFind句柄创建失败,输出错误信息{FindClose(hFind);return;}else{while (FindNextFileA(hFind, &FindFileData) != 0)                            //当文件或者文件夹存在时{if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0 && strcmp(FindFileData.cFileName, ".") == 0 || strcmp(FindFileData.cFileName, "..") == 0)        //判断是文件夹&&表示为"."||表示为"."{continue;}if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)      //判断如果是文件夹{char DirAdd[MAX_PATH];StringCchCopyA(DirAdd, MAX_PATH, Dir);StringCchCatA(DirAdd, MAX_PATH, "\\");StringCchCatA(DirAdd, MAX_PATH, FindFileData.cFileName);       //拼接得到此文件夹的完整路径TraverseDirectory(DirAdd, info);                                  //实现递归调用}if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)    //如果不是文件夹{CHAR p[1000] = { 0 };strcpy(p, Dir);strcat(p, "\\");strcat(p, FindFileData.cFileName);if (QueryValue((CHAR*)"FileDescription", p, info)){HANDLE pFile = CreateFileA(p, GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (pFile == (HANDLE)-1){continue;}FILETIME fCreateTime, fAccessTime, fWriteTime, localTime;GetFileTime(pFile, &fCreateTime, &fAccessTime, &fWriteTime);SYSTEMTIME sysTime;FileTimeToLocalFileTime(&fWriteTime, &localTime);FileTimeToSystemTime(&localTime, &sysTime);CString strTime;printf("%s   修改时间%4d年%2d月%2d日\n", p, sysTime.wYear, sysTime.wMonth, sysTime.wDay);}memset(p, 0, 1000);}}FindClose(hFind);}
}int main() {//传入一个文件路径名,一个文件信息名,如果遍历的文件中文件说明有匹配的则打印TraverseDirectory((char*)"C:\\Windows\\system32", (char*)"Remote Access Connection Manager");TraverseDirectory((char*)"C:\\Windows\\system32", (char*)"远程访问连接");return 0;
}

我在win7 x86安装仅安全更新补丁5009621并运行程序后得到了如下结果

根据结果我大概确定漏洞文件是rasmans.dll,为了方便补丁对比,还得寻找上一个此模块漏洞win7 x86文件的补丁版本,这里可以借助cve列表直接搜索

最后我确定CVE-2021-33761是上一个文件版本(对于win7 x86来说),然而这两个版本都微软没有提供符号,win7 x86 下的rasmans.dll最后一个有符号的版本在CVE-2021-33761之前,嗯…可以这么理解,一出漏洞就不提供符号了。

先用有符号的rasmans.dll对比CVE-2021-33761的补丁rasmans.dll

再用有符号的rasmans.dll对比CVE-2022-21885 And CVE-2022-21914补丁rasmans.dll,排除CVE-2021-33761的结果,可以得出该补丁修补的漏洞函数为下图红框内的函数

这些漏洞回溯后的函数地址都与一个全局变量RequestCallTable有关,RequestCallTable记录了非常多的函数地址

ServiceRequestInternal函数中会调用到RequestCallTable

而调用ServiceRequestInternal的两个函数是该dll提供的rpc接口


在确定漏洞类型是二进制漏洞之后,我决定不会花费精力继续分析,一个合理的借口是我已经停止寻找二进制漏洞了,我更乐意分析逻辑漏洞。

rpc有关的知识放到参考

攻击Windows IPC:RPC
https://csandker.io/2021/02/21/Offensive-Windows-IPC-2-RPC.html

尝试进行rpc漏洞挖掘
https://cert.360.cn/report/detail?id=44669690fc7a8daab42472cebd8cfb88

利用findrpc寻找RPC接口信息
http://t.cn/A6xLU6dM

Fuzzing Windows RPC with RpcView
https://itm4n.github.io/fuzzing-windows-rpc-rpcview/

记录一次rpc 漏洞补丁查看相关推荐

  1. Log4j 第三次发布漏洞补丁,漏洞或将长存

    整理 | 郑丽媛.禾木木 出品 | CSDN 这几天,Apache Log4j 2 绝对是众多 Java 程序员提到的高频词之一:由于 Apache Log4j 2 引发的严重安全漏洞,令一大批安全人 ...

  2. 关于windows server 2016 更新CVE-2020-1472漏洞补丁的问题

    关于windows server 2016 更新CVE-2020-1472漏洞补丁的问题  https://social.technet.microsoft.com/Forums/officeshar ...

  3. oracle12漏洞补丁下载,linux oracle 11g 漏洞补丁升级

    1 lsnrctl stop 关闭监听 2 shutdown immediate 关闭数据库 3 上传压缩包并解压到/home/下 4 chown -R oracle:oinstall 2872926 ...

  4. 360安全卫士系统漏洞修复,漏洞补丁下载成功但安装失败的解决办法

    具体原因,需要到系统盘/windows 目录下找到以kb*******.log 日志,察看其中的文字描述,与以下进行对应,给出解决方案. 1. 在驱动器 c: 上没有足够的空间来安装 kb950749 ...

  5. 微软为Office和写字板软件发布零日漏洞补丁

    在本月的"补丁星期二"那天,微软如约发布了面向 Office 和写字板(WordPad)软件的零日漏洞补丁,堵住了可被攻击者通过一个特制 RTF 格式文档(其实暗藏恶意软件)感染系 ...

  6. 修改织梦的php没有用,织梦安装360漏洞补丁之后不能够运行PHP代码的问题

    360的织梦dedecms 漏洞补丁在圈子里面还是有一些知名度的,可同样能够出现一些小问题,毕竟人家不是专门研究织梦的,又一次打了360的补丁之后, 结果悲剧了,刷新页面居然不能使用php标签. 没办 ...

  7. Weblogic10.3.6反序列化漏洞补丁(3L3H)升级方案

    针对这几年来WebLogic软件经常报出的java反序列化漏洞问题,因为weblogic底层也使用Apache Commons Collections库,WebLogic 存在Java反序列化漏洞无疑 ...

  8. 苹果maccms最新漏洞补丁 防止数据库被反复挂马

    [推荐]2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 2020年刚开始,苹果CMS被爆出数据库代码执行漏洞,大量的电影网站被挂马,尤其电影的页面被篡改植入了恶意代码 ...

  9. phpsso.php 注入漏洞,PHPCMS各种注入漏洞补丁

    1.宽字节注入漏洞 /phpcms/modules/pay/respond.php 位置约16行 原来代码$payment = $this->get_by_code($_GET['code']) ...

  10. Weblogic反序列化漏洞补丁更新解决方案

    Weblogic反序列化漏洞补丁更新解决方案 参考文章: (1)Weblogic反序列化漏洞补丁更新解决方案 (2)https://www.cnblogs.com/knightlilz/p/p2078 ...

最新文章

  1. 华为+长安研发芯片?长安蔚来更名“阿维塔科技”
  2. 微信扫描二维码登入实现,网页端
  3. 三、Ubuntu16.04 安装Jira8.2.2(自带中文包)和破解
  4. Access 导出各种格式文件
  5. python代码质量检查工具_python代码检查工具pylint 让你的python更规范
  6. neutron plugin 与 extension 编写流程
  7. switch中case后可以是表达式吗_自学C++基础教程【流程控制语句】(switch语句 )...
  8. 在save中重写 AdminModel 方法 和 Signals
  9. java idea 模块_idea 多模块项目依赖父工程class找不到问题的方法
  10. 高并发负载均衡——网络协议原理
  11. 1· linux命令:查看依赖的共享库 - ldd命令
  12. RabbitMQ----源码安装
  13. 应用安全 - 代码审计 - JavaScript
  14. 拓端tecdat|Python面板时间序列数据预测:格兰杰因果关系检验Granger causality test药品销售实例与可视化
  15. html货币相关符号
  16. 国图三维不动产创新实践:三维地籍图制作
  17. 高等数学(第七版)同济大学 习题1-4 个人解答
  18. 软件日企工作感想,目前刚到账两周
  19. 黑苹果教程(一)VM装黑苹果
  20. STM32F103Cx用芯片tlc5615做DAC转换

热门文章

  1. C语言实现一个矩阵乘法计算器
  2. 浏览器中performance的基本使用
  3. php工具箱的mysql服务_PHP程序员工具箱下载_PHP工具箱(PHP配置PHP学习软件) 1.0 官方版_极速下载站_软件下载...
  4. 英国交通分析指南(Transport analysis guidance)解读及启示
  5. 【电路设计】RC振荡器 - 文氏电桥振荡器
  6. BoundsChecker安装下载及使用教程攻略
  7. Scintilla教程(5): 选中
  8. matlab对控制系统进行时域和频域联合分析
  9. 专业SMT贴片螺母生产厂家|支持贴片螺母非标定制符合产品要求
  10. 3S基础知识:MapInfo教程--二次开发入门