首页
社区
课程
招聘
[原创]广播?模拟广播
发表于: 2013-11-20 12:02 4471

[原创]广播?模拟广播

2013-11-20 12:02
4471
PDF格式全文下载请点击:
http://www.purpleroc.com/html/382547.html

Chapter 7——广播?模拟广播

       通过前面的努力,也就实现了整个对客户端大多数秘密的探索。不过,上章中,我们实现了数据包生成,并且,对自己的去掉了时间校验的客户端发送,虽然成功了,可似乎不能说明什么,只能说找到了他的实现原理罢了~

       那,我们再来分析分析吧,在用客户端拨号上网的过程中,整个客户端与服务器的交流过程应该是这个样子的:(YY的,不过貌似每次YY的结果都是正确的)

1、 客户端把密码解密成真实的拨号密码,传递给rasdial
2、 由rasdial函数拨号,并在内存中记录拨号成功的时间
3、 客户端发送一个数据包给服务器,用于查询拨号账号剩余使用时长(其实,这也是一个突破口,可以对服务器下手,构造各种查询数据包,看返回结果,说不定还能直接返回用户密码呢。当然,这也是yy)
4、 服务器返回一个数据包给客户端,告诉客户端,你的剩余使用时长时多少等等之类
5、 客户端接受到数据包,进行解析,而后,根据数据包内容进行相应操作


       额,大概就是这样了。那,我们现在的目的是:让每个拨号上网的人都弹出我想要弹出的内容和网站。

那我们可以从哪些方面入手呢?
       1、改所有的路由器,加条路由,把默认的服务器ip跳转到我的电脑上。(那就是每次都有一个数据包发送到我这里,然后我再返回一个能让他打开的网站的数据包),等等,这个问题我以前没有想到,不过现在一分析,发现,也是不很有效~拿下所有路由器,似乎有点~~~此外,我们忘了一件事,也是我前面强调的,可却说错了的事情:时间是应该是本地拨号上网的时间,不应该是服务器返回过来的。因为,这个通信过程中,客户端先发了一个包含时间的数据包给服务器的~如果没记错的话。
       2、24小时不停的对所有的ip地址发UDP数据包,只要他一拨号,就能收到我发出的恶意数据包,然后打开我的网站。那,时间呢?怎么控制?这样吧,每秒钟生成一个数据包,然后把它广播出去。这样子就可以绕过时间限制,以及解决被动发送数据包的问题了。
       当然,你还可以想象,在路由器上截获(其实,以前在一家公司做流量探针就是这原理,过一遍所有要传输出去的流量,然后,把需要的信息记录下来),所有发送出去的数据包,然后对应其中的时间,构造数据包返回~

       不过,除了第二条有可行性外,其余所有的都是yy的。前提是拿到路由器的控制权。
       那,就来实现第二条的功能吧:
       也就是在上一章实现的基础上添加一个时间触发功能,如下:

int time_tri()  //时间触发,在这个函数里面调用其他函数
{
	unsigned long dwStart;
	unsigned long dwEnd;
	int iCount=0;
	do  
	{
		dwStart = GetTickCount();
		do
		{
			dwEnd = GetTickCount()-dwStart;
		}while(dwEnd <1000);
		iCount++;
		printf("这是第%d次执行\n",iCount);
		for (INT i=0;i<500;i++)
		{
			msg_in[i]=message[i];
		}
		memset(msg_in, 0, sizeof(msg_in));		//清空msg_in[500]
	}while(1);
	return 0;
}

       而后就是UDP数据包的发送了,如下:
