PythonPig's Blog 移动通信 TCP/IP Hacker 后渗透 伪码农

Cobaltstrike SMB beacon(命名管道相关知识)

2018-01-17
PythonPig

#0x00 写在前面

在使用CS的SMB beacon的过程中来学习一下命名管道相关的知识,本文中的内容大部分来自网络,谢谢各位大牛,参考文章见最后的【参考】部分。

smb beacon

图片来源于:https://blog.cobaltstrike.com/2013/12/06/stealthy-peer-to-peer-cc-over-smb-pipes/

#0x01 SMB beacon简介

SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。 因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效(系统防火墙默认是允许445的端口与外界通信的,其他端口可能会弹窗提醒,会导致远程命令行反弹shell失败)。
上图很好的诠释了SMB beacon的工作流程。

#0x02 命名管道简介

“命名管道” 又名 “命名管线”,但是通常都叫命名管道,是一种简单基于 SMB 协议的进程间通信(Internet Process Connection - IPC)机制。 在计算机编程里,命名管道可在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信传输。

和一般的管道不同,命名管道可以被不同进程以不同的方式方法调用(可以跨语言、跨平台)。只要程序知道命名管道的名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。

默认情况下,我们无法使用命名管道来控制计算机通信,但是微软提供了很多种 Windows API 函数,例如 :

用于实例化命名管道的服务器端函数是 CreateNamedPipe
接受连接的服务器端功能是 ConnectNamedPipe.aspx)
客户端进程通过使用 CreateFile 或 CallNamedPipe 函数连接到命名管道

命名规范
命名管道的命名是采用的 UNC 格式:\Server\Pipe[Path]Name 的。

第一部分\Server指定了服务器的名字,命名管道服务即在此服务器创建,其字符串部分可表示为一个小数点(表示本机)、星号(当前网络字段)、域名或是一个真正的服务;第二部分 \Pipe 与邮槽的 \Mailslot 一样是一个不可变化的硬编码字串,以指出该文件是从属于 NTFS;第三部分[Path]Name则使应用程序可以唯一定义及标识一个命名管道的名字,而且可以设置多级目录。

#0x03 参考


Similar Posts

上一篇 Linux相关命令

Comments