[原创]http动态注入(链路劫持)
发表于:
2016-3-17 10:50
9003
struct _ethhdr
{
unsigned char h_dest[6]; // [00][01][02][03][04][05] target mac
unsigned char h_source[6]; // [06][07][08][09][10][11] source mac
#define _ETH_P_IP (0x0800)
#define _ETH_P_ARP (0x0806)
unsigned short h_proto; // [12][13]
// payload...
};
struct _arphdr
{
unsigned short ar_hrd; // [00][01] format of hardware address
unsigned short ar_pro; // [02][03] format of protocol address
unsigned char ar_hln; // [04] length of hardware address
unsigned char ar_pln; // [05] length of protocol address
#define _ARP_REPLY (0x0002)
#define _ARP_REQUEST (0x0001)
unsigned short ar_op; // [06][07] ARP opcode (command)
// use char[] against package
unsigned char ar_sha[6];// [08][09][10][11][12][13] sender hardware mac
unsigned char ar_sip[4];// [14][15][16][17] sender IP address
unsigned char ar_tha[6];// [18][19][20][21][22][23] target hardware mac
unsigned char ar_tip[4];// [24][25][26][27] target IP address
};
struct _iphdr
{
#if defined(__LITTLE_ENDIAN_BITFIELD)
unsigned char ihl:4,version:4; // [00] Internet Header Length(ihl)
#elif defined(__BIG_ENDIAN_BITFIELD) // 4bit ip header max length = 0xf*4 = 60 bytes
unsigned char version:4,ihl:4; // [00]
#else
#error "check __LITTLE_ENDIAN_BITFIELD / __BIG_ENDIAN_BITFIELD"
#endif
unsigned char tos; // [01]
unsigned short tot_len; // [02][03] ipheader and payload len
unsigned short id; // [04][05] packet number
unsigned short frag_off; // [06][07]
unsigned char ttl; // [08] time to live
#define _IPPROTO_TCP (0x06)
unsigned char protocol; // [09]
unsigned short check; // [10][11]
unsigned int saddr; // [12][13][14][15] src ip
unsigned int daddr; // [16][17][18][19] dst ip
// The options start here. [20]~[59]
// payload...
};
struct _tcphdr
{
unsigned short source; // [00][01] source port
unsigned short dest; // [02][03] target port
unsigned int seq; // [04][05][06][07] send sequence
unsigned int ack_seq; // [08][09][10][11] ack sequence
#if defined(__LITTLE_ENDIAN_BITFIELD)
unsigned short res1:4,doff:4,fin:1,syn:1,rst:1,psh:1,ack:1,urg:1,ece:1,cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD)
unsigned short doff:4,res1:4,cwr:1,ece:1,urg:1,ack:1,psh:1,rst:1,syn:1,fin:1;
#else
#error "check __LITTLE_ENDIAN_BITFIELD / __BIG_ENDIAN_BITFIELD"
#endif // [12][13] doff tcp hdr len
unsigned short window; // [14][15]
unsigned short check; // [16][17]
unsigned short urg_ptr; // [18][19]
// The options start here. [20]~[59] mss,wsopt,sack-premitted,sack,tspot ...
// payload...
};
[I]本测试代码仅供安全测试以及网络协议学习之用,由本代码所造成的一切后果,本人概不负责 [/I]
本代码初始为简单学习tcp协议之用,实现劫持功能并非最简单方式
代码写作到后期已经如同搬砖,兴趣索然,由于笔者精力以及知识有限,而且项目学习之中略有感悟,此份代码架构并不优美,结束时会简单描述下我想要达成的那种自我感觉更优美的框架结构
本文尽可能的口述化的描述一些问题,可能很多地方并不会使用一些专业化术语,也有可能描述略有偏差,欢迎指出,如果深入学习推荐读者去学习《tcp/ip协议》三卷
最后一点,我说什么东西都挺墨迹的,读的时候别着急哈
client通过发送syn(synchronous 同步)包给server,由于此时并未接收到server发来的数据,所以ack未设置,ack_seq无效。当前发送的seq为本地发送的初始序列号,可理解为随机生成(深入研究还有点规律,此文忽略),携带一些附加选项(同步用附加选项一会细说)
server接收到client发送的syn包后,发送自己的syn包给client,由于client已经传输了数据,所以server要告诉client本地已经收到了,ack字段设置,ack_seq=client发送的seq+1(再次强调网络字序问题),表示我们已经收到ack_seq-client.seq = 1数据(并非syn包携带数据为1字节),顺便生成了当前tcp流的初始seq,携带一些同步用附加选项(tcp全双工)
client收到server的syn&ack包之后,同样发送个ack给server确认已收到,此时tcp连接已建立。
是目前测试代码中的方式,我们通过双向欺骗,告诉客户端我们是服务器/路由器,告诉服务器/路由器我们是客户端。然后流经过我们之后才会传到对方。
是一种dns污染模式,我们单向欺骗服务端/路由器说我们是客户端,所有去往客户端的流量都被劫持,此时我们做单向路由,把正常的数据都继续转发给客户端。然后到dns解析时我们直接将dns应答结果替换成我们的ip地址,这时这个链接就是一个伪造的服务端连接了。中间人通道成功架起。
proxy代理模式,或者说NAT转发模式,这种模式下我们只欺骗客户端说我们是路由器/服务器,客户端的所有流量都在我们的掌控之下,此时我们即是靶机的上层设备了,可以直接模拟路由进行NAT转发操作,也可直接提取链接,然后开启一个服务去正常访问服务器,然后将返回结果再次重新返回给靶机,中途自然你想做什么就做什么了。
通讯一定要加密!最好使用比如openssl这种方式,当然你有精力并且技术足够完全可以自己写,即便不是也最好把关键的地方加密
登录相关一定不要明文传输,最好存储散列摘要,最好自己外面再添加一些别的独有的信息,防止直接从别的社工裤拖散列登陆
收到的数据要校验!自己在自己的数据中插校验散列值,防止被盯上了,一段时间一换方式,不要采用大众都使用的方式
密码一定要不同,即便有很多相同的,也要把重要的几个密码单独设置
不要为了某些原因就去使用不可信的代理服务器,即便使用,记得用隐私模式,不要做登陆相关的操作,防止中间代理服务器嗅探
使用强力防火墙,有些杀毒软件很有意思,默认不开防火墙
公共wifi安全性很低,尽可能不要做任何有关个人重要事情的操作。
自家wifi定期检查,最好设置mac白名单,关wps/qss功能,使用高强度密码,包含各种符号,16位以上
不要使用不可信任的浏览器插件
定期清理缓存,防止缓存投毒
[I]本测试代码仅供安全测试以及网络协议学习之用,由本代码所造成的一切后果,本人概不负责 [/I]
本代码初始为简单学习tcp协议之用,实现劫持功能并非最简单方式
代码写作到后期已经如同搬砖,兴趣索然,由于笔者精力以及知识有限,而且项目学习之中略有感悟,此份代码架构并不优美,结束时会简单描述下我想要达成的那种自我感觉更优美的框架结构
本文尽可能的口述化的描述一些问题,可能很多地方并不会使用一些专业化术语,也有可能描述略有偏差,欢迎指出,如果深入学习推荐读者去学习《tcp/ip协议》三卷
最后一点,我说什么东西都挺墨迹的,读的时候别着急哈
arp攻击
三环路由功能
伪装服务器与客户端
代码残缺,并不一定可运行,仅在本机测试通过
虽采用c写所有核心逻辑,但并未进行移植测试
http流报首长度修正
chunked 编码插入
gzip压缩的数据缓存解压后再进行插入
tcp/ip首部校验,判断是否为坏包
系统 : osx 10.11.3
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
上传的附件: