hw防御 | tcprepaly工具的安装与使用!

NoSQL数据库关系型数据库MySQL

Tcpreplay是 一种pcap包的重放工具, 它可以将tcpdump和Ethereal/Wireshark等工具捕捉到的网络流量包进行编辑修改和重放. 重写Layer 2、3、4层数据包,并将流量重新发送至目标网络, 这样通过重放网络流量包从而实现复现问题情景以定位bug。

Tcpreplay是一个工具集合,包括:tcpprep(确认客户端发给服务器的报文,还是服务器发给客户端的报文)、tcprewrite(编辑报文)、tcpreplay(发送报文)。其中,tcpreplay是真正实现流量回放功能的工具,其他几个工具可以看作tapreplay的辅助工具,作为流量重放前期的准备工作,比如tcpprep可以划分哪些包是client的, 哪些是server的, client的包从一个网卡发, server的包可能从另一个网卡发。tcprewrite可以就是修改2层, 3层, 4层报文头部,也就是对IP,MAC等信息进行修改。

1

Tcpreplay安装

CentOS环境下直接,在线安装执行下列命令即可:


        
            

          yum -y install tcpreplay
        
      

Ubuntu环境下直接,在线安装执行下列命令即可:


        
            

          sudo apt-get install tcpreplay
        
      

查看安装是否成功:


        
            

          tcpreplay -V
        
      

picture.image

查看帮助信息:


          
-q, --quiet   #安静模式 
          
-a  #精确的时间(使用高速 cpu 发包) 
          
-d  #输出调试信息(0-5,默认 0) 
          
-K, --preload-pcap   #发送前将数据包预加载到 RAM 中 
          
-c  #双网卡回放报文必选参数,后跟文件名 
          
-C, --cachefile=str   #通过tcpprep缓存文件拆分流量 
          
-N  #获得网络接口和出口 
          
-2, --dualfile        #从网络分路器一次重放两个文件 
          
-i, --intf1=str       #客户端到服务器/RX/主要流量输出接口,双网卡回放报文必选参数,指定从接口 
          
-I, --intf2=str       #服务器到客户端/TX/二级流量输出接口 
          
--listnics            #列出可用的网络接口并退出,双网卡回放报文必选参数,指定主接口 
          
-S  #制定包长度 
          
-L, --limit=num       #限制发送的数据包数量 
          
     --duration=num   #限制发送的秒数,限制发包数量 
          
-M, --mbps=str              以 Mbps(兆字节每秒)发送报文 
          
-t, --topspeed              以最快的速度回放报文 
          
-o, --oneatatime           用户每输入一次回放一个报文 
          
    --pps-multi=num        每个时间间隔发送的数据包数X 
          
    --unique-ip            每次循环迭代修改 IP 地址以生成唯一的流 
          
    --unique-ip-loops=str  在分配新的唯一 ip 之前循环的次数 
          
    --no-flow-stats        禁止打印和跟踪流计数、速率和到期时间 
          
    --flow-expiry=num      将流视为过期之前处于非活动状态的秒数 
          
-r, --portmap=str          重写 tcp/udp 端口 
          
-s, --seed=num             根据给出的seed随机改写源/目的IPv4、IPv6 
          
-N, --pnat=str             通过伪 NAT 重写 ip 地址 
          
-S, --srcipmap=str         使用伪 NAT 重写源 IPv4/v6 地址 
          
-D, --dstipmap=str            使用伪 NAT 重写目标 IPv4/v6 地址 
          
-e, --endpoints=str        在最后 2 个点之间重写 ip 地址 
          
-b, --skipbroadcast        不重写广播/多播 IP 地址 
          
-C, --fixcsum              强制重新计算 TP/TCP/UDP 校验和 
          
-m, --mtu=num              覆盖默认 MTU 长度(1500 字节) 
          
    --mtu-trunc            截断大于指定 MTU 的数据包 
          
-E, --efcs                 从帧尾删除以太网校验和 (FCS) 
          
    --ttl=str              修改 IPv4/v6 TTL/Hop 限制 
          
    --tos=num              设置 IPv4 TOS/DiffServ/ECN 字节 
          
    --tclass=num           设置 IPv6 流量类别字节 
          
    --flowlabel=num        设置 IPv6 流标签 
          
-F, --fixlen=str           填充或截断数据包数据以匹配报头长度 
          
    --fuzz-seed=num        Fuzz 1 in X packets.  Edit bytes, length, or emulate packet drop 
          
    --fuzz-factor=num      Set the Fuzz 1 in X packet ratio (default 1 in 8 packets) 
          
    --skipl2broadcast      跳过重写广播/多播第 2 层地址 
          
    --enet-dmac=str        覆盖目标以太网 MAC 地址 
          
    --enet-smac=str        覆盖源以太网 MAC 地址 
          
    --enet-subsmac=str     替换 MAC 地址 
          
    --enet-mac-seed=num    随机化 MAC 地址 
          
    --enet-mac-seed-keep-bytes=num 随机化 MAC 地址 
          
    --enet-vlan=str        指定以太网 802.1q VLAN 标记模式 
          
    --enet-vlan-tag=num    指定新的以太网 802.1q VLAN 标记值 
          
    --enet-vlan-cfi=num    指定以太网 802.1q VLAN CFI 值 
          
    --enet-vlan-pri=num    指定以太网 802.1q VLAN 优先级 
          
    --hdlc-control=num     指定 HDLC 控制值 
          
    --hdlc-address=num     指定HDLC地址 
          
    --user-dlt=num         设置输出文件 DLT 类型 
          
    --user-dlink=str       用用户指定的数据重写数据链路层 
          
