我正在为我的作业创建虚假的DNS响应。
我能够在DNS服务器的实际响应之前成功发送欺骗性响应(通过数据包捕获验证)
DNS响应的数据包捕获:
=======================================================================
MY FAKE DNS RESPONSE
--------------------
Wed Apr 20 22:04:25 2016 Ether-type: IP (0x0800)
Source MAC Address: 00:0c:29:b6:95:c8 Destination MAC Address: 00:0c:29:0f:e9:96
Source IP Address: 192.168.88.132 Destination IP Address: 192.168.88.131
UDP packet Source Port: 53 Destn Port: 37837 UDP Length = 46
============
UDP PAYLOAD:
============
2d 97 81 80 00 01 00 01 00 00 00 00 02 69 6e -............in
05 79 61 68 6f 6f 03 63 6f 6d 00 00 01 00 01 .yahoo.com.....
c0 0c 00 01 00 01 00 00 02 58 00 04 9b 21 11 .........X...!.
44 D........X...!.
=======================================================================
ACTUAL DNS RESPONSE
-------------------
Wed Apr 20 22:04:25 2016 Ether-type: IP (0x0800)
Source MAC Address: 00:50:56:e9:cd:36 Destination MAC Address: 00:0c:29:0f:e9:96
Source IP Address: 192.168.88.2 Destination IP Address: 192.168.88.131
UDP packet Source Port: 53 Destn Port: 37837 UDP Length = 89
============
UDP PAYLOAD:
============
2d 97 81 80 00 01 00 03 00 00 00 00 02 69 6e -............in
05 79 61 68 6f 6f 03 63 6f 6d 00 00 01 00 01 .yahoo.com.....
c0 0c 00 05 00 01 00 00 00 05 00 0f 06 66 64 .............fd
2d 66 70 32 03 77 67 31 01 62 c0 0f c0 2a 00 -fp2.wg1.b...*.
01 00 01 00 00 00 05 00 04 62 8b b7 18 c0 2a .........b....*
00 01 00 01 00 00 00 05 00 04 62 8b b4 95 ..........b...*
=======================================================================
正如您所看到的,我的假响应是在实际DNS响应之前到达的。 但由于某种原因,DNS客户端总是接受后来的(真正的)响应。
问题:
调试输出来自Ubuntu 14.04
我真的坚持这个问题3天了,我无法弄清楚原因。任何帮助表示赞赏:)
答案 0 :(得分:1)
为了使您的假DNS响应正常工作,首先:UDP目标端口,DNS事务ID和请求的域名必须与客户端请求匹配。我假设你已经做好了。
但是,如Stian所述,DNS响应源IP地址必须与合法的DNS服务器IP地址匹配;如果没有,它将被客户端删除。 (AFAIK,源MAC地址不需要匹配。)
为了自己设置源IP地址,您需要创建RAW IP套接字而不是UDP套接字,并使用RAW IP数据包伪造完整的UDP数据包(假DNS响应)。您可以找到here代码段来创建这样的RAW IP套接字并从RAW伪造UDP数据包(包括UDP校验和)。
答案 1 :(得分:0)
所有套接字连接都有4个参数来识别它们。源IP,源端口,目的IP和目的端口。
在上面的示例中,虚假DNS UDP响应的源IP不正确,因此数据包永远不会到达套接字。如果源IP正确,则可能会阻止不匹配的MAC地址,因为它与ARP表(rpfilter)不匹配。