二層發(fā)現(xiàn)


title: 二層發(fā)現(xiàn)
date: 2016-04-10 10:45
tags: kali滲透測(cè)試 主動(dòng)信息收集


0x00 瑣碎

從上一章節(jié),我們可以收集到大量的被動(dòng)信息,但是因被動(dòng)而收集的信息,并不與目標(biāo)系統(tǒng)進(jìn)行直接交互,所以很有可能所收集的并不是最新的信息,所以現(xiàn)在我們開(kāi)始進(jìn)行主動(dòng)信息收集!

毫無(wú)疑問(wèn),主動(dòng)信息收集,終極目標(biāo)不過(guò)是為了獲得目標(biāo)大大量信息,比如高層管理賬號(hào)密碼,核心數(shù)據(jù)庫(kù),系統(tǒng)root權(quán)限,也因此我們不可避免的需要與目標(biāo)主機(jī)進(jìn)行直接接觸而留下訪問(wèn)痕跡,為了避免留下痕跡,我們有必要使用受控的第三方電腦進(jìn)行探測(cè),并且做好被封殺的準(zhǔn)備,或者我們可以使用噪音迷惑目標(biāo),淹沒(méi)真實(shí)的探測(cè)流量。這些所有的主動(dòng)信息收集過(guò)程我們稱之為掃描!

過(guò)程是這樣的,首先對(duì)目標(biāo)進(jìn)行IP層掃描,再對(duì)其進(jìn)行端口掃描,然后是應(yīng)用層的掃描,就是對(duì)其進(jìn)行各種網(wǎng)絡(luò)層面的掃描,根據(jù)發(fā)送不同探測(cè)返回的結(jié)果判斷目標(biāo)狀態(tài)!

0x01 第一階段 發(fā)現(xiàn)


  • 一層發(fā)現(xiàn) IP層
    一層發(fā)現(xiàn)階段的目的是為了識(shí)別網(wǎng)絡(luò)里活著的主機(jī),這些主機(jī)就會(huì)成為我們后續(xù)潛在的攻擊目標(biāo),整理出一個(gè)IP地址列表!

  • 二層發(fā)現(xiàn) 基于數(shù)據(jù)鏈路層
    二層發(fā)現(xiàn)是基于數(shù)據(jù)鏈路層的,主要根據(jù)其arp協(xié)議,其有優(yōu)點(diǎn)是掃描速度 ,探測(cè)出來(lái)的結(jié)果也非常可靠,缺點(diǎn)是不可路由,它只能發(fā)現(xiàn)本網(wǎng)段之內(nèi)的主機(jī),若是需要夸網(wǎng)段,進(jìn)行下一跳的話是不可以的,因?yàn)槁酚善鞑⒉粫?huì)轉(zhuǎn)發(fā)arp協(xié)議包

0x02 基于二層發(fā)現(xiàn)的工具


arping 發(fā)現(xiàn)網(wǎng)卡所在網(wǎng)段的IP


  • 參數(shù):airping ip -c <數(shù)字> 限定發(fā)送的探測(cè)包的數(shù)量
root@jack:~# arping 192.168.0.109 -c 2
ARPING 192.168.0.109
Timeout
Timeout
--- 192.168.0.109 statistics ---
2 packets transmitted, 0 packets received, 100% unanswered (0 extra)
  • __參數(shù):arping ip -d __其作用是發(fā)現(xiàn)重復(fù)的相應(yīng),即是發(fā)現(xiàn)不同的mac地址擁有同一個(gè)IP,就是說(shuō)明這是一個(gè)arp地址欺騙了!
    下面來(lái)嘗試抓取本機(jī)網(wǎng)卡下的ip:

  • 使用grep管道對(duì)信息進(jìn)行過(guò)濾
    首先抓取一個(gè)包,分析其特征信息