void SendtoMsg(char *mmsg,int N)     //UDP数据包发送模块,将上面生成的构造好了的数据包发送出去
{
	SOCKET fd;
	int len,i = 0,j = 0;
	unsigned int a = 0;
	char szTmp[32] = {0};
	WSADATA        wsd;	
	if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
	{
		printf("WSAStartup failed!\n");
		return;
	}
	struct sockaddr_in servaddr;
	struct _msg
	{
		char a[500];
	}message;
#define NIPQUAD_FMT  "%u.%u.%u.%u"
#define NIPQUAD(addr) \
	((unsigned char *)&addr)[0], \
	((unsigned char *)&addr)[1], \
	((unsigned char *)&addr)[2], \
	((unsigned char *)&addr)[3]

	char *sz_start_addr;
	char *sz_end_addr;
	sz_start_addr = buff1;
	sz_end_addr = buff2;
	unsigned int a1 = inet_addr(sz_ip_addr);
	i = 0;
	while(i != N)
	{
		message.a[i] = mmsg[i];
		i++;
	}
	
	len = sizeof(servaddr);
	if((fd = socket(AF_INET,SOCK_DGRAM,0)) < 0)
	{
		perror("fail to create socket");
		return ;
	}

	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(atoi("4999"));
	a = htonl(a1);
	_snprintf(szTmp, sizeof(szTmp)-1,NIPQUAD_FMT, NIPQUAD(a));
	servaddr.sin_addr.s_addr = inet_addr(szTmp);

	sendto(fd,(const char*)&message,lent,0,(struct sockaddr *)&servaddr,len);

	closesocket(fd);		//关闭套接字	  
	WSACleanup();		//释放套接字资源
	return ;
}


       也就是说,我们每隔一秒钟,对整个网络广播一个数据包出去,从而来解决时间限制。

       之后试了下,发现,对整个网络广播数据包还是可行的,我们寝室的几个哥们都成功的弹出了我的信息,不过呢,我再跑到别的寝室去试试,发现~不可行了~

       那,问题在哪?

       还是前面在搭建pppoe服务器的时候的问题,广播数据是不能穿过路由器的,所以~我得改变方案啊,既然它不让广播,那我就模拟广播吧。如果能够拿下路由器,可以在其中找到自己接入的端口,开放广播功能。
      
       在上面的发送代码中,加上一个ip地址段,也即是,循环对这个ip地址段发送数据包。每秒发送一次,这个貌似能够实现对特定的ip打开我的网页,不过,效率太低,ip段过大的话,很容易造成网卡吃不消,丢包等等现象,而且,只要网管一分析,你的ip一直在对外发送数据包,也就很容易找到你了。

       文章写道这,也就算完了,我也没再继续往里钻了,1是感觉没什么可以再去探究了,2是时间不够我毕业了。

       so,还差一篇总结~
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 19
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
沙发我的
2013-11-20 12:30
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
顶一个。。
2013-11-20 13:03
0
雪    币: 53
活跃值: (528)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
lz,改进一下。。死循环cpu占用有点高

用 CreateWaitableTimer、 WaitForSingleObject 吧。。
2013-11-20 13:48
0
雪    币: 329
活跃值: (230)
能力值: ( LV13,RANK:320 )
在线值:
发帖
回帖
粉丝
5
所言及是啊~~~
2013-11-20 18:42
0
雪    币: 554
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
严重支持!
2013-11-20 19:19
0
雪    币: 60
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
表示我们学校客户端低级的多,
只要拨号成功就一直待命的.
只要发来的包符合要求且源IP是服务器IP源端口是61440那么就执行命令.
所以我这边是随时可以让每个IP弹网页..
但是数据包第3,4位是随即的,每次拨号后服务端和客户端确认的一个short,或者说dword,...
所以每个IP得发65535个包.大约1个IP 3秒发完,只弹一个网页.
不知道楼主能不能帮我解决这个3,4位的问题....
但其他指令都没有这2位.直接执行.当然还是判断包的源IP
幸亏有万能的sockraw.
.
2013-11-20 21:14
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
可以弄个chm了。。
2013-11-20 21:32
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
哈哈,这玩意当ddos不错。
2013-11-21 08:42
0
游客
登录 | 注册 方可回帖
返回
//