讚賞碼 & 聯繫方式 & 個人閒話
【實驗名稱】信息蒐集與主機發現
【實驗目的】
1.瞭解信息蒐集的一般步驟;
2.學會熟練使用ping命令,學會利用Nmap等工具進行信息蒐集;
3.瞭解IP助手函數,掌握SendARP函數的使用方法;
4.理解利用ARP協議實現主機發現的原理
【實驗原理】
ping命令探測技巧:使用ping可以測試目標主機名稱和IP地址,驗證與遠程主機的連通性,通過將ICMP回顯請求數據包發送到目標主機,並監聽來自目標主機的回顯應答數據包來驗證與一臺或多臺遠程主機的連通性,該命令只有在安裝了TCP/IP協議後纔可以使用。
nmap是一個網絡探測和安全掃描程序,系統管理者和個人可以使用這個軟件掃描大型的網絡,獲取哪臺主機正在運行以及提供什麼服務等信息。nmap支持很多掃描技術,例如:UDP、TCP connect()、TCP SYN(半開掃描)、ftp代理(bounce攻擊)、反向標誌、ICMP、FIN、ACK掃描、聖誕樹(Xmas Tree)、SYN掃描和null掃描。nmap還提供了一些高級的特徵,例如:通過TCP/IP協議棧特徵探測操作系統類型,祕密掃描,動態延時和重傳計算,並行掃描,通過並行ping掃描探測關閉的主機,誘餌掃描,避開端口過濾檢測,直接RPC掃描(無須端口映射),碎片掃描,以及靈活的目標和端口設定。
主機發現:任何網絡探測任務的最初幾個步驟之一就是把一組IP範圍(有時該範圍是巨大的)縮小爲一列活動的或者你所感興趣的主機。掃描每個IP的每個端口很慢,通常也沒必要。當然,什麼樣的主機令你感興趣主要依賴於掃描的目的。網絡管理員也許只對運行特定服務的主機感興趣,而從事安全的人士則可能對每一個細節都感興趣。一個系統管理員也許僅僅使用Ping來定位內網上的主機,而一個外部入侵測試人員則可能絞盡腦汁用各種方法試圖突破防火牆的封鎖。
利用ARP協議實現主機發現的過程如圖1-2-1所示。
圖1-2-2所示爲ARP請求與應答情況。
【實驗內容】
信息蒐集
1.ping探測
主機A開啓命令行,對主機B進行ping探測,根據主機B的回覆,可以確定主機A和主機B之間的連通情況,還可以根據回覆數據包的TTL值對操作系統進行猜測。
我們先查看開啓的另一臺Linux虛擬機的IP地址,可以看見其IP地址爲:172.16.0.192.
我們使用WindowsXP系統虛擬機去ping Linux虛擬機
可以看見,回覆數據包的TTL值: 64 ,主機B操作系統可能爲: Linux Kernel 2.6.x 。
2. Nmap掃描
(1)對活動主機進行端口掃描
主機A使用Nmap工具對主機B進行TCP端口同步掃描(範圍1-150):
Nmap命令 nmap –sS –p 1-150 172.16.0.192 ;
主機B開放的TCP端口 21,22,23,25,80,88,139 。
對主機B進行UDP端口掃描(範圍是110-140):
Nmap命令 nmap –sU –p 110-140 172.16.0.192 ;
主機B開放的UDP端口 111,123,137,138 。
(2)對活動主機操作系統進行探測
主機A對主機B進行TCP/IP指紋特徵掃描:
Nmap命令 nmap –sT –O 172.16.0.192 ;
查看掃描結果 Linux 2.6.15-2.6.26 。
(3)對活動主機運行服務進行探測
單擊平臺工具欄“協議分析器”按鈕,啓動協議分析器進行數據包捕獲。打開IE在地址欄中輸入http://主機B的IP,訪問主機B的web服務,停止協議分析器,查看捕獲結果。
打開IE在地址欄中輸入http://172.16.0.192
打開IE在地址欄中輸入ftp://172.16.0.192
HTTP會話分析可判斷目標主機web服務使用的軟件類型是 Apache/2.2.0 (Fedora) 。請探測目標主機FTP服務使用的軟件類型是 vsFTPd 2.0.4 。
(4)對活動主機IP協議進行探測
主機A使用Nmap命令對主機B進行IP協議探測:
Nmap命令 nmap -sO 172.16.0.192 ;
查看掃描結果 icmp協議、esp協議、ah協議 。
3. 探測總結
根據上述實驗所得結果,填寫表1-1-1。
表1-1-1 探測結果
目標主機IP |
目標主機MAC |
目標主機開放端口 |
目標主機操作系統 |
172.16.0.192 |
00:0C:29:01:D1:7B |
TCP:21,22,23, 25,80,88,139 UDP:111,123, 137,138 |
Linux Kernel 2.6.x |
目標主機開放服務 |
目標主機服務軟件 |
服務軟件版本 |
主機支持的IP協議 |
HTTP FTP |
APACHE vsFTP |
APACHE2.2.0 VSFTP2.0.4 |
ICMP ESP AH |
思考題:137/UDP端口提供的是什麼服務?Linux系統是否提供此服務?
137/UDP端口主要用於“NetBIOS Name Service”(NetBIOS名稱服務),使用者只需要向局域網或互聯網上的某臺計算機的137端口發送一個請求,就可以獲取該計算機的名稱、註冊用戶名,以及是否安裝主域控制器、IIS是否正在運行等信息。Linux系統也能提供此服務。
密碼心理學攻擊
SendArp應用示例
Windows提供了幫助函數SendARP來發送ARP請求,獲取與IP地址對應的物理地址。平臺目錄D:\ExpNIC\NetAD\Projects\HostScan\SendArpEx\中提供了SendArp應用實例,它能夠實現列出LAN中IP地址對應的MAC地址。
在控制檯中執行SendArpEx.exe,執行結果如下所示:
主機發現程序開發
我們設計一個簡單的Arp主機發現程序,它可以發現當前LAN中的所有活動主機,爲了減少開發量,我們固定本地主機的網絡掩碼爲255.255.255.0。開發流程如圖1-2-3所示。
這裏分析一下加入的幾條主要語句的作用;
WSAStartup(MAKEWORD(2, 2), &wsaData);// 調用WSAStartup函數,加載Winsock庫(版本2.2)
gethostname(host_name, sizeof(host_name);//獲取主機名,放入gethostname
exit(EXIT_FAILURE);//執行失敗,退出
hp = gethostbyname(host_name);//返回對應於給定主機名的hostent結構的指針
saShow.S_un.S_addr = htonl(ulLocalNet + n);//從網段第一個開始往後遍歷,注意此處的htonl
::SendARP(saShow.S_un.S_addr, 0, (ULONG*)arDestMac, &ulLen)// 發送ARP請求
下面是完整代碼:
#include <windows.h>
#include <stdio.h>
#include <iphlpapi.h>
#include <iostream>
using namespace std;
#pragma comment (lib, "ws2_32.lib" )
#pragma comment (lib, "Iphlpapi.lib" )
int main()
{
WSADATA wsaData;
in_addr sa;
int nErr = 0;
ULONG ulLocaIP = 0;
ULONG ulLocalNet = 0;
HRESULT hr = 0;
WSAStartup(MAKEWORD(2, 2), &wsaData);
//! 獲取本地主機名稱
char host_name[256];
if (gethostname(host_name, sizeof(host_name)) < 0)
{
exit(EXIT_FAILURE);
}
//! 獲取本地主機信息
hostent *hp;
hp = gethostbyname(host_name);
if (hp != NULL)
{
memcpy(&sa, hp->h_addr_list[0], hp->h_length);
ulLocaIP = htonl(sa.s_addr);
// 計算網絡地址
ulLocalNet = ulLocaIP & 0xffffff00;
// 遍歷本地網絡IP地址1-254
for (int n = 1; n < 255; ++n)
{
u_char arDestMac[6];
ULONG ulLen = 6;
in_addr saShow;
//發送ARP請求
saShow.S_un.S_addr = htonl(ulLocalNet + n);
if (::SendARP(saShow.S_un.S_addr, 0, (ULONG*)arDestMac, &ulLen) == NO_ERROR)
{
// 顯示結果
printf("\nHost IP: %s 處於活動中", inet_ntoa(saShow));
}
else
{
printf("\nHost IP: %s 未活動", inet_ntoa(saShow));
}
}
}
else
{
exit(EXIT_FAILURE);
}
WSACleanup();
return 0;
}
2.HostDiscover發現主機
(1)啓動協議分析器,,按要求完成過濾器設置,開始捕獲數據包。
(2)執行HostDiscover.exe。
程序結果顯示在172.16.0網段上找到了7個活動主機,我們可以使用nmap命令驗證。
看以看出,此時該網段上確實有7個活動主機,說明我們實驗成功。
(3)待HostDiscover發現同組主機後,協議分析器停止捕獲。觀察本機與活動主機間的ARP會話過程圖。
停止協議分析器,可以看到ARP會話過程圖,本主機發給目的主機一個ARP請求報文,目的主機返回一個應答。
思考題:利用ARP協議探測網絡中的活動主機的優、缺點是什麼?
優點:即使對方屏蔽了ICMP也能進行探測
缺點:耗費網絡流量、只能探測以太網內的活動主機
【小結或討論】
這次的信息搜索和上次實驗差別就很大了。是要是學習ping命令和nmap命令。用TTL分辨目的操作系統其實是在上學期的網絡原理實驗中學到的,沒想到這次就派上了用場。TTL字段值是255 時系統爲Unix及類Unix;128時系統爲Windows NT/2K/03;32時系統爲Windows 95/98/ME;64時系統爲Linux Kernel 2.6.x0。nmap命令是這次實驗新學到的,它擁有很多的功能和可選項,通過幾個實驗的例題,學會了掃描端口、查詢系統、查詢軟件和IP協議等命令,感覺很方便用處也很大。
主機發現實驗裏的編程其實是這次實驗的難點了。因爲有Socket編程的基礎,所以看到題目倒也不是很陌生。WSAStartup、WSACleanup都是常用的,就是要學習一下gethostname、gethostbyname、SendARP這幾個函數的接口和用法。我覺得最難的就是這一句了:saShow.S_un.S_addr = htonl(ulLocalNet + n);in_addr結構體以前見過,但是ulLocalNet用來幹嘛一開始還真是沒想到,然後發現這裏進行與操作後放的是網段號,那麼ulLocalNet + n就是遍歷該網段所有主機,htonl用來把主機數轉換成無符號長整型的網絡字節順序,這也很重要。在輸出的時候需要使用inet_ntoa返回點分十進制的字符串。