Day 6 情报收集 - Information Gathering (Live Host Identification)

来到第六天Live host identificaction的环节,主轴在於活的主机,也就是在开机状态,处於活动中的主机侦测,那废话不多说,直接开始今天的主题,但在开始工具介绍之前,可能需要先大概说明一下IP位址以及实体位址的关系。

  • IP位址 (IP Address)
    就是先前文章常提及的像是192.168.1.1(IPv4)这样组成方式用来表示在网路上的虚拟地址,但IP位址是服务商给你的,或是处於私有网路下私有IP
  • 实体位址 (MAC Address / Physical Address)
    MAC地址的通常表示为12个16进位数,每两个之间用冒号隔开,像是08:00:27:0e:34:8d就是一个MAC地址,其中前6位08:00:27代表硬体制造商的编号,由IEEE电气与电子工程师协会分配,可以藉由OUI来查询到。另外每张网卡的MAC地址是唯一的。

而IP跟MAC之间的关系不是绑定的,可以想像一下当家里的电脑坏掉或是换了张网卡,这时候就使得MAC不一样,但依然能够使用原本电信服务商分配的IP来上网。之所以要提到MAC,也是因为这环节是要收集Live host的资讯,需要透过MAC来判断是否是同一目标主机。

而提到IP与MAC之间的关系,就不得不提到ARP了,ARP是利用乙太网路的广播功能所设计出来的位址解析协定,它的主要特性是它的位址对应关系是动态的,以查询的方式来获得IP与MAC之间的对应关系。

工具介绍

  1. arping
    光看名字就想到arp + ping,後者在先前文章就提过了,所以先讲讲arp,前言有提到ARP本身是一个协定,但Linux也有个同名arp的命令工具,其作用就是检视目前arp cache里IP跟MAC关系的纪录。

观察当前cache

arp -a

删除cache里指定host的纪录

arp -d 192.168.1.1

删除後如果重新ping该host,就能够重新透过ARP协定再次取得该host的IP与MAC的对应关系,如果透过wireshark抓包工具去观察,甚至能看到ARP询问的过程。

而回到arping,这个指令能够像目标主机发送arp请求,具体使用方式如下,指定网路介面向目标发送请求

arping -I eth0 10.0.2.2

从结果能看到有回覆并且带有目标主机的MAC资讯

ARPING 10.0.2.2
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=0 time=252.753 usec
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=1 time=212.884 usec
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=2 time=431.741 usec

或是透过shell脚本,去找出区网内的主机,要特别注意因为使用了&将arping执行的process以背景执行,所以建议给定-w参数来指定请求的次数,不然arping的预设行为是会不间断的发出请求,脚本就没有结束的时候,而grep是用来筛选我们想看到的内容,因为我关注的只有实际有回覆的主机跟其MAC资讯,而不在意最後ping值的统计,因此只滤出from字串的结果,而最後的wait是用来确认所有背景执行的process都结束。

#!/bin/bash
for ip in 192.168.1.{1..254}; do
  arping -I eth0 -w 1 -f $ip | grep from &
done

wait

执行结果会像

60 bytes from 52:54:00:12:35:01 (192.168.1.1): index=0 time=252.753 usec
60 bytes from 52:54:00:12:35:02 (192.168.1.12): index=0 time=212.884 usec
  1. fping
    开头的f是fast快速的意思,由於他可以一次ping整个网段,使用上方便不少,但由於还是发送ICMP的请求,所以如果目标主机不回应,也不能代表目标主机不在线上。

常用的用法可以是列举式

fping 192.168.1.1 192.168.1.2

或是测试一整个网段

fping -g 192.168.1.0/24

结果会像是

192.168.1.1 is alive
ICMP Host Unreachable from 192.168.1.70 for ICMP Echo sent to 192.168.1.2
192.168.1.2 is unreachable

或是加入其他参数
-a只显示alive结果
-r 0 不retry
-q quiet不显示每次ping的结果
-s 产生最後报表

fping -a -r 0 -q -g 192.168.1.0/24 -s                                                                                                                                1 ⨯
192.168.1.1
192.168.1.70
192.168.1.66

     254 targets
       3 alive
     251 unreachable
       0 unknown addresses

     251 timeouts (waiting for response)
     254 ICMP Echos sent
       3 ICMP Echo Replies received
     128 other ICMP received

 0.683 ms (min round trip time)
 50.2 ms (avg round trip time)
 142 ms (max round trip time)
        4.673 sec (elapsed real time)
  1. hping3
    hping3有点像是终极加强版的ping,因为他除了可以发常见的ICMP封包之外,可以按需求去发送TCP或是UDP的封包。

常用用法-1来发送ICMP封包,同ping的功用

hping3 -1 192.168.1.1  

或是
--traceroute来追踪中间会经过的站点,等同於使用另一个网路工具traceroute
-V开启verbose来看到更多过程资讯

hping3 --traceroute -V -1 www.example.com

追踪的结果

using eth0, addr: 10.0.2.15, MTU: 1500
HPING www.example.com (eth0 93.184.216.34): icmp mode set, 28 headers + 0 data bytes
hop=1 TTL 0 during transit from ip=10.0.2.2 name=UNKNOWN   
hop=1 hoprtt=7.9 ms
hop=2 TTL 0 during transit from ip=192.168.1.1 name=m.home    
hop=2 hoprtt=25.6 ms

针对目标的port从78开始,递增去测3次,所以测试范围就是 78, 79, 80 三个port

hping3 -S www.example.com -p ++78 -c 3                                                           

因为目标这个范围内只有开启80 port,所以只有一个回应

1 ⨯
HPING www.example.com (eth0 93.184.216.34): S set, 40 headers + 0 data bytes
len=46 ip=93.184.216.34 ttl=64 id=1512 sport=80 flags=SA seq=2 win=65535 rtt=263.8 ms

也可以透过-8使用扫描模式

hping3 -8 78-80 -S www.example.com

扫描结果跟上面一样只有80 port有开启

Scanning www.example.com (93.184.216.34), port 78-80
3 ports to scan, use -V to see all the replies
+----+-----------+---------+---+-----+-----+-----+
|port| serv name |  flags  |ttl| id  | win | len |
+----+-----------+---------+---+-----+-----+-----+
   80 http       : .S..A...  64 59909 65535    46
All replies received. Done.
Not responding ports: (78 ) (79 finger) 

hping3实在是太强大了,还有很多进阶功能可以玩,但今天就先探索到这里。

结语

今天体验的工具的用法都满简单暴力的,但背後的原理真的很值得探究,包含了网路七层模型,加上ARP以及ICMP在模型里是以什麽样的流程在不同的层级里发挥他们的作用,感觉都可以再额外延伸好几篇文章来。


<<:  [Day6] 自我必备沟通力:Content & Context

>>:  Day6 PHP变量

Day 6.来建立第一个专案吧

我们先来创建一个资料夹来放我们的档案们吧 首先打开我们的VSCode,一样打开终端机(Ctrl + ...

Python 演算法 Day 3 - 理论基础 微积分

Chap.I 理论基础 Part 2:微积分 1. Rate of Change 速度变化率 imp...

伸缩自如的Flask [day 29] Line Messaging API

只要再撑过这一天,就只要写结语就可以达成30天的目标了。 本来已经快想不到可以写甚麽了,那就来拿Li...

D12 第六周 切版地狱的生存指南

今天时间不太够,纯粹整理 @minw 助教分享的切版教学里面我自己觉得最最重要的部分,其他可能还需要...

[Day16]C# 鸡础观念- 虚拟代工厂~方法(function)

人类的世界有许多的工厂, 将原料送入後就会变成商品, C#的世界里也是, 方法就像一间间的工厂一样,...