导语:重新评估一些操作的执行情况有时会带来新的见解,本博文就是建立在这样的观点上构思的。请注意,本文所述的技术我只在两个“测试”网络上进行了测试,所以我不能保证这种技术永远奏效。最糟糕的情况是,你将阅读的内容是开箱即用的,换句话

重新评估一些操作的执行情况有时会带来新的见解,本博文就是建立在这样的观点上构思的。请注意,本文所述的技术我只在两个“测试”网络上进行了测试,所以我不能保证这种技术永远奏效。最糟糕的情况是,你将阅读的内容是开箱即用的,换句话说,本博问所描述的技术你完全可以直接拿去使用,不过一般会在你无法进行端口扫描的情况下用来替代常规端口扫描的一种方法。脚本的来源可以在我的Git中找到,如果你想跳过我在本身的说明,你完全可以直接查看源代码。

我平时通常会做的一件事就是在网络上嗅探与我的笔记本电脑或下拉设备相连接的网络流量。在这种情况下,ifconfig命令的输出通常如下:

eth0 Link encap:Ethernet HWaddr 00:0c:29:4b:e7:35
 inet6 addr: fe80::20c:29ff:fe4b:e735/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:386316 errors:0 dropped:0 overruns:0 frame:0
 TX packets:25286 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 RX bytes:390745367 (390.7 MB) TX bytes:4178071 (4.1 MB)

从上面的执行结果中,你会注意到接口没有分配IPv4的 IP地址,现在可以忽略IPv6地址。通常我根据以前捕获和分析的流量确定要克隆的IP地址或MAC地址。然后我会对IP地址进行端口扫描或执行其他类型的攻击。

但是这一次,我想知道在没有IP地址的情况下,我可以执行什么类型的攻击活动呢。我的意思是说,IP是与感兴趣的设备通信的一个方式   ,那么你不知何故的看到一个网络响应,却不可追溯,很奇怪,对吧?所以我决定是否可以在网络上执行端口扫描,而不必在我的网络接口上配置IP地址。

通常当你想要使用TCP / IP协议执行一些非标准或奇奇怪怪的技巧时,你必须使用原始套接字,所以我决定直接使用scapy来构建我的POC。工作原理的理论如下:

一般情况下,当我只是嗅探流量时,我能看到发送到广播地址的各种流量,那么如果我们要执行端口扫描,我们如何指定广播地址作为源地址呢?

我决定使用两个设置了 “NAT”网络的虚拟机(ubuntu和Windows 10)进行测试,并且会将网络设置为物理网络桥接时使用这两个相同的虚拟机再进行一次测试。可以使用以下网络参数来传输原始数据包:

pkt = Ether(dst='00:0c:29:f6:a5:65',src='00:08:19:2c:e0:15') / IP(dst='172.16.218.178',src='172.16.218.255') / TCP(dport=445,flags='S')
sendp(pkt,iface='eth0')

 运行tcpdump将会确认上述命令是否生效,说明真相的时刻就要来了:

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
23:27:21.903583 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto TCP (6), length 40)
 172.16.218.255.20 > 172.16.218.178.445: Flags [S], cksum 0x803e (correct), seq 0, win 8192, length 0
23:27:21.904440 IP (tos 0x0, ttl 128, id 31823, offset 0, flags [DF], proto TCP (6), length 44)
 172.16.218.178.445 > 172.16.218.255.20: Flags [S.], cksum 0x03be (correct), seq 3699222724, ack 1, win 65392, options [mss 1460], length 0
23:27:24.910050 IP (tos 0x0, ttl 128, id 31824, offset 0, flags [DF], proto TCP (6), length 44)
 172.16.218.178.445 > 172.16.218.255.20: Flags [S.], cksum 0x03be (correct), seq 3699222724, ack 1, win 65392, options [mss 1460], length 0
23:27:30.911092 IP (tos 0x0, ttl 128, id 31825, offset 0, flags [DF], proto TCP (6), length 44)
 172.16.218.178.445 > 172.16.218.255.20: Flags [S.], cksum 0x03be (correct), seq 3699222724, ack 1, win 65392, options [mss 1460], length 0
23:27:42.911498 IP (tos 0x0, ttl 128, id 31829, offset 0, flags [DF], proto TCP (6), length 40)
 172.16.218.178.445 > 172.16.218.255.20: Flags [R], cksum 0x1af8 (correct), seq 3699222725, win 0, length 0

wOOOOOOOt!看起来似乎有效啊!我们可以清楚地看到从广播(.255)源地址发送到“.178”IP地址的数据包,然后我们看到响应数据又流回了广播地址。

现在这看起来是不是很有趣?基本上,我们现在就可以在网络上进行不可追踪的端口扫描了。不知何故,这仍然感觉很“奇怪”,因为它只是第一次尝试…所以仍然认为我可能误解了一些东西:

sudo ./ipless-scan.py 172.16.218.178 00:0c:29:f6:a5:65 -p 445 3389 5000 -i eth0
2017-10-26 23:13:33,559 - INFO - Started ipless port scan
2017-10-26 23:13:33,559 - INFO - Started sniffer and waiting 10s
2017-10-26 23:13:43,568 - INFO - Starting port scan
2017-10-26 23:13:43,604 - INFO - Found open port - 445
2017-10-26 23:13:43,628 - INFO - Found open port - 3389
2017-10-26 23:13:43,645 - INFO - Found closed port - 5000
2017-10-26 23:13:43,654 - INFO - Finished port scan, waiting 5s for packets
2017-10-26 23:13:52,626 - INFO - Stopped sniffer
源链接

Hacking more

...