2009年4月18日 星期六

黑客攻擊前藝朮:搜集目標主机的系統信息

摘自:http://www.anqn.com/article/a/2005-12-17/a0976261.shtml

對操作系統的認識,對于每一個從事計算行業的人都是非常重要,要成為一名黑客更是要對操作系統有深入、深刻的認識。下面就和大家一起來探討一下這方面的問題

  我們先來看分析一下一個黑客入侵的基本過程:1、判斷入侵對象的操作系統—>2、描掃端口,判斷開放了那些服務(這兩步有可能同時進行)—>3、跟据操作系統和所開放的服務選擇入侵方法,通常有"溢出"和"弱口猜測"兩種方法—>4、獲得系統的最高權力—>5、安放后門、清除日志走人(也許有格盤走人的)。

  由上面可以知道,在整個過程當中對操作系統類型的判斷識別是最基本也是很關系的一步。可想而知,如果你連對方的操作系統是什麼都不知道,要想入侵跟本無從談起。

  也許很少人問過自己,我們為什麼要先了解對方的操作系統呢?其實,我們了解操作系統的原因是因為我們要了解系統內存的工作況態,了解它是以什麼方式,基于什麼樣的技朮來控制內存,以及怎麼樣來處理輸入與輸出的數据的。世上任何東西都不可能是盡善盡美的(當然這也是我們人類不斷追求的動力所在),作為復雜的計算机系統更如此,它在控制內存與處理數据的過程中總是有可能出錯的(特別是在安裝了其它的應用程序以后),系統本身也會存在各種各樣的弱點與不足之處。黑客之所以能夠入侵,就是利用了這些弱點與錯誤。現在網上流行的各種各樣的入侵工具,都是黑客在分析了系統的弱點及存在的錯之后編寫出來的。(其中以"緩沖區溢出"最為常見)

  作為一般的黑客,我們只要善于使用現成的入侵工具,就可以達到我們入侵的目的。但是因為不同的系統,其工作原理不一樣,所以不同的入侵工具只能針對相應的操作系統。因此,對操作系統的識別是必不可少的,這就需要我們對操作系統有相當的了解,對網絡有一定的基礎識(要作黑客還是不那麼容易的),關于各類操作系統的介紹,在網上有成堆的文章,大家可以自己去查閱。

  在此介紹一此簡單的操作系統識別方法給大家,希望對大家有用。

  一、用ping來識別操作系統

C:\>ping 10.1.1.2

Pinging 10.1.1.2 with 32 bytes of data:

Reply from 10.1.1.2: bytes=32 time<10ms ttl="128 Reply from 10.1.1.2: bytes=32 time<10ms ttl="128 Reply from 10.1.1.2: bytes=32 time<10ms ttl="128 Reply from 10.1.1.2: bytes=32 time<10ms ttl="128
Ping statistics for 10.1.1.2:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\>
C:\>ping 10.1.1.6

Pinging 10.1.1.6 with 32 bytes of data:

Request timed out.
Reply from 10.1.1.6: bytes=32 time=250ms TTL=237
Reply from 10.1.1.6: bytes=32 time=234ms TTL=237
Reply from 10.1.1.6: bytes=32 time=234ms TTL=237

Ping statistics for 10.1.1.6:
Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),
Approximate round trip times in milli-seconds:
Minimum = 234ms, Maximum = 250ms, Average = 179ms

  我們跟据ICMP報文的TTL的值,我們就可以大概知道主机的類型。如:TTL=125左右的主机應該是windows系列的机子,TTL=235左右的主机應該是UINX系列的机子。如上面的兩個例子,10.1.1.2就是win2000的机子,而10.1.1.6則是UINX(Sunos 5.8)的机子。這是因為不同操作系統的机子對ICMP報文的處理與應答是有所不同的,TTL值每過一個路由器會減1。所以造成了TTL回復值的不同。對于TTL值與操作系統類型的對應,還要靠大家平時多注意觀察和積累。
二、直接通過聯接端口根据其返回的信息

  這種方法應該說是用得最多的一種方法,下面我們來看几個實例。

  1、如果机子開了80端口,我們可以telnet(當然如果有NC最好用NC,它可以不用盲打)它的80端口。
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版權所有 1985-1998 Microsoft Corp.

C:\>telnet 10.1.1.2 80
輸入get 回車(注意這里是盲打)
如果返回,
HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/5.0
Date: Fri, 11 Jul 2003 02:31:55 GMT
Content-Type: text/html
Content-Length: 87

The parameter is incorrect.

遺失對主机的連接。
C:\>
那麼這台就肯定是windows的机子。
如果返回,

Method Not Implemented
get to / not
supported.
Invalid method in request get

Apache/1.3.27 Server at gosiuniversity.com Port 80

遺失對主机的連接。
C:\>
那麼多數就是UINX系統的机子了。

  2、如果机子開了21端口,我們可以直接FTP上去

