当前位置:首页 > 黑客服务 > 正文内容

自己动手编写远控工具及检测思路

访客4年前 (2021-04-15)黑客服务482

PS:本文仅用于技术讨论与交流,严禁用于任何非法用途,违者后果自负

在学习攻击渗透的过程中,不免会接触远控工具。远控工具一般包含服务端和客户端,服务端运行在攻击者的VPS主机上,客户端运行在被攻击机器上。服务端向客户端发送指令,客户端执行指令并将结果回传给服务端,从而达到通过网络远程控制被攻击主机的效果。

现有的远控工具很多,从大名鼎鼎的冰河到CHAOS。但是直接使用现有的远控工具,一方面会担心工具被人加入了后门在运行的过程中自己反而成了被控制方,另一方面只会使用工具也会沦为“脚本小子”而不知道其背后的原理。

本文详细介绍了一款最小功能集的远控工具的实现细节,按照步骤动手实现,不仅可以对于远控工具的背后思路有了更深的体会,也可以巩固自己在多线程、网络编程等方面的知识。

1.?总体结构

图1.总体结构

同一般的远控工具一致,我们要实现的这款工具也是包含服务端和客户端。

服务端运行在VPS主机上,监听443端口。由于443为HTTPS协议端口,这样被攻击主机上即使监控到存在外联443端口的流量,也不太容易引起重视。所以在模拟攻击者的过程中,可以选用一些常用端口作为服务端的监听端口。

服务端和客户端使用TCP协议进行通信,利用多线程服务端处理多个客户端同时在线的情况。

客户端捕获异常,当与服务端的通信连接断开触发异常时,延时5秒后重新发送连接请求。这样即使服务端出现了中途退出的情况,重新运行后客户端也可以重新上线。

2.?实现细节

2.1?服务端

服务端主要做两件事情:

使用socket监听443端口,使用独立的线程完成与客户端的通信,对于指定客户端下发指令并打印指令执行结果

在主线程中死循环监听攻击指令输入(如snapshot对于被攻击机进行截屏、cmd在被攻击机上执行系统命令)

图2.服务端记录客户端连接流程


图2即是服务端记录客户端连接的流程。客户端发来的第一条消息会是“HELO,客户端IP”,服务端会解析第一条消息,并以客户端IP为key将客户端的socket保存到字典里。后续,当需要与指定的客户端进行通信时,直接从字典里根据IP拿到对应客户端的socket进行消息的发送和接收即可。

图3.服务端处理指令流程

图3则是服务端处理指令的流程。目前服务端接收的指令如下:

ls: 打印当前全部客户端IP

snapshot:对于指定客户端所在机器进行截屏。示例:snapshot ${client_ip}

clipboard:获取客户端所在机器的剪贴板内容。示例:clipboard ${client_ip}

cmd:在指定客户端所在机器执行系统命令。示例: cmd ${client_ip} ${command}

showdriver:展示客户端所在机器的全部盘符。示例:showdriver ${client_ip}

getfilelist:获取客户端所在机器指定路径下的文件列表。示例:getfilelist ${client_ip} ${path}

getfile:获取客户端所在机器指定文件。示例:getfile ${client_ip} ${filepath}

当服务端接收ls指令时,直接将记录有客户端socket字典的key列表打印出来即可。当收到的是其他指令时,由于指令的第二个参数是客户端IP,那么根据IP得到对应的客户端socket,使用socket将指令发送给客户端,并打印客户端socket的返回结果即可。

2.2?客户端

客户端主动连接服务端的443端口。在初次连接上时,主动发送一条“HELO,客户端IP”消息标记自己。后续客户端则是持续循环等待服务端发送过来的指令,并根据指令真实的在被攻击上进行截图、获取文件列表等操作,并将结果回传给服务端。

客户端会捕获异常,当socket出现异常后,等待5秒尝试重连。

图4.客户端处理指令流程

3.?重点问题解决

3.1持久化

一个远控工具除了支持服务端下发指令,客户端执行指令并回传结果的功能外,还需要可以对于自己进行持久化。所谓持久化,即保证客户端进程被杀死或者被攻击主机关机后,也可以在被攻击主机再次开机时启动。

进行持久化有如下几种方法:

写注册表

将执行文件复制到启动目录

将自己注入其他系统进程

这几种方法各有优缺点,将执行文件复制到启动目录一般需要管理员权限,在执行客户端进程的用户没有管理员权限时,复制会导致“Permission denied”错误。而写注册表和注入进程的行为,通常会被杀软作为高危项检测到。

由于我们的这款远控工具只是学习使用,所以不考虑绕过杀软的方法,使用写注册表的方式将自己设置为开机自启动:

图5.写注册表开机自启动

主要的步骤就是首先将自己复制到临时目录,并且改名为svhost.exe(与系统进程svchost.exe一字之差),同时将自己写入注册表的开机自启动项。

3.2 TCP Socket通信粘包问题

由于我们实现服务端和客户端的通信是用的TCP协议,而TCP协议容易出现粘包问题,导致服务端接收到的客户端回传的图片或者文件是损坏状态,无法正确打开。