root@jack:~# arping 192.168.0.110 -c 2 -d
ARPING 192.168.0.110
60 bytes from 20:6a:8a:02:bf:19 (192.168.0.110): index=0 time=6.563 msec
60 bytes from 20:6a:8a:02:bf:19 (192.168.0.110): index=1 time=1.518 msec
--- 192.168.0.110 statistics ---
2 packets transmitted, 2 packets received,   0% unanswered (0 extra)
rtt min/avg/max/std-dev = 1.518/4.040/6.563/2.522 ms

如上可知得到的返回信息中還包含了統(tǒng)計(jì)信息,使用grep篩選出我們想要的"bytes from"字段:

root@jack:~# arping 192.168.0.110 -c 2 | grep "bytes from"
60 bytes from 20:6a:8a:02:bf:19 (192.168.0.110): index=0 time=10.246 msec
60 bytes from 20:6a:8a:02:bf:19 (192.168.0.110): index=1 time=5.159 msec

在進(jìn)一步篩選,只顯示第五行IP字段信息:

root@jack:~# arping 192.168.0.110 -c 2 | grep "bytes from" | cut -d " "  -f 5
{cut -d " "忽略空格;-f 5意思是顯示第五個(gè)字段的信息}
(192.168.0.110):
(192.168.0.110):

最后除去括號(hào)和冒號(hào):

root@jack:~# arping 192.168.0.110 -c 2 | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1
192.168.0.110
192.168.0.110
  • 但是arping只能一個(gè)一個(gè)的取ping并不能進(jìn)行大量同時(shí)的ping,所以這便需要腳本來(lái)完成了!
    腳本代碼如下:
#!/bin/bash
#===============================================================================
#
#          FILE: arping1.sh
# 
#         USAGE: ./arping1.sh 
# 
#   DESCRIPTION: 通過(guò)arping實(shí)現(xiàn)對(duì)整個(gè)網(wǎng)段或者網(wǎng)卡下連接的一個(gè)網(wǎng)絡(luò)存活ip的掃描
# 
#       OPTIONS: ---
#  REQUIREMENTS: ---
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: onejustone
#  ORGANIZATION: 
#       CREATED: 2016年04月29日 15:47
#      REVISION:  ---
#===============================================================================
if [ "$#" -ne 1 ]; then
#腳本攜帶的參數(shù)數(shù)量只能為1個(gè)參數(shù)
   echo "usage ../arping.sh [interface]"
   echo "Example ../arping.sh etho"
   echo "Example wil perfors an arp scanf of the local subnet to which eth0 is assigned"
fi
interface=$1
#獲得第一參數(shù)
prefix=$(ifconfig $interface | grep 'inet addr'| cut -d":" -f 2 | cut -d' ' -f 1 | cut -d"." -f 1-3)
for addr in $(seq 1 254);do
   arping -c 1 $prefix.$addr | grep "bytes from" | cut -d" " -f 5 | cut -d"(" -f 2 | cut -d")" -f 1 >>addr.txt
done

運(yùn)行腳本:

root@jack:~/scripts# sh arping1.sh  eth0 &
root@jack:~/scripts# cat addr.txt 
192.168.0.1
192.168.0.101
192.168.0.102
192.168.0.103
192.168.0.110
192.168.0.113

我們獲得了6個(gè)相同局域網(wǎng)下活著的IP,但是多段時(shí)間以后我們?nèi)绻獙?duì)這些ip重新進(jìn)行檢查是否依舊存活?

#!/bin/bash - 
#===============================================================================
#
#          FILE: arping2.sh
# 
#         USAGE: ./arping2.sh 
# 
#   DESCRIPTION: 定期對(duì)已收集到的IP進(jìn)行存活檢查
# 
#       OPTIONS: ---
#  REQUIREMENTS: ---
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: YOUR NAME (), 
#  ORGANIZATION: 
#       CREATED: 2016年04月29日 17:06
#      REVISION:  ---
#===============================================================================
if [ "$#" -ne 1 ]; then
    echo "usage ../arping.sh [interface]"
    echo "Example ../arping.sh etho"
    echo "Example wil perfors an arp scanf of the local subnet to which eth0 is assigned"