C:\>ftp 10.1.1.2
如果返回,
Connected to 10.1.1.2.
220 sgyyq-c43s950 Microsoft FTP Service (Version 5.0).
User (10.1.1.2none)):
那麼這就肯定是一台win2000的机子了,我們還可以知道主机名呢,主机名就是sgyyq-c43s950。這個FTP是windows的IIS自帶的一個FTP服務器。
如果返回,
Connected to 10.1.1.3.
220 Serv-U FTP Server v4.0 for WinSock ready...
User (10.1.1.3none)):
也可以肯定它是windows的机子,因為Serv-U FTP是一個專為windows平台開發的FTP服務器。
如果返回,
Connected to 10.1.1.3.
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
User (10.1.1.3none)):
那麼這就是一台UINX的机子了。

  3、如果開了23端口,這個就簡單了,直接telnet上去。

如果返回,
Microsoft (R) Windows (TM) Version 5.00 (Build 2195)
Welcome to Microsoft Telnet Service
Telnet Server Build 5.00.99201.1
login:
那麼這肯定是一台windows的机子了

如果返回,
SunOS 5.8
login:
不用說了,這當然是一台UINX的机子了,並且版本是SunOS 5.8的。
三、利用專門的軟件來識別

  這種有識別操作系統功能的軟件,多數采用的是操作系統協議棧識別技朮。這是因為不同的廠家在編寫自己操作系統時,TCP/IP協議雖然是統一的,但對TCP/IP協議棧是沒有做統一的規定的,廠家可以按自己的要求來編寫TCP/IP協議棧,從而造成了操作系統之間協議棧的不同。因此我們可以通過分析協議棧的不同來區分不同的操作系統,只要建立起協議棧與操作系統對應的數据庫,我們就可以准确的識別操作系統了。目前來說,用這種技朮識別操作系統是最准确,也是最科學的。因此也被稱為識別操作系統的"指紋技朮"。當然識別的能力與准确性,就要看各軟件的數据庫建立情況了。

  下面是簡單介紹兩款有識別功能的軟件。

  1、 著名的nmap,它采用的是主動式探測,探測時會主動向目標系統發送探測包,根据目標目標机回應的數据包來,叛斷對方机的操作系統。用法如下:
F:\nmap>nmap -vv -sS -O 10.1.1.5
Starting nmap V. 3.00
Host IS~123456ADCD (10.1.1.5) appears to be up ... good.
Initiating SYN Stealth Scan against IS~123456ADCD (10.1.1.5)
Adding open port 139/tcp
Adding open port 7070/tcp
Adding open port 554/tcp
Adding open port 23/tcp
Adding open port 1025/tcp
Adding open port 8080/tcp
Adding open port 21/tcp
Adding open port 5050/tcp
Adding open port 9090/tcp
Adding open port 443/tcp
Adding open port 135/tcp
Adding open port 1031/tcp
Adding open port 3372/tcp
Adding open port 25/tcp
Adding open port 1433/tcp
Adding open port 3389/tcp
Adding open port 445/tcp
Adding open port 80/tcp
The SYN Stealth Scan took 1 second to scan 1601 ports.
For OSScan assuming that port 21 is open and port 1 is closed and neither ar
rewalled
Interesting ports on IS~123456ADCD (10.1.1.5):
(The 1583 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
23/tcp open telnet
25/tcp open smtp
80/tcp open http
135/tcp open loc-srv
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
554/tcp open rtsp
1025/tcp open NFS-or-IIS
1031/tcp open iad2
1433/tcp open ms-sql-s
3372/tcp open msdtc
3389/tcp open ms-term-serv
5050/tcp open mmcc
7070/tcp open realserver
8080/tcp open http-proxy
9090/tcp open zeus-admin
Remote operating system guess: Windows 2000/XP/ME
OS Fingerprint:
TSeq(Class=RI%gcd=1%SI=21F8%IPID=I%TS=0)
T1(Resp=Y%DF=Y%W=FAF0%ACK=S++%Flags=AS%Ops=MNWNNT)
T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
T3(Resp=Y%DF=Y%W=FAF0%ACK=S++%Flags=AS%Ops=MNWNNT)
T4(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)
T5(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)
T7(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=)
PU(Resp=Y%DF=N%TOS=0%IPLEN=38%RIPTL=148%RIPCK=E%UCK=E%ULEN=134%DAT=E)

TCP Sequence Prediction: Class=random positive increments
Difficulty=8696 (Worthy challenge)
TCP ISN Seq. Numbers: 5B9022E2 5B914E12 5B92A495 5B93915A 5B94A9B5 5B95CC64
IPID Sequence Generation: Incremental

Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds

其中 Remote operating system guess: Windows 2000/XP/ME 這行就是NMAP對操作系統類型的判斷。還返回了好多信息,NMAP不愧為掃描之王。

  2、 天眼,采用的是被動式的探測方法。不向目標系統發送數据包,只是被動地探測網絡上的通信數据,通過分析這些數据來判斷操作系統的類型。配合supersan使用,較果很好。

具體的使用方法,在此就不具體介紹了。有興趣的的朋友可以到網上搜一下關于天眼使用方法的文章,會有很多的。

以上講解了一些對操作系統識別的基本方法。由于本人水平有限,不當之處,還請高手斧正!

沒有留言:

張貼留言