-i, --infile=str           输入待处理的pcap文件 
          
-o, --outfile=str          输出 pcap 文件 
          
-c, --cachefile=str        通过 tcpprep 缓存文件拆分流量 
          
-v, --verbose              通过 tcpdump 将解码的数据包打印到 STDOUT 
          
-V, --version              Print version information 显示版本号 
          
-P, --pid                  启动时打印tcpreplay的PID 
          
    --stats=num            每 X 秒打印一次统计信息,如果为“0”,则在每个循环中打印一次 
          
---------------------------------------------------------------------------------------- 
          
-T, --timer=str            选择包定时模式:select、ioport、gtod、nano 
          
    --maxsleep=num         包与包之间相隔X毫秒 
          
-v, --verbose              通过 tcpdump 将解码的数据包打印到 STDOUT,可选参数,每发送一个报文都以 tcpdump 风格打印对应信息 
          
------------------------------------------------------------------------------------------ 
          
-l, --loop=num              循环遍历捕获文件 X 次 
          
--loopdelay-ms=num          循环之间的延迟(以毫秒为单位) 
          
--pktlen                    覆盖 snaplen 并使用实际的数据包 len,可选参数,指定循环次数 
          
----------------------------------------------------------------------------------------- 
          
-x, --multiplier=str         将重播速度修改为给定倍数 
          
-p, --pps=str                指定每秒发送报文的个数 
          
------------------------------------------------------------------------------------------ 
          
-m  #可选参数,指定一个倍数值,比默认发送速度快多少倍发送报文 
          
------------------------------------------------------------------------------------------- 
          
-A, --decode=str           传递给 tcpdump 解码器的参数 
          
    --skip-soft-errors     跳过写入软错误的数据包
      

2

Tcpreplay典型案例

本次案例使用Tcpreplay工具,重放具有攻击特征的流量数据包,触发IPS告警信息。操作过程如下所示:

(1)查询可用的网络接口信息


        
            

          tcpreplay --listnics
        
      

(2)抓取接口的流量数据包


        
            

          tcpreplay -i eth3 data.pcap
        
      

(3)标记 client 和 server


        
            

          tcpprep -a client -i test.pcap -o test.cach
        
      

(4)修改源目的ip和mac地址


          
tcprewrite --endpoints=源ip地址:目的ip地址 --enet-dmac=上行目的mac地址,下行目的mac地址 --enet-smac=上行源mac地址,下行源mac地址 -i test.pcap -c test.cach -o test_result.pcap
          

          
--endpoints: 重写ip地址 源ip地址:目的ip地址
          
--enet-dmac: 覆盖目标以太网MAC地址 上行目的mac地址,下行目的mac地址
          
--enet-smac: 覆盖源以太网MAC地址 上行源mac地址,下行源mac地址
          
-i: 客户端到服务器/RX/主要流量输出接口
          
-c: 双网卡回放报文必选参数,后跟文件名
      

(5)从新生成cach文件


        
            

          tcpprep -a client -i test\_result.pcap -o test\_result.cach
        
      

(6)tcpreplay回放报文


        
            

          tcpreplay -i eth3 -I eth5 -c test\_result.cach test\_result.pcap
        
      

(7)在IPS底层抓取流量包,发现已经触发IPS告警

picture.image

3

常见问题总结

(1)如果回放报文出现了消息过长“Error whith PF_PACKET send() :Message to long”的错误,通常mtu的默认值为1500, 将网卡的mtu值改大,例如命令为:


          
ip link set eth2 mtu 1520 
          
ifconfig eth2 mtu 1520
      

(2)如果重放报文报文发现报文时序错乱问题,比如tcp三次握手信息错乱等,通常是由于报文的时间间隔较短,再加上网络环境等因素的影响造成报文到达时间不同。通常可以通过设置发包速率-p参数解决该问题:


        
            

          tcpreplay -i eth3 -I eth5 -p 1 -c test\_result.cach test\_result.pcap
        
      

如有侵权,请联系删除

推荐阅读

实战|记一次奇妙的文件上传getshell

「 超详细 | 分享 」手把手教你如何进行内网渗透

神兵利器 | siusiu-渗透工具管理套件

一款功能全面的XSS扫描器

实战 | 一次利用哥斯拉马绕过宝塔waf

BurpCrypto: 万能网站密码爆破测试工具

快速筛选真实IP并整理为C段 -- 棱眼

自动探测端口顺便爆破工具t14m4t

渗透工具|无状态子域名爆破工具(1秒扫160万个子域)

查看更多精彩内容,还请关注 橘猫学安全

每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“ **再看

”**

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论