**
arp命令:
**
扫描可以分为对主机层ip的扫描、端口的扫描、服务的扫描。扫描存活主机,得到一个ip地址。扫描存活主机阶段又分为二、三、四层三个层面发现目标主机进而得到ip。这分层指的是网路分层中的七层。
我们进入正题:
1)首先二层发现:
数据连路层发现在七层协议的第二层,他工作的协议是arp协议,arp协议只是个二层协议,不可以过路由,只能发现本网段之内的主机,如果跨网段过路由,arp协议就无法进行探测。路由器会自动过滤arp数据包。他的优点是扫描结果比较可靠而且速度比较快。
所以我们如果拿到了一个网段主机的一个权限,我们可以利用arp二层发现,去发现此内网的其他主机。
二层发现工具arp-ping:
我们打开另一台虚拟机
root@kali:~# arping 192.168.19.130 -c 1 //-c选择发包数量
打开wireshark,我们可以看到目标ip返回的数据包。
我们可以看出第一个包是本机发给130的,但是第二个包是130回发给本机的。
注意:
arping 中还有一个参数,-d 他的作用是发现重复的响应。如果应答是两个不同的mac地址,但是他是同一个ip地址,并且这个ip是网关的ip,那么就有可能是arp欺骗。
arp命令不能ping一个网段,比如不能ping 192.168.12.1-24,这时候我们需要用脚本批量ping一个网段。
**
nmap:
**
namp网络层的扫描工具。
namp +ip地址 会执行端口扫描。
root@kali:~# nmap 192.168.19.1 //端口扫描
如图:
root@kali:~# nmap -sn 192.168.19.1 //--sn制作ping扫描,不做端口扫描
root@kali:~# nmap -sn 192.168.19.1-245 //这样不需要手动写脚本。
root@kali:~# nmap -sn 192.168.19.0/24 //速度也快
如图我们看到了我们扫描到的ip以及对应的ip地址。
nmap -iL 文件名称 -sn //调用地址列表里面的地址。 文件中的ip地址要分行。一行一个。
netdiscover:
使用的是arp协议,可以主动探测也可以被动探测,可以用于无线也可以用于有线。发送一个arp数据包,如果得到回应则可以判断主机存在。
netdiscover可以被动探测,他不主动发arp包,他只是默默侦听,他把网卡制成混杂模式,可以收取非本网卡、非本mac地址的数据包,arp协议本身的通信机制是基于广播的,只要网络里主机发送arp广播包,netdiscover就可以侦听到这个数据。
主动收集:
root@kali:~# netdiscover -i eth0 192.168.1.0/24 //-i参数指定网卡
被动收集:他把网卡置入混杂模式,非本网卡的数据包会被抓取到。
root@kali:~# netdiscover -p
**
scapy
**
scapy是一个python库。他能抓包、分析、创建、注入网络流量。我们在使用scapy的时候可能会出下以下情况:
这说明我们没有安装gnuplot。我们需要执行一下命令:
apt-get install python-gnuplot
ARP(),是库中的一个函数,scapy中的函数都需要大写。
ARP().display() //显示arp函数的具内容,调用arp函数也就是要定制一个arp数据包。arp数据包的头已经定制好了,只需要修改一下内容即可。
与wireshark中的arp包头一致。
>>> arp=ARP()
>>> arp
<ARP |>
>>> arp.display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has
hwsrc= 00:0c:29:40:d7:6d
psrc= 192.168.19.129
hwdst= 00:00:00:00:00:00
pdst= 0.0.0.0
>>> arp.pdst="192.168.1.100" //将要探测的主机的ip赋值给pdst
>>> arp.display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has
hwsrc= 00:0c:29:40:d7:6d
psrc= 192.168.19.129
hwdst= 00:00:00:00:00:00
pdst= 192.168.1.100
>>> sr1(arp) //sr1()发包函数
>>> answer=sr1(arp)
>>> answer.display()
我们看一下反应包:
>>> sr1(arp)
Begin emission:
*Finished to send 1 packets.
Received 1 packets, got 1 answers, remaining 0 packets
<ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=00:0c:29:0b:f2:c0 psrc=192.168.19.131 hwdst=00:0c:29:40:d7:6d pdst=192.168.19.129 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>
>>>
用answer作为变量显示出相应包:
>>> answer=sr1(arp)
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
>>> answer.display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= is-at
hwsrc= 00:0c:29:0b:f2:c0
psrc= 192.168.19.131
hwdst= 00:0c:29:40:d7:6d
pdst= 192.168.19.129
###[ Padding ]### //padding的意思是返回的arp包不满足规定数据包最小的大小,用十六进制来补位。
load= '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>>
我们也可以用scapy来写python脚本。
二层发现:我们渗透测试的时候如果已经控制了一台机器,取得了控制权,现在要对内网进行进一步渗透,以已经渗透的机器为跳板进行进一步的渗透,可以用二层工具发现目标内网有哪些机器。