fi
file=$1
for addr in $(cat $file); do
    arping -c 1 $addr | grep "bytes from" | cut -d" " -f 5 | cut -d"(" -f 2 | cut -d")" -f 1
done

運(yùn)行腳本arping2.sh

root@jack:~/scripts# sh arping2.sh addr.txt
192.168.0.1
192.168.0.101
192.168.0.102
192.168.0.103
192.168.0.110
192.168.0.113
[1]+  已完成               sh arping1.sh eth0

nmap 神器


nmap是一個(gè)超級(jí)強(qiáng)大的工具,但是在這里我們不會(huì)細(xì)說(shuō),而只是基于nmap對(duì)于二層發(fā)現(xiàn)的作用,后面我們會(huì)單獨(dú)介紹

  • 參數(shù):nmap -sn

    不對(duì)端口進(jìn)行掃描,只是二層發(fā)現(xiàn),尋找存活I(lǐng)P

root@jack:~/scripts# nmap -sn 192.168.0.*
Starting Nmap 7.01 ( https://nmap.org ) at 2016-04-29 17:35 CST
Nmap scan report for 192.168.0.1
Host is up (0.00069s latency).
MAC Address: C8:3A:35:4E:4B:B0 (Tenda Technology)
Nmap scan report for bogon (192.168.0.102)
Host is up (0.52s latency).
MAC Address: F8:A4:5F:14:74:FB (Xiaomi Communications)
Nmap scan report for 192.168.0.103
Host is up (0.52s latency).
MAC Address: DC:6D:CD:D1:E4:FA (Guangdong Oppo Mobile Telecommunications)
Nmap scan report for bogon (192.168.0.110)
Host is up (0.00025s latency).
MAC Address: 20:6A:8A:02:BF:19 (Wistron InfoComm Manufacturing(Kunshan)Co.)
Nmap scan report for 192.168.0.113
Host is up (0.00026s latency).
MAC Address: 5C:F9:DD:6A:02:61 (Dell)
Nmap scan report for 192.168.0.109
Host is up.
Nmap done: 256 IP addresses (6 hosts up) scanned in 2.71 seconds

  我可以發(fā)現(xiàn)nmap的掃描速度明顯快于arping,執(zhí)行時(shí)間為5秒,并且掃描出來(lái)的的信息比arping詳細(xì)很多!

   同樣nmap也可以從文件中獲得ip地址段并對(duì)其進(jìn)行掃描探測(cè)

root@jack:~/scripts# nmap -iL addr.txt -sn
Nmap done: 7 IP addresses (7 hosts up) scanned in 0.43
seconds

運(yùn)行時(shí)間縮短到了0.43秒!

#### Netdiscover 

----

Netdiscover可用于主動(dòng)發(fā)現(xiàn)和被動(dòng)發(fā)現(xiàn),同樣它采用arp協(xié)議,通過(guò)向目標(biāo)發(fā)送arp包是否響應(yīng)來(lái)判斷目標(biāo)是否存活,當(dāng)然主動(dòng)探測(cè)很有可能會(huì)觸發(fā)目標(biāo)的反偵查系統(tǒng)(如果目標(biāo)有的話),所以Netdiscover也支持被動(dòng)發(fā)送,Netdiscover對(duì)網(wǎng)卡啟用混雜模式,收取非本網(wǎng)卡IP地址和非本網(wǎng)卡MAC地址的數(shù)據(jù)包,并且他的機(jī)制是基于廣播的,Netdiscover會(huì)一直在網(wǎng)絡(luò)中默默偵聽(tīng)著,等待截取目標(biāo)發(fā)送的arp!這是一種被動(dòng)的等待,所以比主動(dòng)的探測(cè)或許響應(yīng)稍慢!

* __主動(dòng)探測(cè)__

root@jack:/tmp# netdiscover -i eth0 -r 192.168.0.109/24

-i指定在哪個(gè)網(wǎng)卡上進(jìn)行發(fā)現(xiàn)

-r指定網(wǎng)絡(luò)地址段

Currently scanning: Finished! | Screen View: Unique Hosts

1 Captured ARP Req/Rep packets, from 1 hosts. Total size: 60


IP At MAC Address Count Len MAC Vendor y scanni ----------------------------------------------------------------------------- dress 192.168.0.1 08:aa:45:6e:4b:10 01 060 Unknown vendor


* __被動(dòng)掃描__

-p將網(wǎng)卡配置為混雜模式,將會(huì)抓取非本網(wǎng)卡即整個(gè)網(wǎng)絡(luò)物理空間中所廣播的數(shù)據(jù)包

root@jack:/# netdiscover -p
Currently scanning: (passive) | Screen View: Unique Hosts

0 Captured ARP Req/Rep packets, from 0 hosts. Total size: 0


IP At MAC Address Count Len MAC Vendor


### 0x03 Python Scapy

----

Scapy是Python的一個(gè)庫(kù)文件,可以在腳本里進(jìn)行調(diào)用,主要是為Python處理一些網(wǎng)絡(luò)的處理,可以抓包,以可以單獨(dú)的創(chuàng)建一個(gè)數(shù)據(jù)包,進(jìn)行發(fā)送,也可以對(duì)收集到數(shù)據(jù)包進(jìn)行修改然后重放,向網(wǎng)絡(luò)里注入流量,用Scapy學(xué)習(xí)網(wǎng)絡(luò)協(xié)議也是不錯(cuò)的選擇!

初次使用Scapy需要安裝python-gnuplot的一組件:

root@jack:~# apt-get install python-gnuplot

進(jìn)入Scapy

root@jack:~# scapy
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.2.0)