所谓粘包即客户端发送给服务端的多个包被粘在了一起,它产生的主要原因在于接收到数据包放在了缓冲区里,如果缓冲区包写入的速度大于服务端从缓冲区取的速度,服务端就会取到首尾相连的多个包。

为了让服务端可以正确的区分接收到的数据,解决粘包问题,我们需要将传输的数据进行格式化。

我们定义:

一条消息的头部4个字节为消息内容长度

头部后面再跟消息内容

图6.发送格式化的消息

当服务端接收到数据时,先解析头部4个字节得到消息的长度,再根据这个长度得到消息正文。

图7.处理格式化的消息

3.3 客户端打包为exe

我们的这款远控工具使用的python语言进行开发,而客户端主要运行在windows主机上。由于windows主机默认并没有安装python环境,所以需要将客户端打包为exe使得它可以直接在windows主机上进行运行。

将python打包为exe主要使用pyInstaller这款神器,使用-F参数生成单个执行文件,使用-w参数表示运行时去掉控制台窗口。打包完成后,dist目录下即会出现生成的exe文件。

图8.将客户端打包成exe

4.?效果演示

服务端运行时,当客户端上线时,会打印客户端的IP。

图9.服务端运行效果

使用ls命令,可以打印当前已经上线的全部客户端IP:

图10.打印全部客户端

可以对于客户端所在机器进行截屏:

图11.对于客户端所在机器进行截屏

5.?源码下载地址

https://github.com/tammypi/remote_control_tool

强调:请注意,本源码仅供学习使用,请勿用作非法用途。

6. 检测思路

在对于这类远控工具进行检测时,重要的特征有以下两点:

注册表写入动作、复制自身动作

虽然与常用端口进行通信,但是数据包的特征却明显并非为对应协议的特征

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:https://therlest.com/106827.html

分享给朋友:

“自己动手编写远控工具及检测思路” 的相关文章

贾秀东个人资料简介(简历及图片)

贾秀东人物概况 本页面提供了贾秀东个人资料简介(简历及图片),贾秀东是谁?贾秀东个人简介资料完整设计了网页求职找工作编辑个人简历作品所需要的贾秀东网站常用模板元素,不保证贾秀东人物数据真实,任何问题请联系管理员调整。 贾秀东图片 贾秀东个人资料简介 贾秀东,中国国际问题研究所特聘研究员。1...

身份证信息被黑客盗取(黑客能把手机内身份证信息盗取吗)

一、身份证信息被黑客盗取(黑客能把手机内身份证信息盗取吗)方法总结 1、黑客通过手身份姓名能否窃取别人银行卡里。朋友你好,这个问题不是这样理解的的,黑客是通过你的这些信息,破易你的银行卡号支付密码来盗取你的财物的,一般你只要不乱点链接,不轻易在手机。黑客控制了手机,窃取了身份证号码手机号姓名等所有...

家庭用水价格,生活用水价格

约64元,用水价格:生活用水:1点4元/吨,一般三口之家,181-260吨,营业电1元,用的比较少,至来年4月洗热水澡,自来水调价。 污水费0点,8价格元/吨,广州市的居民生活用水从原来的每立方米0点9元,水价也不一样。据此,很难说清楚。居室条件等等,生活用水会比较贵。 自来水费和污水处理费三部分,...

硅料价格走势图 「今日硅价格553价格」

据了解,价格大概是在:8000元到12500元不等;电池片.三峡新材,破片上有电路图的和没有电路图的,最多达到99 点5价格,硅矿\石英的用途很广泛的,必需的电子材料,75#主流价格维持。 3303#如果12200-12400,多种有机硅下游材料出现大涨,市场现货充足。10月30日国内金属粉末现货价...

鸡业行情网今日鸡价,鸡业行情网下载安装

河南:新乡肉鸡价格4点45:鸡架2点鸡肉7点鸡大腿鸡翅根8点鸡爪鸡翅尖鸡翅中鸡心鸡肝,其地址为http,除江苏地区苗鸡价格略涨,烟台网肉鸡价格4点65-4点75元/斤/wyimucom/down-15679html,1点00元/羽,点击“下载文件。以市斤为单位/羽 菏泽鸡苗价格3点90-4点30元/...

铁盖子可以放入高压锅蒸吗?装酱料的铁盖子,外面的涂层有些剥落,好

铁盖子可以放入高压锅蒸吗?装酱料的铁盖子,外面的涂层有些剥落,好 铁盖子可以放入高压锅蒸吗? 装酱料的铁盖子,外面的涂层有些剥落,好象也没锈,可以拿它盖严瓶子入高压锅蒸吗? 绝对不行!既危险又不卫生。盖住的瓶子在高压锅中加热,很容易形成压力差而爆炸;铁在高压锅中的水蒸汽作用下极易变成四氧化三...

评论列表

俗野淤浪
2年前 (2022-07-03)

包放在了缓冲区里,如果缓冲区包写入的速度大于服务端从缓冲区取的速度,服务端就会取到首尾相连的多个包。为了让服务端可以正确的区分接收到的数据,解决粘包问题,我们需要将传输

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。