NameLess后门技术分析全接触(2)

  • 时间:
  • 浏览:0





作者: 论坛派发 zdnet网络安全

CNETNews.com.cn

1508-01-23 19:58:37

关键词: 攻击防范 后门 NameLess

你这俩 段的作用比较容易我能 感到迷惑,AccpetAddr是接收到的连接过多人属性,大伙儿使用EditPlus的“在文件中查找”在整个目录上边搜索SourceIP查看它到底是做那此的。最后把注意力中放了DecodeIPPack函数上(实现代码在./Sniffer/Sniffer.h文件中):

  BOOL DecodeIPPack(const char * IPBuffer)

  {

  IPHeader * pIpheader;

  int IPHeaderLen;

  struct sockaddr_in SourceAddr;

  pIpheader = (IPHeader*)IPBuffer;

  if ((pIpheader->proto != IPPROTO_TCP))

  return FALSE;

  SourceAddr.sin_addr.s_addr = pIpheader->sourceIP;

  memcpy(SourceIP, inet_ntoa(SourceAddr.sin_addr), sizeof(SourceIP));

  IPHeaderLen = sizeof(unsigned long) * (pIpheader->h_lenver & 0xf);

  return DecodeTCPPack(IPBuffer+IPHeaderLen);

  }

  在前面大伙儿提到了你这俩 函数,但并告诉我它的具体作用,现在就来完整分析一下,每当捕获到有有4个 数据包就传递给你这俩 函数,并将其强制转再加IPHeader类型(你这俩 行态类型会一个劲用到,网上有过多 ,附带的源代码中是定义在Sniffer.h文件中)。函数首先检查数据报的协议类型算是为IPPROTO_TCP,而且将sourceIP字段值赋给SourceAddr.sin_addr.s_addr,再通过memcpy函数拷贝到SourceIP变量中,到这里大伙儿还还还还后能 知道每有有4个 协议为IPPROTO_TCP的数据包的源IP算是被赋给SourceIP,很久 将其传递给了DecodeTCPPack和CheckTcpData函数,在这有有4个 函数中先进行初始化处置后就调用CheckTcpData检查数据,你这俩 函数有过多点长,过多 我能 简单介绍一下它的工作流程算了:首先在数据报中找到" ",接着判断它前面算是为"",可能性是就把它前面的内容完整拷贝到有有4个 字符串StringData中,再使用PortPoint = strstr(StringData,":");和HostPoint = strstr(StringData,"|");这两句在上边寻找主机地址和端口,紧接着算是分析端口合法性和主机地址的有效性,这里就过多说了。从这里还还还还后能 知道它是使用嗅探的原理来取得控制端的IP实现反向连接的,大慨原理要是我捕获流经本机的所有数据包,而且根据自定义的协议来分析算是控制端发送过来的数据,可能性是就从中取得相关信息后连接。

  好了,上边分析了没有多后大伙儿回到stricmp(SourceIP,inet_ntoa(AccpetAddr.sin_addr))这里继续看,通过上边的分析大伙儿清楚了SourceIP是用来区分算是控制端的IP的。可能性符合规则一段话就为其建立有有4个 控制守护线程,在此守护线程函数ClientThread中使用自定义函数ReveiceMessage来接收命令,首先判断输入的密码算是正确,通很久 即发送预定义的欢迎信息,而且进入有有4个 循环中不停地接受控制端的命令并执行。

  到这里大伙儿就基本上把NameLess的连接流程搞清楚了,你这俩 使用嗅探的最好的最好的妙招有它的好处,要是我容易过防火墙,但算是它的缺点,要是我当网络繁忙的很久 很容易丢失封包。过多的反向连接最好的最好的妙招更加流行,要是我通过有有4个 固定的域名来作为中转站,控制端每次启动的很久 都自动将过多人的IP更新到有有4个 指定的网页文件中,而服务端就通过读取你这俩 文件来得到控制端的IP后主动进行连接。网上的资料过多 ,大伙儿还还还还后能 多找来过多代码参考。

  三、控制功能

  现在大伙儿来看NameLess的控制功能,你这俩 着实要是我属于系统编程的内容了,很久 的杂志上边涉及了过多 ,大伙儿今天就只拣过多比较有代表性的讲解下。所有的命令实现代码算是.Command目录下的相关文件中。

  大多数功还还还后能 是很常见的,比如列举守护线程、下载文件、清理日志,一个劲看黑防的各位估计早就会了,得到系统当前登录用户的密码你这俩 功能貌似不错,不过挺繁杂,NameLess中是注入到WinLogon守护线程中而且调用了过多未公开的API比如NtQuerySystemInformation等,这里就过多讲了,有兴趣的还还还还后能 自行阅读代码Findpass.h来学习。挑来挑去还是拿开启终端服务来讲一下吧,你这俩 功能还是蛮有用的,着实说白了着实要是我操作注册表:

  void InstallTerm(SOCKET Socket,DWORD NewPort)

  {

  int a = WriteRegEx(HKEY_LOCAL_MACHINE,"SYSTEMCurrentControlSetControl

  Terminal Server","TSEnabled",REG_DWORD,NULL,1,0);

  int b = WriteRegEx(HKEY_LOCAL_MACHINE,"SYSTEMCurrentControlSetServices

  TermService","Start",REG_DWORD,NULL,2,0);

  int c = WriteRegEx(HKEY_LOCAL_MACHINE,"SYSTEMCurrentControlSetControl

  Terminal ServerWinStationsRDP-Tcp","PortNumber",REG_DWORD,NULL,NewPort,0);

  if(a && b && c)

  sprintf(Temp,"Set New Terminal Service Port:%d Successfully ",NewPort);

  else

  sprintf(Temp,"Set New Terminal Service Failed ");

  SendMessage(Socket,Temp);

  }

  WriteRegEx是作者过多人写的函数,方便了他写守护线程过程中的重用。网上还流传有一份完整开启终端的C代码,搜“开3389 源代码”就还还还还后能 找到过多 。

  着实NameLess的控制功能比较全面,但大多数的功能过多后门也都具备,好像缺少过多所谓的特色功能,不过过多人非常同意你这俩 做法的。毕竟后门最重要的功能在于隐藏,拥有强大功能的那是远程控制,呵呵。