### 0x04 Python Scapy 腳本實(shí)現(xiàn)arp掃描

----

!/usr/bin/python

import logging
'''導(dǎo)入日志'''
import subprocess
'''實(shí)現(xiàn)一些系統(tǒng)命令的調(diào)用'''
logging.getLogger("scapy.routime").setLevel(logging.ERROR)
from scapy.all import *
'''導(dǎo)入scapy模塊'''

if len(sys.argv)!= 2:
'''如果命令加腳本不等于2,這里不同于bash shell'''
print "Usage .. /arp.display [interface]"
print "Usage .. /arp.display.py eth0"
print "Example will perfors an ARP scanf of the local subnet to which etho is assigned"
sys.exit()

interface = str(sys.argv[1])
ip = subprocess.check_output("ifconfig "+interface +" | grep 'inet addr'| cut -d':' -f 2 | cut -d' ' -f 1", shell=True).strip()
prefix = ip.split('.')[0]+'.'+ip.split('.')[1]+'.'+ip.split('.')[2]+'.'

for addr in range(0, 254):
answer = sr1(ARP(pdst=prefix+str(addr)),timeout=0.1,verbose=0)
'''如果不添加timeout參數(shù),那么scapy遇到不存在的p將會(huì)一直發(fā)包,
直到有響應(yīng)為止,所以我們?yōu)槠涮砑觮imeout參數(shù),
超過(guò)1秒沒(méi)響應(yīng)將放棄,verbose=0表示不顯示異常信息=1則會(huì)顯示'''
if answer == None:
pass
else:
print prefix+str(addr)


### 0x05 何時(shí)用到二層發(fā)現(xiàn)
---

一般只有當(dāng)滲透到內(nèi)網(wǎng)以后才會(huì)使用基于二層的探測(cè),一般服務(wù)器不會(huì)安裝nmap,也可能沒(méi)有arping,也有可能沒(méi)有Netdiscover,也有可能運(yùn)行不了Python的腳本,但是一般沒(méi)有可能連以上一個(gè)可能都沒(méi)有,這是不可能的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容