Darmowy fragment publikacji:
Tytuł oryginału: Kali Linux Network Scanning Cookbook
Tłumaczenie: Grzegorz Kowalczyk
ISBN: 978-83-283-0987-6
Copyright © Packt Publishing 2014.
First published in the English language under the title: ‘Kali Linux Network Scanning
Cookbook – (9781783982141)’.
Polish edition copyright © 2015 by Helion S.A.
All rights reserved.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce
informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie,
ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo
HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania
informacji zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/skakar.zip
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/skakar
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis tre(cid:258)ci
O autorze
O korektorach merytorycznych
Wst(cid:218)p
Rozdzia(cid:239) 1. Wprowadzenie
Konfiguracja (cid:258)rodowiska testowego z wykorzystaniem pakietu VMware Player (Windows)
Konfiguracja (cid:258)rodowiska testowego z wykorzystaniem pakietu VMware Fusion (Mac OS X)
Instalacja systemu Ubuntu Server
Instalacja systemu Metasploitable2
Instalacja systemu Windows
Zwi(cid:218)kszanie p(cid:239)aszczyzny ataku na system Windows
Instalacja systemu Kali Linux
Instalacja i konfiguracja SSH
Instalacja pakietu Nessus w systemie Kali Linux
Konfiguracja pakietu Burp Suite w systemie Kali Linux
Praca z edytorami tekstu VIM i Nano
Rozdzia(cid:239) 2. Wykrywanie hostów w sieci
Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu Scapy
Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu ARPing
Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu Nmap
Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu NetDiscover
Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu Metasploit
Skanowanie sieci na warstwie 3. przy u(cid:285)yciu polecenia ping (ICMP)
Skanowanie sieci na warstwie 3. przy u(cid:285)yciu programu Scapy
Skanowanie sieci na warstwie 3. przy u(cid:285)yciu programu Nmap
Skanowanie sieci na warstwie 3. przy u(cid:285)yciu programu fping
Skanowanie sieci na warstwie 3. przy u(cid:285)yciu programu hping3
Skanowanie sieci na warstwie 4. przy u(cid:285)yciu programu Scapy
Skanowanie sieci na warstwie 4. przy u(cid:285)yciu programu Nmap
Skanowanie sieci na warstwie 4. przy u(cid:285)yciu programu hping3
7
9
11
17
18
23
26
30
32
35
38
41
45
49
53
57
61
69
74
78
80
84
88
97
100
103
109
119
123
Poleć książkęKup książkę
Spis tre(cid:286)ci
Rozdzia(cid:239) 3. Skanowanie portów
Skanowanie portów UDP
Skanowanie portów TCP
Skanowanie portów UDP przy u(cid:285)yciu programu Scapy
Skanowanie portów UDP przy u(cid:285)yciu programu Nmap
Skanowanie portów UDP przy u(cid:285)yciu programu Metasploit
Skanowanie typu stealth przy u(cid:285)yciu programu Scapy
Skanowanie typu stealth przy u(cid:285)yciu programu Nmap
Skanowanie typu stealth przy u(cid:285)yciu programu Metasploit
Skanowanie typu stealth przy u(cid:285)yciu programu hping3
Skanowanie typu TCP Connect przy u(cid:285)yciu programu Scapy
Skanowanie typu TCP Connect przy u(cid:285)yciu programu Nmap
Skanowanie typu TCP Connect przy u(cid:285)yciu pakietu Metasploit
Skanowanie typu TCP Connect przy u(cid:285)yciu programu Dmitry
Skanowanie portów TCP przy u(cid:285)yciu programu Netcat
Skanowanie typu zombie przy u(cid:285)yciu programu Scapy
Skanowanie typu zombie przy u(cid:285)yciu programu Nmap
Rozdzia(cid:239) 4. Fingerprinting,
czyli identyfikacja systemów operacyjnych i us(cid:239)ug sieciowych
Przechwytywanie banerów przy u(cid:285)yciu programu Netcat
Przechwytywanie banerów przy u(cid:285)yciu programu obiektów socket j(cid:218)zyka Python
Przechwytywanie banerów przy u(cid:285)yciu programu Dmitry
Przechwytywanie banerów przy u(cid:285)yciu programu skryptów Nmap NSE
Przechwytywanie banerów przy u(cid:285)yciu programu Amap
Identyfikacja us(cid:239)ug sieciowych przy u(cid:285)yciu programu Nmap
Identyfikacja us(cid:239)ug sieciowych przy u(cid:285)yciu programu Amap
Identyfikacja us(cid:239)ug systemów operacyjnych przy u(cid:285)yciu programu Scapy
Identyfikacja us(cid:239)ug systemów operacyjnych przy u(cid:285)yciu programu Nmap
Identyfikacja us(cid:239)ug systemów operacyjnych przy u(cid:285)yciu programu xProbe2
Pasywna identyfikacja systemów operacyjnych przy u(cid:285)yciu programu p0f
Analiza SNMP przy u(cid:285)yciu programu Onesixtyone
Analiza SNMP przy u(cid:285)yciu programu SNMPWalk
Identyfikacja zapór sieciowych przy u(cid:285)yciu programu Scapy
Identyfikacja zapór sieciowych przy u(cid:285)yciu programu Nmap
Identyfikacja zapór sieciowych przy u(cid:285)yciu pakietu Metasploit
Rozdzia(cid:239) 5. Skanowanie w poszukiwaniu podatno(cid:258)ci i luk w zabezpieczeniach
Skanowanie podatno(cid:258)ci i luk w zabezpieczeniach przy u(cid:285)yciu silnika Nmap NSE
Skanowanie podatno(cid:258)ci i luk w zabezpieczeniach
przy u(cid:285)yciu modu(cid:239)ów pomocniczych pakietu Metasploit
Tworzenie profili skanowania programu Nessus
Skanowanie podatno(cid:258)ci i luk w zabezpieczeniach przy u(cid:285)yciu programu Nessus
Skanowanie podatno(cid:258)ci i luk w zabezpieczeniach
z poziomu wiersza polece(cid:241) przy u(cid:285)yciu programu Nessuscmd
Weryfikowanie podatno(cid:258)ci i luk w zabezpieczeniach za pomoc(cid:200) sesji HTTP
Weryfikowanie podatno(cid:258)ci i luk w zabezpieczeniach za pomoc(cid:200) protoko(cid:239)u ICMP
4
131
132
133
136
142
146
149
157
162
168
171
178
183
190
192
196
201
205
207
210
214
216
218
220
222
226
232
234
236
239
240
242
255
257
261
262
268
272
275
280
282
285
Poleć książkęKup książkę
Spis tre(cid:286)ci
Rozdzia(cid:239) 6. Ataki typu DoS
Fuzzing jako metoda wykrywania podatno(cid:258)ci na przepe(cid:239)nienie bufora
Ataki typu buffer overflow DoS
Ataki typu Smurf DoS
Ataki typu DNS amplification DoS
Ataki typu SNMP amplification DoS
Ataki typu NTP amplification DoS
Ataki typu SYN flood DoS
Ataki typu Sock stress DoS
Przeprowadzanie ataków DoS za pomoc(cid:200) skryptów Nmap NSE
Przeprowadzanie ataków DoS za pomoc(cid:200) pakietu Metasploit
Przeprowadzanie ataków DoS za pomoc(cid:200) innych exploitów
Rozdzia(cid:239) 7. Skanowanie i testowanie aplikacji sieciowych
Skanowanie aplikacji sieciowych za pomoc(cid:200) programu Nikto
Skanowanie SSL/TLS za pomoc(cid:200) programu SSLScan
Skanowanie SSL/TLS za pomoc(cid:200) programu SSLyze
Definiowanie docelowej aplikacji sieciowej w pakiecie Burp Suite
Zastosowanie modu(cid:239)u Burp Suite Spider
Zastosowanie narz(cid:218)dzi z pakietu Burp Suite wspomagaj(cid:200)cych
zbieranie informacji i profilowanie celu
Zastosowanie modu(cid:239)u Burp Suite Proxy
Zastosowanie skanera aplikacji sieciowych pakietu Burp Suite
Zastosowanie modu(cid:239)u Burp Suite Intruder
Zastosowanie modu(cid:239)u Burp Suite Comparer
Zastosowanie modu(cid:239)u Burp Suite Repeater
Zastosowanie modu(cid:239)u Burp Suite Decoder
Zastosowanie modu(cid:239)u Burp Suite Sequencer
Wstrzykiwanie kodu SQL za pomoc(cid:200) metody GET i programu sqlmap
Wstrzykiwanie kodu SQL za pomoc(cid:200) metody POST i programu sqlmap
Wstrzykiwanie kodu SQL za pomoc(cid:200) programu sqlmap
z wykorzystaniem przechwyconych (cid:285)(cid:200)da(cid:241)
Automatyczne skanowanie w poszukiwaniu podatno(cid:258)ci CSRF
Testowanie podatno(cid:258)ci na wstrzykiwanie polece(cid:241) za pomoc(cid:200) protoko(cid:239)u HTTP
Testowanie podatno(cid:258)ci na wstrzykiwanie polece(cid:241) za pomoc(cid:200) protoko(cid:239)u ICMP
Rozdzia(cid:239) 8. Automatyzacja narz(cid:218)dzi systemu Kali Linux
Analiza wyników dzia(cid:239)ania programu Nmap za pomoc(cid:200) polecenia grep
Skanowanie portów z wykorzystaniem programu Nmap
i dedykowanego wykonywania skryptów NSE
Wyszukiwanie i eksploatacja podatno(cid:258)ci z wykorzystaniem skryptów NSE
i pakietu Metasploit
Wyszukiwanie i eksploatacja podatno(cid:258)ci z wykorzystaniem programu Nessuscmd
i pakietu Metasploit
Wielow(cid:200)tkowa eksploatacja podatno(cid:258)ci i luk w zabezpieczeniach
z wykorzystaniem pakietu Metasploit i (cid:239)adunków typu reverse shell payload
289
291
294
297
301
310
319
321
327
331
334
340
345
347
349
352
354
356
359
361
363
365
367
369
372
374
376
380
383
385
388
390
393
394
396
399
403
405
5
Poleć książkęKup książkę
Spis tre(cid:286)ci
Wielow(cid:200)tkowa eksploatacja podatno(cid:258)ci i luk w zabezpieczeniach
z wykorzystaniem pakietu Metasploit i pliku backdoora
Wielow(cid:200)tkowa eksploatacja podatno(cid:258)ci i luk w zabezpieczeniach
z wykorzystaniem pakietu Metasploit i weryfikacji ICMP
Wielow(cid:200)tkowa eksploatacja podatno(cid:258)ci i luk w zabezpieczeniach
z wykorzystaniem pakietu Metasploit i tworzeniem kont z uprawnieniami administratora 413
408
411
Skorowidz
417
6
Poleć książkęKup książkę2
Wykrywanie hostów
w sieci
Wykrywanie hostów w sieci to proces maj(cid:200)cy na celu wyszukiwanie i rozpoznawanie komputerów,
serwerów, zapór sieciowych, routerów i innych urz(cid:200)dze(cid:241) pod(cid:239)(cid:200)czonych do sieci. W kontek(cid:258)cie
testów penetracyjnych wykrywanie hostów jest zazwyczaj przeprowadzane po to, by zidenty-
fikowa(cid:202) potencjalne cele ataku. Zadaniem podczas takiego skanowania nie jest gromadzenie
szczegó(cid:239)owych informacji o hostach w sieci, ale wykrywanie obecno(cid:258)ci takich hostów i ich lo-
kalizacji w sieci. W rezultacie przeprowadzonego wykrywania powiniene(cid:258) otrzyma(cid:202) list(cid:218) ad-
resów IP hostów, któr(cid:200) mo(cid:285)esz wykorzysta(cid:202) do dalszych analiz. W tym rozdziale omówimy wiele
sposobów wykrywania hostów w sieci przy u(cid:285)yciu ró(cid:285)nych protoko(cid:239)ów sieciowych dzia(cid:239)aj(cid:200)cych
na 2., 3. i 4. warstwie modelu OSI. Znajdziesz tutaj nast(cid:218)puj(cid:200)ce receptury:
(cid:81) Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu Scapy.
(cid:81) Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu ARPing.
(cid:81) Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu Nmap.
(cid:81) Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu NetDiscover.
(cid:81) Skanowanie sieci na warstwie 2. przy u(cid:285)yciu programu Metasploit.
(cid:81) Skanowanie sieci na warstwie 3. przy u(cid:285)yciu polecenia ping (ICMP).
(cid:81) Skanowanie sieci na warstwie 3. przy u(cid:285)yciu programu Scapy.
(cid:81) Skanowanie sieci na warstwie 3. przy u(cid:285)yciu programu Nmap.
(cid:81) Skanowanie sieci na warstwie 3. przy u(cid:285)yciu programu fping.
(cid:81) Skanowanie sieci na warstwie 3. przy u(cid:285)yciu programu hping3.
(cid:81) Skanowanie sieci na warstwie 4. przy u(cid:285)yciu programu Scapy.
(cid:81) Skanowanie sieci na warstwie 4. przy u(cid:285)yciu programu Nmap.
(cid:81) Skanowanie sieci na warstwie 4. przy u(cid:285)yciu programu hping3.
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
Zanim jednak rozpoczniemy szczegó(cid:239)owe omawianie poszczególnych technik, musimy przed-
stawi(cid:202) kilka podstawowych zagadnie(cid:241) i poj(cid:218)(cid:202). Model OSI (ang. Open Systems Interconnection)
to standard zdefiniowany przez organizacj(cid:218) ISO (ang. International Organization for Standar-
dization), opisuj(cid:200)cy struktur(cid:218) komunikacji sieciowej. Model OSI podzielony jest na siedem
warstw (cid:258)ci(cid:258)le ze sob(cid:200) wspó(cid:239)pracuj(cid:200)cych i definiuj(cid:200)cych sposób, w jaki dane mog(cid:200) by(cid:202) przekazy-
wane mi(cid:218)dzy ró(cid:285)nymi systemami. Wy(cid:285)sze warstwy modelu OSI s(cid:200) zwykle widoczne, a u(cid:285)ytkow-
nik jest ich (cid:258)wiadomy, podczas gdy warstwy ni(cid:285)sze dzia(cid:239)aj(cid:200) w sposób zupe(cid:239)nie przezroczysty
dla przeci(cid:218)tnego u(cid:285)ytkownika, który nawet nie zdaje sobie sprawy z ich obecno(cid:258)ci. Poszcze-
gólne warstwy modelu OSI zosta(cid:239)y przedstawione poni(cid:285)ej.
Warstwa modelu OSI
Opis warstwy
Przyk(cid:239)adowe protoko(cid:239)y
Warstwa 7.: warstwa aplikacji Najwy(cid:285)sza warstwa protoko(cid:239)u OSI, wykorzystywana
HTTP, FTP, Telnet
Warstwa 6.: warstwa
prezentacji
Warstwa 5.: warstwa sesji
Warstwa 4.: warstwa
transportowa
przez aplikacje do przesy(cid:239)ania danych w sieci.
Warstwa 6. definiuje sposób formatowania
b(cid:200)d(cid:283) organizacji przesy(cid:239)anych danych.
Zadaniem tej warstwy jest zarz(cid:200)dzanie przebiegiem
komunikacji (sesji) podczas po(cid:239)(cid:200)czenia mi(cid:218)dzy dwoma
hostami sieciowymi, jej synchronizacja i zako(cid:241)czenie.
Warstwa transportowa zapewnia integralno(cid:258)(cid:202)
transmisji i inne us(cid:239)ugi odpowiadaj(cid:200)ce za po(cid:239)(cid:200)czenie
mi(cid:218)dzy hostami.
Warstwa 3.: warstwa sieciowa Warstwa sieciowa jest odpowiedzialna za okre(cid:258)lanie
Warstwa 2.: warstwa (cid:239)(cid:200)cza
danych
trasy, jak(cid:200) przesy(cid:239)ane s(cid:200) pakiety (trasowanie
po(cid:239)(cid:200)czenia).
Zadaniem warstwy (cid:239)(cid:200)cza danych jest upakowanie
strumienia danych w ramki i przesy(cid:239)anie ich do
warstwy fizycznej.
ASCII, JPEG, PDF, PNG,
DOCX
NetBIOS, PPTP, RPC,
SOCKS
TCP, UDP
IPv4, IPv6, ICMP, IPSec
ARP
Warstwa 1.: warstwa fizyczna Warstwa fizyczna jest odpowiedzialna za przesy(cid:239)anie
strumienia danych za po(cid:258)rednictwem no(cid:258)nika
(cid:239)(cid:200)cz(cid:200)cego komunikuj(cid:200)ce si(cid:218) ze sob(cid:200) urz(cid:200)dzenia.
Zadaniem ni(cid:285)szych warstw modelu OSI jest zapewnienie, (cid:285)e dane przesy(cid:239)ane w sieci dotr(cid:200) do
swojego miejsca przeznaczenia. Bardzo cz(cid:218)sto protoko(cid:239)y sieciowe wykorzystywane na tych war-
stwach wymagaj(cid:200), aby systemy ko(cid:241)cowe przesy(cid:239)a(cid:239)y odpowiedzi na otrzymane (cid:285)(cid:200)dania, dzi(cid:218)ki
czemu tych protoko(cid:239)ów mog(cid:200) u(cid:285)ywa(cid:202) potencjalni napastnicy do identyfikacji hostów dzia(cid:239)aj(cid:200)cych
w sieci. Zanim przejdziemy do szczegó(cid:239)owych receptur, przedstawimy jeszcze kilka protoko(cid:239)ów
dzia(cid:239)aj(cid:200)cych na poszczególnych warstwach oraz poka(cid:285)emy, w jaki sposób mog(cid:200) by(cid:202) wykorzysty-
wane do wykrywania hostów w sieci.
Skanowanie sieci na warstwie 2. za pomoc(cid:200) protoko(cid:239)u ARP ma nast(cid:218)puj(cid:200)ce zalety i wady:
(cid:81) Zalety:
(cid:81) Du(cid:285)a szybko(cid:258)(cid:202).
58
Poleć książkęKup książkęRozdzia(cid:225) 2. • Wykrywanie hostów w sieci
(cid:81) Du(cid:285)a niezawodno(cid:258)(cid:202).
(cid:81) Wady:
(cid:81) Nie pozwala na wykrywanie systemów zdalnych (protokó(cid:239) nieroutowalny).
Skanowanie sieci na warstwie 2. mo(cid:285)na przeprowadza(cid:202) z wykorzystaniem protoko(cid:239)u ARP (ang.
Address Resolution Protocol). ARP to protokó(cid:239) warstwy (cid:239)(cid:200)cza danych, który zajmuje si(cid:218) przede
wszystkim translacj(cid:200) logicznych adresów IP warstwy 3. na fizyczne adresy MAC warstwy 2.
Kiedy dany system musi dowiedzie(cid:202) si(cid:218), jaki adres fizyczny MAC odpowiada docelowemu adre-
sowi IP, rozsy(cid:239)a broadcast z (cid:285)(cid:200)daniem ARP do lokalnego segmentu sieci. Pakiet z (cid:285)(cid:200)daniem
ARP po prostu zadaje wszystkim hostom w sieci pytanie: „Kto ma ten adres IP?”. Po otrzy-
maniu takiego zapytania system, który ma poszukiwany adres IP, komunikuje si(cid:218) bezpo(cid:258)red-
nio z systemem zadaj(cid:200)cym pytanie, przesy(cid:239)aj(cid:200)c odpowied(cid:283) ARP zawieraj(cid:200)c(cid:200) adres MAC (dru-
ga warstwa modelu OSI). Po otrzymaniu odpowiedzi system wysy(cid:239)aj(cid:200)cy (cid:285)(cid:200)danie aktualizuje
zawarto(cid:258)(cid:202) swojego bufora ARP, w którym tymczasowo zapisywany jest rekord wi(cid:200)(cid:285)(cid:200)cy poszu-
kiwany adres IP z adresem MAC. Protokó(cid:239) ARP mo(cid:285)e by(cid:202) u(cid:285)ywany do wykrywania aktyw-
nych hostów, poniewa(cid:285) otrzymanie od zdalnego hosta odpowiedzi na przes(cid:239)ane (cid:285)(cid:200)danie nie
wymaga przeprowadzenia (cid:285)adnego uwierzytelniania ani autoryzacji.
W rezultacie dla potencjalnego napastnika maj(cid:200)cego mo(cid:285)liwo(cid:258)(cid:202) pod(cid:239)(cid:200)czenia si(cid:218) do sieci lo-
kalnej wyszukanie dzia(cid:239)aj(cid:200)cych w niej hostów jest zadaniem wr(cid:218)cz trywialnym. Mo(cid:285)na je wy-
kona(cid:202) poprzez wysy(cid:239)anie serii (cid:285)(cid:200)da(cid:241) ARP do wszystkich adresów IP z danej podsieci i nast(cid:218)pnie
zapisywanie adresów IP, z których przes(cid:239)ane zosta(cid:239)y odpowiedzi. Wyszukiwanie hostów w sieci
z wykorzystaniem protoko(cid:239)u ARP ma jednak swoje zalety i wady. Niew(cid:200)tpliwie jest to bardzo
skuteczne rozwi(cid:200)zanie, g(cid:239)ównie ze wzgl(cid:218)du na fakt, (cid:285)e jest najszybsz(cid:200) i daj(cid:200)c(cid:200) najbardziej wiary-
godne wyniki metod(cid:200) skanowania. Z drugiej strony nale(cid:285)y pami(cid:218)ta(cid:202), (cid:285)e niestety ARP jest proto-
ko(cid:239)em nieroutowalnym i z tego wzgl(cid:218)du mo(cid:285)e by(cid:202) u(cid:285)ywany jedynie do wykrywania hostów
w sieci lokalnej.
Skanowanie sieci na warstwie 3. z wykorzystaniem protoko(cid:239)u ICMP ma nast(cid:218)puj(cid:200)ce zalety i wady:
(cid:81) Zalety:
(cid:81) Pozwala na wykrywanie hostów zdalnych (protokó(cid:239) routowalny).
(cid:81) Wzgl(cid:218)dnie du(cid:285)a szybko(cid:258)(cid:202) dzia(cid:239)ania.
(cid:81) Wady:
(cid:81) Wolniejsze ni(cid:285) skanowanie ARP.
(cid:81) Protokó(cid:239) ICMP jest cz(cid:218)sto blokowany przez zapory sieciowe.
Skanowanie na warstwie 3. jest prawdopodobnie najbardziej znan(cid:200) i najpowszechniej stoso-
wan(cid:200) przez administratorów i personel techniczny metod(cid:200) wykrywania aktywnych hostów w sie-
ci. S(cid:239)ynne polecenie ping, które mo(cid:285)esz znale(cid:283)(cid:202) zarówno w systemach Windows, jak i Linux,
dzia(cid:239)a w(cid:239)a(cid:258)nie na warstwie 3. i wykorzystuje protokó(cid:239) ICMP (ang. Internet Control Message
Protocol). Cho(cid:202) protokó(cid:239) ICMP ma ca(cid:239)kiem sporo interesuj(cid:200)cych funkcji, jedn(cid:200) z najbardziej
u(cid:285)ytecznych s(cid:200) komunikaty (cid:285)(cid:200)dania echa (ang. Echo Request) i odpowiedzi na echo (ang. Echo
Reply). (cid:191)(cid:200)danie ICMP Echo Request jest technicznym odpowiednikiem sytuacji, w której jeden
59
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
system pyta drugi: „Hej, jeste(cid:258) tam?”. Jak mo(cid:285)na si(cid:218) spodziewa(cid:202), odpowied(cid:283) ICMP Echo
Reply to komunikat, za pomoc(cid:200) którego zapytany system odpowiada: „Tak, jestem”. Aby spraw-
dzi(cid:202), czy pod danym adresem IP kryje si(cid:218) jaki(cid:258) host, nasz system mo(cid:285)e na ten adres przes(cid:239)a(cid:202)
(cid:285)(cid:200)danie ICMP Echo Request. Je(cid:285)eli host, który ma taki adres IP, jest w(cid:239)(cid:200)czony i odpowiednio
skonfigurowany, po otrzymaniu takiego (cid:285)(cid:200)dania prze(cid:258)le odpowied(cid:283) ICMP Echo Reply. Proto-
kó(cid:239) ICMP mo(cid:285)e by(cid:202) z powodzeniem wykorzystywany do wykrywania hostów w ca(cid:239)ych sie-
ciach, poprzez sukcesywne pingowanie w p(cid:218)tli kolejnych adresów IP z danego zakresu.
W wyniku takiej operacji powiniene(cid:258) otrzyma(cid:202) list(cid:218) adresów IP, z których nades(cid:239)ane zosta(cid:239)y
odpowiedzi na ping. Skanowanie sieci na warstwie 3. jest bardzo efektywnym rozwi(cid:200)zaniem,
poniewa(cid:285) do wykrywania hostów wykorzystuje protokó(cid:239) routowalny, ale mimo to ma równie(cid:285)
swoje wady. Po pierwsze, skanowanie z u(cid:285)yciem protoko(cid:239)u ICMP nie jest tak szybkie jak w przy-
padku protoko(cid:239)u ARP. Po drugie, taki rodzaj skanowania nie daje tak pewnych rezultatów jak
skanowanie ARP, poniewa(cid:285) niektóre systemy s(cid:200) celowo skonfigurowane tak, aby nie odpowia-
da(cid:202) na (cid:285)(cid:200)dania ICMP Echo Request, a co gorsza, protokó(cid:239) ICMP jest bardzo cz(cid:218)sto blokowany
przez zapory sieciowe. Nie zmienia to jednak w niczym faktu, (cid:285)e jest to szybki, wygodny i cz(cid:218)sto
stosowany sposób wykrywania obecno(cid:258)ci hostów w zdalnych sieciach.
Skanowanie na warstwie 4. to bardzo efektywne rozwi(cid:200)zanie, poniewa(cid:285) publicznie dost(cid:218)pne
systemy znajduj(cid:200) si(cid:218) najcz(cid:218)(cid:258)ciej w publicznej przestrzeni adresów IP i udost(cid:218)pniaj(cid:200) ró(cid:285)ne
us(cid:239)ugi sieciowe za po(cid:258)rednictwem protoko(cid:239)ów TCP (ang. Transmission Control Protocol) lub
UDP (ang. User Datagram Protocol). W (cid:283)le zabezpieczonych (cid:258)rodowiskach sieciowych odpo-
wied(cid:283) ze zdalnego serwera mo(cid:285)na otrzyma(cid:202) po przes(cid:239)aniu na jego adres IP niemal dowolnego
(cid:285)(cid:200)dania UDP lub TCP. Z drugiej strony, je(cid:285)eli w skanowanym (cid:258)rodowisku zaimplementowana
jest zapora sieciowa z analiz(cid:200) stanu pakietów (ang. statefull filtering/statefull firewall), otrzy-
ma(cid:202) odpowied(cid:283) ze zdalnego hosta b(cid:218)dzie mo(cid:285)na tylko w przypadku, kiedy (cid:285)(cid:200)danie SYN zo-
stanie przes(cid:239)ane na konkretny port sieciowy, na którym dzia(cid:239)a okre(cid:258)lona us(cid:239)uga sieciowa. Co
ciekawe, w wi(cid:218)kszo(cid:258)ci sytuacji u(cid:285)ycie odpowiednio dobranego (cid:285)(cid:200)dania pozwala na wykrywanie
hostów nawet w bardzo dobrze skonfigurowanych i zabezpieczonych (cid:258)rodowiskach sieciowych.
Bior(cid:200)c jednak pod uwag(cid:218) fakt, (cid:285)e istnieje 65 536 dost(cid:218)pnych portów UDP i TCP, pe(cid:239)ne ska-
nowanie us(cid:239)ug na wszystkich portach mo(cid:285)e by(cid:202) bardzo czasoch(cid:239)onne. Z tego powodu najlepszym
podej(cid:258)ciem do skanowania sieci na warstwie 4. z u(cid:285)yciem protoko(cid:239)ów TCP i UDP b(cid:218)dzie wy-
pracowanie rozs(cid:200)dnego kompromisu pomi(cid:218)dzy dok(cid:239)adno(cid:258)ci(cid:200) i funkcjonalno(cid:258)ci(cid:200) skanu.
Skanowanie sieci na warstwie 4. z wykorzystaniem protoko(cid:239)u TCP ma nast(cid:218)puj(cid:200)ce zalety i wady:
(cid:81) Zalety:
(cid:81) Pozwala na wykrywanie systemów zdalnych (protokó(cid:239) routowalny).
(cid:81) Daje bardziej wiarygodne wyniki ni(cid:285) ICMP (filtrowanie jest mniej powszechne
lub implementowane selektywnie).
(cid:81) Wady:
(cid:81) Obecno(cid:258)(cid:202) zapór sieciowych z analiz(cid:200) stanu pakietów mo(cid:285)e powodowa(cid:202),
(cid:285)e otrzymane wyniki b(cid:218)d(cid:200) niejednoznaczne.
(cid:81) Dok(cid:239)adne skanowanie mo(cid:285)e zajmowa(cid:202) wiele czasu.
60
Poleć książkęKup książkęRozdzia(cid:225) 2. • Wykrywanie hostów w sieci
Skanowanie sieci na warstwie 4. z wykorzystaniem protoko(cid:239)u TCP polega na wysy(cid:239)aniu do
potencjalnych adresów przeznaczenia pakietów TCP z ustawionymi ró(cid:285)nymi flagami, które
mog(cid:200) powodowa(cid:202) ró(cid:285)ne reakcje zdalnego hosta, pozwalaj(cid:200)ce na jego identyfikacj(cid:218). Nieocze-
kiwane otrzymanie pakietu z ustawion(cid:200) flag(cid:200) FIN (ang. Finish) czy ACK (ang. Acknowledge)
bardzo cz(cid:218)sto mo(cid:285)e powodowa(cid:202) odes(cid:239)anie przez zdalnego hosta odpowiedzi RST (ang. Reset).
Wys(cid:239)anie pakietów SYN (ang. Synchronize) do zdalnego hosta bardzo cz(cid:218)sto powoduje otrzymanie
odpowiedzi SYN+ACK lub RST, w zale(cid:285)no(cid:258)ci od statusu danej us(cid:239)ugi sieciowej. Zamiarem ata-
kuj(cid:200)cego nie jest wymuszenie otrzymania konkretnej odpowiedzi, ale po prostu otrzymanie do-
wolnej odpowiedzi — dowolna odpowied(cid:283) ze zdalnego hosta jest dla nas wystarczaj(cid:200)cym
potwierdzeniem, (cid:285)e taki host istnieje.
Skanowanie sieci na warstwie 4. z wykorzystaniem protoko(cid:239)u UDP ma nast(cid:218)puj(cid:200)ce zalety i wady:
(cid:81) Zalety:
(cid:81) Pozwala na wykrywanie systemów zdalnych (protokó(cid:239) routowalny).
(cid:81) Pozwala na wykrywanie systemów zdalnych, na których wszystkie us(cid:239)ugi TCP
s(cid:200) filtrowane przez zapor(cid:218) sieciow(cid:200).
(cid:81) Wady:
(cid:81) Niespójny sposób u(cid:285)ycia i filtrowanie odpowiedzi ICMP Port Unreachable
(port niedost(cid:218)pny) powoduje, (cid:285)e zastosowanie tej metody do masowego
skanowania sieci daje niemiarodajne rezultaty.
(cid:81) Specyficzne dla poszczególnych us(cid:239)ug sieciowych metody sondowania powoduj(cid:200)
ograniczenie dok(cid:239)adno(cid:258)ci skanowania i zwi(cid:218)kszaj(cid:200) czas jego realizacji.
Skanowanie z wykorzystaniem protoko(cid:239)u UDP polega na wysy(cid:239)aniu sonduj(cid:200)cych pakietów UDP
do ró(cid:285)nych portów sieciowych w celu wymuszenia odpowiedzi zdalnego systemu. Skanowanie
UDP mo(cid:285)e by(cid:202) czasami bardzo efektywne w wykrywaniu hostów, na których wszystkie us(cid:239)ugi
TCP s(cid:200) filtrowane przez zapor(cid:218) sieciow(cid:200). Z drugiej jednak strony skanowanie UDP cz(cid:218)sto
jest niemiarodajne, poniewa(cid:285) niektóre us(cid:239)ugi odpowiadaj(cid:200) na pakiety UDP za pomoc(cid:200) komu-
nikatów ICMP Port Unreachable, podczas gdy inne mog(cid:200) odpowiada(cid:202) tylko na odpowiednio
dobrane (cid:285)(cid:200)dania dostosowane wy(cid:239)(cid:200)cznie do okre(cid:258)lonych us(cid:239)ug. Dodatkowo bardzo cz(cid:218)sto pa-
kiety ICMP s(cid:200) filtrowane przez regu(cid:239)y ruchu wychodz(cid:200)cego na zaporach sieciowych, co po-
woduje, (cid:285)e masowe skanowanie sieci za pomoc(cid:200) tej metody staje si(cid:218) problematyczne. Z tego
powodu efektywne zastosowanie skanowania UDP wymaga zazwyczaj dobrania technik spe-
cyficznych dla poszczególnych us(cid:239)ug sieciowych.
Skanowanie sieci na warstwie 2.
przy u(cid:285)yciu programu Scapy
Scapy to pot(cid:218)(cid:285)ne, interaktywne narz(cid:218)dzie, za pomoc(cid:200) którego mo(cid:285)esz przechwytywa(cid:202), anali-
zowa(cid:202) i modyfikowa(cid:202) ruch sieciowy. Co wi(cid:218)cej, mo(cid:285)esz równie(cid:285) u(cid:285)ywa(cid:202) tego narz(cid:218)dzia do
tworzenia i wstrzykiwania do sieci w(cid:239)asnych pakietów sieciowych, zgodnych ze standardami
61
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
ró(cid:285)nych protoko(cid:239)ów komunikacyjnych. Scapy to tak(cid:285)e biblioteka funkcji j(cid:218)zyka Python, dzi(cid:218)ki
której mo(cid:285)esz tworzy(cid:202) bardzo wydajne skrypty przetwarzaj(cid:200)ce i modyfikuj(cid:200)ce ruch sieciowy.
W tym podrozdziale poka(cid:285)emy, w jaki sposób mo(cid:285)esz pos(cid:239)u(cid:285)y(cid:202) si(cid:218) programem Scapy do ska-
nowania sieci z wykorzystaniem protoko(cid:239)u ARP oraz jak przy u(cid:285)yciu biblioteki Scapy pisa(cid:202)
w j(cid:218)zyku Python skrypty skanuj(cid:200)ce sie(cid:202) na warstwie 2. modelu OSI.
Przygotuj si(cid:218)
Aby mo(cid:285)na by(cid:239)o za pomoc(cid:200) pakietu Scapy przeprowadzi(cid:202) skanowanie na warstwie 2., w sieci
lokalnej musi dzia(cid:239)a(cid:202) przynajmniej jeden system, który b(cid:218)dzie odpowiada(cid:239) na (cid:285)(cid:200)dania ARP.
W przedstawionym przyk(cid:239)adzie wykorzystujemy kombinacj(cid:218) systemów Linux i Windows.
Wi(cid:218)cej szczegó(cid:239)owych informacji na temat instalacji i konfiguracji tych systemów w naszym (cid:258)ro-
dowisku testowym znajdziesz w rozdziale 1., w recepturach „Instalacja systemu Metasploitable2”
oraz „Instalacja systemu Windows”. Oprócz tego w tej recepturze b(cid:218)dziemy u(cid:285)ywa(cid:202) edytorów
tekstu, takich jak VIM czy Nano, do napisania skryptu skanuj(cid:200)cego w j(cid:218)zyku Python i zapisania
go w systemie plików. Wi(cid:218)cej szczegó(cid:239)owych informacji na temat pisania skryptów znajdziesz
w rozdziale 1., w recepturze „Praca z edytorami tekstu VIM i Nano”.
Jak to zrobi(cid:202)?
Aby zrozumie(cid:202), jak dzia(cid:239)a skanowanie z wykorzystaniem protoko(cid:239)u ARP, u(cid:285)yjemy programu
Scapy do utworzenia w(cid:239)asnych pakietów sieciowych ARP, za pomoc(cid:200) których b(cid:218)dziemy mogli
wykrywa(cid:202) oraz identyfikowa(cid:202) hosty w sieci LAN. By uruchomi(cid:202) program Scapy w systemie
Linux, przejd(cid:283) do okna terminala i wykonaj polecenie scapy. Nast(cid:218)pnie mo(cid:285)esz u(cid:285)y(cid:202) funkcji
display() do wy(cid:258)wietlenia domy(cid:258)lnej konfiguracji obiektów ARP tworzonych w programie
Scapy, tak jak to zosta(cid:239)o przedstawione poni(cid:285)ej.
root@KaliLinux:~# scapy
Welcome to Scapy (2.2.0)
ARP().display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has
hwsrc= 00:0c:29:fd:01:05
psrc= 172.16.36.232
hwdst= 00:00:00:00:00:00
pdst= 0.0.0.0
Zauwa(cid:285), (cid:285)e zarówno (cid:283)ród(cid:239)owy adres IP, jak i adres MAC zosta(cid:239)y automatycznie skonfigurowane
na warto(cid:258)ci odpowiadaj(cid:200)ce hostowi, na którym zosta(cid:239) uruchomiony program Scapy. Warto(cid:258)ci te
nigdy nie s(cid:200) zmieniane, z wyj(cid:200)tkiem sytuacji, w której chcesz ukry(cid:202) swój rzeczywisty adres (cid:283)ró-
d(cid:239)owy. Domy(cid:258)lna warto(cid:258)(cid:202) kodu operacji ARP (ang. ARP opcode) jest automatycznie ustawiana
62
Poleć książkęKup książkęRozdzia(cid:225) 2. • Wykrywanie hostów w sieci
na warto(cid:258)(cid:202) who-has, która okre(cid:258)la, (cid:285)e generowany pakiet b(cid:218)dzie (cid:285)(cid:200)da(cid:239) przes(cid:239)ania powi(cid:200)zania
adresu IP z adresem MAC. W takiej sytuacji jedynym parametrem, który musisz poda(cid:202), jest
adres IP celu. Aby to zrobi(cid:202), utworzymy nowy obiekt, przypisuj(cid:200)c funkcj(cid:218) ARP do zmiennej. Na-
zwa zmiennej obiektowej nie ma znaczenia (w naszym przyk(cid:239)adzie b(cid:218)dzie to arp_request).
Kod zosta(cid:239) przedstawiony poni(cid:285)ej.
arp_request = ARP()
arp_request.pdst = 172.16.36.135
arp_request.display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has
hwsrc= 00:0c:29:65:fc:d2
psrc= 172.16.36.132
hwdst= 00:00:00:00:00:00
pdst= 172.16.36.135
Zwró(cid:202) uwag(cid:218), (cid:285)e za pomoc(cid:200) funkcji display() mo(cid:285)na sprawdzi(cid:202), czy warto(cid:258)ci parametrów
konfiguracyjnych obiektu ARP zosta(cid:239)y zmienione zgodnie z oczekiwaniami. W przyk(cid:239)adzie u(cid:285)y-
jemy adresu IP hosta docelowego, dzia(cid:239)aj(cid:200)cego w naszym (cid:258)rodowisku testowym. Aby wys(cid:239)a(cid:202)
gotowe (cid:285)(cid:200)danie ARP i wy(cid:258)wietli(cid:202) otrzyman(cid:200) odpowied(cid:283), mo(cid:285)emy teraz u(cid:285)y(cid:202) funkcji sr1().
sr1(arp_request)
Begin emission:
......................................*Finished to send 1 packets.
Received 39 packets, got 1 answers, remaining 0 packets
ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at
hwsrc=00:0c:29:3d:84:32 psrc=172.16.36.135 hwdst=00:0c:29:65:fc:d2
pdst=172.16.36.132 | Padding
load= \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 |
Innym sposobem wykonania takiej samej operacji mo(cid:285)e by(cid:202) bezpo(cid:258)rednie wywo(cid:239)anie tej funkcji
i przekazanie jej w wierszu polecenia wszystkich niezb(cid:218)dnych argumentów, tak jak to zosta(cid:239)o poka-
zane na listingu poni(cid:285)ej. Dzi(cid:218)ki takiemu rozwi(cid:200)zaniu mo(cid:285)emy unikn(cid:200)(cid:202) konieczno(cid:258)ci tworzenia do-
datkowych zmiennych, a tak(cid:285)e zrealizowa(cid:202) ca(cid:239)(cid:200) operacj(cid:218) za pomoc(cid:200) jednego wiersza kodu.
sr1(ARP(pdst= 172.16.36.135 ))
Begin emission:
.........................*Finished to send 1 packets.
Received 26 packets, got 1 answers, remaining 0 packets
ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at
hwsrc=00:0c:29:3d:84:32 psrc=172.16.36.135 hwdst=00:0c:29:65:fc:d2
pdst=172.16.36.132 | Padding
load= \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 |
63
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
Jak wida(cid:202), we wszystkich przedstawionych przypadkach po wys(cid:239)aniu (cid:285)(cid:200)dania otrzymywana
jest odpowied(cid:283) wskazuj(cid:200)ca, (cid:285)e do adresu IP 172.16.36.135 przypisany jest adres MAC
00:0C:29:3D:84:32. Je(cid:285)eli teraz ponownie wykonasz tak(cid:200) operacj(cid:218), ale jako argument wywo(cid:239)ania
podasz adres IP nieaktywnego hosta, nie otrzymasz (cid:285)adnej odpowiedzi, a uruchomiona funkcja
b(cid:218)dzie przez ca(cid:239)y czas analizowa(cid:202) nadchodz(cid:200)cy ruch na lokalnym interfejsie sieciowym.
Aby zatrzyma(cid:202) dzia(cid:239)anie funkcji, powiniene(cid:258) nacisn(cid:200)(cid:202) kombinacj(cid:218) klawiszy Ctrl+C. Zamiast
tego mo(cid:285)esz równie(cid:285) podczas wywo(cid:239)ywania funkcji zdefiniowa(cid:202) maksymalny czas, po którym
jej dzia(cid:239)anie zostanie zako(cid:241)czone (ang. timeout). Wykorzystanie parametru timeout nabiera
szczególnego znaczenia, je(cid:285)eli u(cid:285)ywasz Scapy z poziomu skryptów j(cid:218)zyka Python. By ustawi(cid:202)
maksymalny czas dzia(cid:239)ania, musisz w wierszu polecenia u(cid:285)y(cid:202) dodatkowego argumentu wywo-
(cid:239)ania funkcji wysy(cid:239)aj(cid:200)cej (cid:285)(cid:200)danie ARP, reprezentuj(cid:200)cego czas, wyra(cid:285)ony w sekundach, przez jaki
funkcja b(cid:218)dzie oczekiwa(cid:239)a na nadej(cid:258)cie odpowiedzi.
arp_request.pdst = 172.16.36.134
sr1(arp_request, timeout=1)
Begin emission:
.........................................................................
............Finished to send 1 packets. .................................
.........................................................................
........................................
Received 3285 packets, got 0 answers, remaining 1 packets
Je(cid:285)eli teraz, po ustawieniu parametru timeout, wy(cid:258)lemy (cid:285)(cid:200)danie ARP do nieistniej(cid:200)cego hosta,
po up(cid:239)ywie oznaczonego czasu otrzymamy informacj(cid:218), (cid:285)e (cid:285)adna odpowied(cid:283) nie zosta(cid:239)a otrzy-
mana. Co ciekawe, odpowiedzi na (cid:285)(cid:200)dania wys(cid:239)ane przez funkcj(cid:218) mog(cid:200) równie(cid:285) by(cid:202) przypi-
sane do zmiennej, dzi(cid:218)ki czemu mo(cid:285)emy dalej przetwarza(cid:202) otrzyman(cid:200) odpowied(cid:283) poprzez od-
wo(cid:239)anie si(cid:218) do takiej zmiennej, tak jak to zosta(cid:239)o przedstawione poni(cid:285)ej.
response = sr1(arp_request, timeout=1)
Begin emission:
....................................*Finished to send 1 packets.
Received 37 packets, got 1 answers, remaining 0 packets
response.display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= is-at
hwsrc= 00:0c:29:3d:84:32
psrc= 172.16.36.135
hwdst= 00:0c:29:65:fc:d2
pdst= 172.16.36.132
###[ Padding ]###
load=
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
64
Poleć książkęKup książkęRozdzia(cid:225) 2. • Wykrywanie hostów w sieci
Scapy mo(cid:285)e by(cid:202) równie(cid:285) wykorzystywany jako biblioteka funkcji dla skryptów w j(cid:218)zyku Py-
thon, dzi(cid:218)ki którym mo(cid:285)esz zautomatyzowa(cid:202) nu(cid:285)(cid:200)ce, cz(cid:218)sto powtarzane zadania. Dzi(cid:218)ki po(cid:239)(cid:200)-
czeniu elastyczno(cid:258)ci Pythona z funkcjonalno(cid:258)ci(cid:200) bibliotek Scapy mo(cid:285)esz bez trudu napisa(cid:202)
skrypt przechodz(cid:200)cy w p(cid:218)tli przez kolejne adresy IP lokalnych podsieci i wysy(cid:239)aj(cid:200)cy do ka(cid:285)dego
z hostów odpowiednie (cid:285)(cid:200)danie ARP. Przyk(cid:239)ad w pe(cid:239)ni funkcjonalnego skryptu, przeprowa-
dzaj(cid:200)cego skanowanie sieci na warstwie 2., zosta(cid:239) przedstawiony poni(cid:285)ej.
#!/usr/bin/python
import logging
import subprocess
logging.getLogger( scapy.runtime ).setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv) != 2:
print Usage - ./arp_disc.py [interface]
print Example - ./arp_disc.py eth0
print Example will perform an ARP scan of the local subnet to which eth0 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=1,verbose=0)
if answer == None:
pass
else:
print prefix+str(addr)
Pierwszy wiersz skryptu wskazuje lokalizacj(cid:218) interpretera j(cid:218)zyka Python, dzi(cid:218)ki czemu skrypt
mo(cid:285)e zosta(cid:202) wykonany bez konieczno(cid:258)ci podawania tej informacji w wierszu wywo(cid:239)ania. Na-
st(cid:218)pnie skrypt importuje wszystkie funkcje Scapy oraz definiuje poziomy logowania, co po-
zwala na wyeliminowanie niepotrzebnych elementów w wynikach dzia(cid:239)ania programu. Dalej
importowana jest biblioteka subprocess, która pozwala na (cid:239)atwe wyodr(cid:218)bnianie informacji
z wywo(cid:239)a(cid:241) systemowych. Drugi blok kodu zawiera instrukcj(cid:218) warunkow(cid:200), sprawdzaj(cid:200)c(cid:200), czy
w wierszu polece(cid:241) zosta(cid:239)a podana odpowiednia liczba argumentów wywo(cid:239)ania skryptu. Je(cid:285)eli
nie, na ekranie wy(cid:258)wietlana jest krótka informacja, sk(cid:239)adaj(cid:200)ca si(cid:218) z opisu sk(cid:239)adni, przyk(cid:239)adu
wywo(cid:239)ania oraz okre(cid:258)lenia przeznaczenia skryptu.
Dalej znajduje si(cid:218) pojedynczy wiersz kodu, w którym argument wywo(cid:239)ania skryptu zostaje
przypisany do zmiennej interface. Kolejny blok kodu wykorzystuje funkcj(cid:218) check_output()
z biblioteki subprocess do wywo(cid:239)ania polecenia ifconfig i za pomoc(cid:200) polece(cid:241) grep i cut wy-
odr(cid:218)bnia z wyników jego dzia(cid:239)ania adres IP interfejsu sieciowego podanego jako argument
65
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
wywo(cid:239)ania skryptu. Wynik tej operacji zostaje przypisany do zmiennej ip. Nast(cid:218)pnie za po-
moc(cid:200) funkcji split ze zmiennej ip wyodr(cid:218)bniany jest podci(cid:200)g znaków reprezentuj(cid:200)cy adres
/24 tej podsieci. Na przyk(cid:239)ad je(cid:285)eli w zmiennej ip przechowywany jest adres 192.168.11.4, to
do zmiennej prefix zostanie przypisana warto(cid:258)(cid:202) 192.168.11.. W ostatnim bloku kodu umiesz-
czona zosta(cid:239)a p(cid:218)tla for, która realizuje w(cid:239)a(cid:258)ciwe skanowanie. P(cid:218)tla przechodzi kolejno przez
warto(cid:258)ci od 0 do 254 i w ka(cid:285)dej iteracji warto(cid:258)(cid:202) licznika p(cid:218)tli jest do(cid:239)(cid:200)czana do prefiksu sieci.
W naszym przyk(cid:239)adzie przedstawionym wcze(cid:258)niej (cid:285)(cid:200)danie ARP zostanie rozes(cid:239)ane do wszystkich
hostów o adresach IP od 192.168.11.0 do 192.168.11.254. Je(cid:285)eli dany host ode(cid:258)le odpowied(cid:283),
na ekranie wy(cid:258)wietlony zostanie jego adres IP, wskazuj(cid:200)cy, (cid:285)e host o takim adresie jest aktywny.
Po zapisaniu skryptu w lokalnym katalogu na dysku mo(cid:285)esz spróbowa(cid:202) uruchomi(cid:202) go z poziomu
okna terminala, wpisuj(cid:200)c w wierszu wywo(cid:239)ania kropk(cid:218), prawy uko(cid:258)nik i nazw(cid:218) skryptu, tak jak to
zosta(cid:239)o przedstawione w przyk(cid:239)adzie poni(cid:285)ej.
root@KaliLinux:~# ./arp_disc.py
Usage - ./arp_disc.py [interface]
Example - ./arp_disc.py eth0
Example will perform an ARP scan of the local subnet to which eth0 is assigned
Je(cid:285)eli skrypt zostanie uruchomiony bez (cid:285)adnych argumentów wywo(cid:239)ania, na ekranie wy(cid:258)wietlony
zostanie wspomniany wcze(cid:258)niej opis sposobu u(cid:285)ycia, z którego wynika, (cid:285)e poprawne urucho-
mienie skryptu wymaga podania jednego argumentu, reprezentuj(cid:200)cego nazw(cid:218) interfejsu siecio-
wego, który zostanie u(cid:285)yty do przeprowadzenia skanu. W przyk(cid:239)adzie przedstawionym poni(cid:285)ej
skrypt zosta(cid:239) wywo(cid:239)any dla interfejsu eth0.
root@KaliLinux:~# ./arp_disc.py eth0
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
Po uruchomieniu skrypt sprawdza, do jakiej podsieci lokalnej pod(cid:239)(cid:200)czony jest interfejs eth0,
wykonuje skanowanie ARP i wy(cid:258)wietla na ekranie list(cid:218) adresów IP hostów, które przes(cid:239)a(cid:239)y od-
powied(cid:283) na (cid:285)(cid:200)danie ARP. Aby sprawdzi(cid:202), jak ten skan dzia(cid:239)a na poziomie sieci, mo(cid:285)esz wcze(cid:258)niej
uruchomi(cid:202) program Wireshark, w(cid:239)(cid:200)czy(cid:202) przechwytywanie ruchu sieciowego i po uruchomieniu
skryptu obserwowa(cid:202), jak (cid:285)(cid:200)dania ARP s(cid:200) wysy(cid:239)ane do kolejnych hostów i jak aktywne hosty
odsy(cid:239)aj(cid:200) odpowiedzi, tak jak to pokazano na rysunku poni(cid:285)ej.
W razie potrzeby mo(cid:285)esz (cid:239)atwo przekierowa(cid:202) wyniki dzia(cid:239)ania skryptu do pliku tekstowego na
dysku. Tego pliku b(cid:218)dziesz móg(cid:239) nast(cid:218)pnie u(cid:285)y(cid:202) do przeprowadzania kolejnych skanów. Przekie-
rowanie strumienia danych z wyj(cid:258)cia skryptu mo(cid:285)esz uzyska(cid:202), do(cid:239)(cid:200)czaj(cid:200)c na ko(cid:241)cu polecenia
znak wi(cid:218)kszo(cid:258)ci ( ) i nazw(cid:218) pliku, w którym maj(cid:200) zosta(cid:202) zapisane dane, tak jak to zosta(cid:239)o przed-
stawione w przyk(cid:239)adzie poni(cid:285)ej.
66
Poleć książkęKup książkęRozdzia(cid:225) 2. • Wykrywanie hostów w sieci
root@KaliLinux:~# ./arp_disc.py eth0 output.txt
root@KaliLinux:~# ls output.txt
output.txt
root@KaliLinux:~# cat output.txt
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
Po zako(cid:241)czeniu dzia(cid:239)ania skryptu i zapisaniu wyników dzia(cid:239)ania w pliku mo(cid:285)esz u(cid:285)y(cid:202) polecenia
ls do sprawdzenia, czy plik wynikowy zosta(cid:239) utworzony, a nast(cid:218)pnie za pomoc(cid:200) polecenia cat
wy(cid:258)wietli(cid:202) zawarto(cid:258)(cid:202) tego pliku. W razie potrzeby mo(cid:285)esz (cid:239)atwo zmodyfikowa(cid:202) skrypt tak,
aby wysy(cid:239)a(cid:239) (cid:285)(cid:200)dania ARP tylko do hostów, których adresy IP znajduj(cid:200) si(cid:218) w pliku tekstowym,
podanym jako argument wywo(cid:239)ania skryptu. Aby to zrobi(cid:202), musimy najpierw utworzy(cid:202) plik
tekstowy, w którym b(cid:218)dzie zapisana lista adresów IP hostów do przeskanowania. T(cid:218) list(cid:218) mo(cid:285)na
przygotowa(cid:202) za pomoc(cid:200) edytorów tekstu takich jak VIM czy Nano. Aby przetestowa(cid:202) popraw-
no(cid:258)(cid:202) dzia(cid:239)ania zmodyfikowanej wersji skryptu, powiniene(cid:258) w tym pliku umie(cid:258)ci(cid:202) adresy za-
równo aktywnych hostów (które odkryli(cid:258)my wcze(cid:258)niej), jak i kilka nieaktywnych adresów IP z tej
podsieci. Plik z list(cid:200) adresów mo(cid:285)esz przygotowa(cid:202) za pomoc(cid:200) jednego z polece(cid:241) przedstawionych
poni(cid:285)ej.
root@KaliLinux:~# vim iplist.txt
root@KaliLinux:~# nano iplist.txt
Po utworzeniu pliku z list(cid:200) adresów IP mo(cid:285)esz za pomoc(cid:200) polecenia cat sprawdzi(cid:202) jego za-
warto(cid:258)(cid:202). Zak(cid:239)adaj(cid:200)c, (cid:285)e plik zosta(cid:239) poprawnie przygotowany i zapisany na dysku, na ekranie po-
winna si(cid:218) pojawi(cid:202) lista zawieraj(cid:200)ca adresy IP, które wpisa(cid:239)e(cid:258) w edytorze tekstu.
root@KaliLinux:~# cat iplist.txt
172.16.36.1
172.16.36.2
172.16.36.232
172.16.36.135
172.16.36.180
172.16.36.203
172.16.36.205
172.16.36.254
Aby utworzy(cid:202) skrypt, który b(cid:218)dzie pobiera(cid:239) list(cid:218) adresów IP do skanowania z pliku tekstowego,
mo(cid:285)esz albo zmodyfikowa(cid:202) skrypt z poprzedniego (cid:202)wiczenia, albo po prostu utworzy(cid:202) nowy
skrypt. Poniewa(cid:285) nasz skrypt b(cid:218)dzie odczytywa(cid:239) dane z pliku na dysku, musimy do niego wsta-
wi(cid:202) kilka nowych polece(cid:241), realizuj(cid:200)cych w j(cid:218)zyku Python operacje plikowe. Przyk(cid:239)ad kodu
takiego skryptu zosta(cid:239) przedstawiony poni(cid:285)ej.
#!/usr/bin/python
import logging
logging.getLogger( scapy.runtime ).setLevel(logging.ERROR)
from scapy.all import *
67
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
if len(sys.argv) != 2:
print Usage - ./arp_disc.py [filename]
print Example - ./arp_disc.py iplist.txt
print Example will perform an ARP scan of the IP addresses listed in iplist.txt
sys.exit()
filename = str(sys.argv[1])
file = open(filename, r )
for addr in file:
answer = sr1(ARP(pdst=addr.strip()),timeout=1,verbose=0)
if answer == None:
pass
else:
print addr.strip()
Jedyn(cid:200) istotn(cid:200) ró(cid:285)nic(cid:200) mi(cid:218)dzy tym skryptem a jego poprzedni(cid:200) wersj(cid:200) jest to, (cid:285)e zamiast
zmiennej interface tworzona jest teraz zmienna obiektowa file. Plik, którego nazwa zosta(cid:239)a
przekazana do skryptu, zostaje otwarty za pomoc(cid:200) funkcji open(). Zauwa(cid:285), (cid:285)e drugim argu-
mentem wywo(cid:239)ania tej funkcji jest litera r, wskazuj(cid:200)ca, (cid:285)e plik powinien zosta(cid:202) otwarty w trybie
tylko do odczytu. Po otwarciu pliku p(cid:218)tla for pobiera z niego kolejne adresy IP, wysy(cid:239)a do
nich (cid:285)(cid:200)danie ARP i wy(cid:258)wietla na ekranie adresy hostów, z których nadesz(cid:239)y odpowiedzi. Nowy
skrypt mo(cid:285)e by(cid:202) uruchamiany w taki sam sposób jak jego poprzednia wersja:
root@KaliLinux:~# ./arp_disc.py
Usage - ./arp_disc.py [filename]
Example - ./arp_disc.py iplist.txt
Example will perform an ARP scan of the IP addresses listed in iplist.txt
Je(cid:285)eli skrypt zostanie uruchomiony bez (cid:285)adnych argumentów wywo(cid:239)ania, na ekranie wy(cid:258)wietlo-
ny zostanie wspomniany wcze(cid:258)niej opis sposobu u(cid:285)ycia. Wynika z niego, (cid:285)e poprawne urucho-
mienie skryptu wymaga podania jednego argumentu, reprezentuj(cid:200)cego nazw(cid:218) pliku tekstowego
z list(cid:200) adresów IP hostów, które powinny by(cid:202) przeskanowane. W przyk(cid:239)adzie przedstawionym
poni(cid:285)ej lista adresów IP znajduje si(cid:218) w pliku o nazwie iplist.txt, zlokalizowanym w bie(cid:285)(cid:200)cym ka-
talogu roboczym.
root@KaliLinux:~# ./arp_disc.py iplist.txt
172.16.36.2
172.16.36.1
172.16.36.132
172.16.36.135
172.16.36.254
Po uruchomieniu skrypt zacznie rozsy(cid:239)a(cid:202) (cid:285)(cid:200)dania ARP do hostów, których adresy IP znajduj(cid:200)
si(cid:218) w pliku, i wy(cid:258)wietli na ekranie adresy hostów, z których otrzymane zostan(cid:200) odpowiedzi.
Ka(cid:285)dy wy(cid:258)wietlony adres IP reprezentuje aktywny system, pod(cid:239)(cid:200)czony do sieci LAN. Podobnie
jak pokazywali(cid:258)my w poprzednim przyk(cid:239)adzie, w razie potrzeby mo(cid:285)esz bez trudu przekierowa(cid:202)
wyniki dzia(cid:239)ania skryptu do pliku na dysku. Aby to zrobi(cid:202), powiniene(cid:258) na ko(cid:241)cu wiersza wy-
wo(cid:239)ania skryptu doda(cid:202) znak wi(cid:218)kszo(cid:258)ci ( ) i nazw(cid:218) pliku, w którym maj(cid:200) zosta(cid:202) zapisane dane.
68
Poleć książkęKup książkęRozdzia(cid:225) 2. • Wykrywanie hostów w sieci
root@KaliLinux:~# ./arp_disc.py iplist.txt output.txt
root@KaliLinux:~# ls output.txt
output.txt
root@KaliLinux:~# cat output.txt
172.16.36.2
172.16.36.1
172.16.36.132
172.16.36.135
172.16.36.254
Po zako(cid:241)czeniu dzia(cid:239)ania skryptu i zapisaniu wyników w pliku mo(cid:285)esz u(cid:285)y(cid:202) polecenia ls do
sprawdzenia, czy plik wynikowy zosta(cid:239) utworzony, a nast(cid:218)pnie za pomoc(cid:200) polecenia cat wy(cid:258)wie-
tli(cid:202) zawarto(cid:258)(cid:202) tego pliku.
Jak to dzia(cid:239)a?
Skanowanie ARP w bibliotece Scapy jest realizowane za pomoc(cid:200) funkcji sr1() (ang. send/receive
one; wy(cid:258)lij/odbierz jeden pakiet). Funkcja po wywo(cid:239)aniu wstrzykuje do sieci pakiet zdefiniowany
przez argument wywo(cid:239)ania i nast(cid:218)pnie oczekuje na nadej(cid:258)cie odpowiedzi. W naszym przy-
padku rozsy(cid:239)ane jest (cid:285)(cid:200)danie ARP typu broadcast. Zastosowanie biblioteki Scapy znakomicie
u(cid:239)atwia implementacj(cid:218) takiego rozwi(cid:200)zania w skryptach i pozwala na jego wykorzystanie do
skanowania wielu systemów naraz.
Skanowanie sieci na warstwie 2.
przy u(cid:285)yciu programu ARPing
ARPing to narz(cid:218)dzie dzia(cid:239)aj(cid:200)ce z poziomu wiersza polece(cid:241) konsoli. Jego funkcjonalno(cid:258)(cid:202) jest
nieco zbli(cid:285)ona do funkcjonalno(cid:258)ci powszechnie u(cid:285)ywanego polecenia ping. Za pomoc(cid:200) tego
narz(cid:218)dzia mo(cid:285)esz sprawdzi(cid:202), czy host o podanym adresie IP z sieci lokalnej jest aktywny. W tej
recepturze poka(cid:285)emy, w jaki sposób mo(cid:285)esz u(cid:285)ywa(cid:202) programu ARPing do wykrywania aktyw-
nych hostów dzia(cid:239)aj(cid:200)cych w sieci lokalnej.
Przygotuj si(cid:218)
Aby mo(cid:285)na by(cid:239)o za pomoc(cid:200) pakietu ARPing przeprowadzi(cid:202) skanowanie na warstwie 2., w sie-
ci lokalnej musi dzia(cid:239)a(cid:202) przynajmniej jeden system, który b(cid:218)dzie odpowiada(cid:239) na (cid:285)(cid:200)dania ARP.
W przedstawionych przyk(cid:239)adach wykorzystujemy kombinacj(cid:218) systemów Linux i Windows. Wi(cid:218)-
cej szczegó(cid:239)owych informacji na temat instalacji i konfiguracji tych systemów w naszym (cid:258)ro-
dowisku testowym znajdziesz w rozdziale 1., w recepturach „Instalacja systemu Metasploitable2”
oraz „Instalacja systemu Windows”. Oprócz tego w tej recepturze b(cid:218)dziemy u(cid:285)ywa(cid:202) edytorów
69
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
tekstu, takich jak VIM czy Nano, do napisania skryptu skanuj(cid:200)cego w j(cid:218)zyku Python i zapisania
go w systemie plików. Wi(cid:218)cej szczegó(cid:239)owych informacji na temat pisania skryptów znajdziesz
w rozdziale 1., w recepturze „Praca z edytorami tekstu VIM i Nano”.
Jak to zrobi(cid:202)?
ARPing to narz(cid:218)dzie, które pozwala na wysy(cid:239)anie (cid:285)(cid:200)da(cid:241) ARP i sprawdzanie, czy host docelowy
jest aktywny i czy odpowiada na przes(cid:239)ane (cid:285)(cid:200)dania. Do poprawnego dzia(cid:239)ania program ARPing
wymaga podania argumentu wywo(cid:239)ania reprezentuj(cid:200)cego adres IP skanowanego hosta, tak
jak to zosta(cid:239)o zaprezentowane poni(cid:285)ej.
root@KaliLinux:~# arping 172.16.36.135 -c 1
ARPING 172.16.36.135
60 bytes from 00:0c:29:3d:84:32 (172.16.36.135): index=0 time=249.000 usec
--- 172.16.36.135 statistics ---
1 packets transmitted, 1 packets received, 0 unanswered (0 extra)
W przedstawionym przyk(cid:239)adzie do adresu rozg(cid:239)oszeniowego przesy(cid:239)ane jest pojedyncze (cid:285)(cid:200)danie
ARP, zawieraj(cid:200)ce (cid:285)(cid:200)danie przes(cid:239)ania fizycznego adresu hosta o adresie IP 172.16.36.135. Jak (cid:239)a-
two zauwa(cid:285)y(cid:202) w wynikach dzia(cid:239)ania, odpowied(cid:283) na przes(cid:239)ane (cid:285)(cid:200)danie nades(cid:239)a(cid:239) host o adresie
MAC 00:0C:29:3D:84:32. Program ARPing mo(cid:285)e by(cid:202) jeszcze bardziej efektywnie wykorzysty-
wany do skanowania sieci na warstwie 2., je(cid:285)eli zostanie u(cid:285)yty w skrypcie pow(cid:239)oki bash ska-
nuj(cid:200)cym wiele hostów jednocze(cid:258)nie. Aby skorzysta(cid:202) z tego narz(cid:218)dzia w skrypcie do skanowania
wielu hostów, musimy najpierw znale(cid:283)(cid:202) w wynikach dzia(cid:239)ania unikatowy ci(cid:200)g znaków, który
pozwoli nam na odró(cid:285)nienie sytuacji, gdy otrzymamy odpowied(cid:283) z aktywnego hosta, od tej,
kiedy nie otrzymujemy (cid:285)adnej odpowiedzi na wys(cid:239)ane (cid:285)(cid:200)danie. Aby znale(cid:283)(cid:202) taki ci(cid:200)g znaków,
powiniene(cid:258) wykona(cid:202) polecenie arping, podaj(cid:200)c jako argument wywo(cid:239)ania adres IP dowolnego
nieaktywnego hosta, tak jak to zosta(cid:239)o przedstawione poni(cid:285)ej.
root@KaliLinux:~# arping 172.16.36.136 -c 1
ARPING 172.16.36.136
--- 172.16.36.136 statistics ---
1 packets transmitted, 0 packets received, 100 unanswered (0 extra)
Analizuj(cid:200)c otrzymane odpowiedzi, (cid:239)atwo zauwa(cid:285)y(cid:202), (cid:285)e ci(cid:200)g znaków bytes from pojawia si(cid:218)
w wynikach dzia(cid:239)ania polecenia arping tylko w sytuacji, kiedy badany adres IP nale(cid:285)y do ak-
tywnego hosta, a co wi(cid:218)cej, w tym samym wierszu znajduje si(cid:218) równie(cid:285) adres IP takiego hosta.
Teraz, korzystaj(cid:200)c z polecenia grep, mo(cid:285)emy (cid:239)atwo wyodr(cid:218)bni(cid:202) z wyników dzia(cid:239)ania programu
ARPing wiersze zawieraj(cid:200)ce adresy IP aktywnych hostów, tak jak to zosta(cid:239)o przedstawione
w przyk(cid:239)adzie poni(cid:285)ej.
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep bytes from
60 bytes from 00:0c:29:3d:84:32 (172.16.36.135): index=0 time=291.000 usec
root@KaliLinux:~# arping -c 1 172.16.36.136 | grep bytes from
root@KaliLinux:~#
70
Poleć książkęKup książkęRozdzia(cid:225) 2. • Wykrywanie hostów w sieci
Zastosowanie polecenia grep do wyszukiwania w wynikach dzia(cid:239)ania polecenia arping ci(cid:200)gu
znaków bytes from pozwala na wy(cid:258)wietlenie wierszy zawieraj(cid:200)cych adresy IP aktywnych hostów.
Po wykonaniu takiej samej operacji dla nieaktywnego adresu IP nie zostaj(cid:200) zwrócone (cid:285)adne
wyniki, co zosta(cid:239)o zilustrowane za pomoc(cid:200) drugiego polecenia w przyk(cid:239)adzie powy(cid:285)ej. Teraz,
korzystaj(cid:200)c z polecenia cut z odpowiednio zdefiniowanym separatorem (opcja -d) i numerem
pola (opcja -f), mo(cid:285)emy (cid:239)atwo wyodr(cid:218)bni(cid:202) z tego ci(cid:200)gu znaków sam adres IP. Polecenie cut jest
wykorzystywane w pow(cid:239)oce bash do dzielenia wierszy tekstu na elementy sk(cid:239)adowe w oparciu
o podany separator i wy(cid:258)wietlania elementów o podanych numerach pól. Poprzez odpowiednie
potokowanie polece(cid:241) pow(cid:239)oki mo(cid:285)emy w (cid:239)atwy sposób wyodr(cid:218)bni(cid:202) z wyników dzia(cid:239)ania polece-
nia arping adres MAC aktywnego hosta. Przyk(cid:239)ad takiego rozwi(cid:200)zania zosta(cid:239) pokazany poni(cid:285)ej.
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep bytes from
60 bytes from 00:0c:29:3d:84:32 (172.16.36.135): index=0 time=10.000 usec
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep bytes from | cut -d -f 4
00:0c:29:3d:84:32
W podobny sposób mo(cid:285)emy bez problemu wyodr(cid:218)bni(cid:202) adres IP aktywnego hosta; aby to zro-
bi(cid:202), musimy tylko nieco zmodyfikowa(cid:202) definicje separatorów i numery pól w wywo(cid:239)aniach
polecenia cut:
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep bytes from
60 bytes from 00:0c:29:3d:84:32 (172.16.36.135): index=0 time=328.000 usec
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep bytes from | cut -d -f 5
(172.16.36.135):
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep bytes from | cut -d -f 5 |
cut -d ( -f 2
172.16.36.135):
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep bytes from | cut -d -f 5 |
cut -d ( -f 2 | cut -d ) -f 1
172.16.36.135
Po znalezieniu sposobu na wyodr(cid:218)bnienie adresu IP z wyników dzia(cid:239)ania polecenia arping
mo(cid:285)emy z (cid:239)atwo(cid:258)ci(cid:200) zaimplementowa(cid:202) takie rozwi(cid:200)zanie w p(cid:218)tli w skrypcie pow(cid:239)oki bash,
który b(cid:218)dzie skanowa(cid:239) ca(cid:239)(cid:200) podsie(cid:202) lokaln(cid:200) i wy(cid:258)wietla(cid:239) adresy IP aktywnych hostów. Przyk(cid:239)ad
takiego skryptu zosta(cid:239) przedstawiony na listingu poni(cid:285)ej.
#!/bin/bash
if [ $# -ne 1 ]; then
echo Usage - ./arping.sh [interface]
echo Example - ./arping.sh eth0
echo Example will perform an ARP scan of the local subnet to which
eth0 is assigned
exit
fi
interface=$1
prefix=$(ifconfig $interface | grep inet addr | cut -d : -f 2 | cut -d -f 1 |
cut -d . -f 1-3)
71
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
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
done
W pierwszym wierszu naszego przyk(cid:239)adowego skryptu zdefiniowana zostaje lokalizacja po-
w(cid:239)oki bash. Dalej znajdziesz blok kodu, którego zadaniem jest ustalenie, czy w wierszu wy-
wo(cid:239)ania skryptu zosta(cid:239) podany odpowiedni argument wywo(cid:239)ania. Jest to realizowane poprzez
proste sprawdzenie, czy liczba argumentów wywo(cid:239)ania jest ró(cid:285)na od 1. Je(cid:285)eli oczekiwany ar-
gument wywo(cid:239)ania nie zosta(cid:239) podany, na ekranie wy(cid:258)wietlany jest opis sposobu u(cid:285)ycia i skrypt
ko(cid:241)czy dzia(cid:239)anie. W opisie dzia(cid:239)ania mo(cid:285)emy znale(cid:283)(cid:202) informacj(cid:218), (cid:285)e argumentem wywo(cid:239)ania
skryptu powinna by(cid:202) nazwa lokalnego interfejsu sieciowego. W kolejnym bloku kodu podany
argument wywo(cid:239)ania jest przypisywany do zmiennej o nazwie interface. Warto(cid:258)(cid:202) tej zmien-
nej jest nast(cid:218)pnie wykorzystywana jako argument wywo(cid:239)ania polecenia ifconfig, z którego
wyników dzia(cid:239)ania jest wyodr(cid:218)bniany prefiks adresu podsieci lokalnej. Na przyk(cid:239)ad je(cid:285)eli ad-
res IP interfejsu sieciowego to 192.168.11.4, do zmiennej prefix przypisany zostanie adres
192.168.11. Nast(cid:218)pnie do generowania kolejnych warto(cid:258)ci ostatniego oktetu adresu IP lokal-
nej podsieci /24 wykorzystywana jest p(cid:218)tla for. Dla ka(cid:285)dego z wygenerowanych adresów IP
wywo(cid:239)ywane jest polecenie arping. Wyniki dzia(cid:239)ania tego polecenia s(cid:200) potokowane do polecenia
grep, które „przepuszcza” dalej tylko wiersze zawieraj(cid:200)ce ci(cid:200)g znaków bytes from (a jak wiemy
z naszych wcze(cid:258)niejszych rozwa(cid:285)a(cid:241), takie wiersze zawieraj(cid:200) adresy IP aktywnych hostów w sieci).
Wyniki dzia(cid:239)ania polecenia grep s(cid:200) nast(cid:218)pnie potokowane przez seri(cid:218) polece(cid:241) cut, które wyod-
r(cid:218)bniaj(cid:200) tylko adres IP. Zwró(cid:202) uwag(cid:218), (cid:285)e blok polece(cid:241) p(cid:218)tli for zamiast (cid:258)rednikiem zosta(cid:239) za-
ko(cid:241)czony znakiem , dzi(cid:218)ki czemu zadania realizowane w p(cid:218)tli b(cid:218)d(cid:200) wykonywane równolegle,
a nie sekwencyjnie, co w drastyczny sposób wp(cid:239)ynie na zredukowanie czasu niezb(cid:218)dnego do
przeskanowania podanego zakresu adresów IP. Poni(cid:285)ej przedstawiamy sposób wywo(cid:239)ania na-
szego skryptu.
root@KaliLinux:~# ./arping.sh
Usage - ./arping.sh [interface]
Example - ./arping.sh eth0
Example will perform an ARP scan of the local subnet to which eth0 is assigned
root@KaliLinux:~# ./arping.sh eth0
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
W razie potrzeby mo(cid:285)esz (cid:239)atwo przekierowa(cid:202) wyniki dzia(cid:239)ania skryptu do pliku tekstowego
na dysku. Aby to zrobi(cid:202), powiniene(cid:258) na ko(cid:241)cu wiersza wywo(cid:239)ania skryptu doda(cid:202) znak wi(cid:218)k-
szo(cid:258)ci ( ) i nazw(cid:218) pliku, w którym maj(cid:200) zosta(cid:202) zapisane dane. Przyk(cid:239)ad takiego rozwi(cid:200)zania zosta(cid:239)
przedstawiony poni(cid:285)ej.
root@KaliLinux:~# ./arping.sh eth0 output.txt
root@KaliLinux:~# ls output.txt
output.txt
root@KaliLinux:~# cat output.txt
72
Poleć książkęKup książkęRozdzia(cid:225) 2. • Wykrywanie hostów w sieci
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
Po zako(cid:241)czeniu dzia(cid:239)ania skryptu i zapisaniu wyników dzia(cid:239)ania w pliku mo(cid:285)esz u(cid:285)y(cid:202) polece-
nia ls do sprawdzenia, czy plik wynikowy zosta(cid:239) utworzony, a nast(cid:218)pnie za pomoc(cid:200) polecenia
cat wy(cid:258)wietli(cid:202) zawarto(cid:258)(cid:202) tego pliku. W razie potrzeby mo(cid:285)esz (cid:239)atwo zmodyfikowa(cid:202) ten skrypt
tak, aby wysy(cid:239)a(cid:239) (cid:285)(cid:200)dania ARP tylko do hostów, których adresy IP znajduj(cid:200) si(cid:218) w pliku tekstowym
podanym jako argument wywo(cid:239)ania. By to zrobi(cid:202), musisz utworzy(cid:202) plik tekstowy, w którym
b(cid:218)dzie zapisana lista adresów IP hostów do przeskanowania. Mo(cid:285)esz równie(cid:285) u(cid:285)y(cid:202) tego sa-
mego pliku z list(cid:200) adresów IP, z którego korzystali(cid:258)my wcze(cid:258)niej w przyk(cid:239)adzie ze skryptem
Scapy, omawianym w poprzedniej recepturze.
#!/bin/bash
if [ $# -ne 1 ]; then
echo Usage - ./arping.sh [input file]
echo Example - ./arping.sh iplist.txt
echo Example will perform an ARP scan of all IP addresses defined in iplist.txt
exit
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
Jedyn(cid:200) wi(cid:218)ksz(cid:200) ró(cid:285)nic(cid:200) pomi(cid:218)dzy tym skryptem a jego poprzedni(cid:200) wersj(cid:200) jest to, (cid:285)e zamiast
nazwy interfejsu sieciowego podczas wywo(cid:239)ania skryptu musisz poda(cid:202) nazw(cid:218) pliku tekstowe-
go zawieraj(cid:200)cego list(cid:218) adresów IP do sprawdzenia. Argument wywo(cid:239)ania skryptu jest przeka-
zywany do zmiennej file. Nast(cid:218)pnie skrypt za pomoc(cid:200) p(cid:218)tli for przechodzi kolejno przez
wszystkie adresy IP zapisane w pliku i dla ka(cid:285)dego z nich wywo(cid:239)uje polecenie arping. Aby
uruchomi(cid:202) skrypt, powiniene(cid:258) w wierszu wywo(cid:239)ania wpisa(cid:202) kropk(cid:218), prawy uko(cid:258)nik i nazw(cid:218)
skryptu, tak jak to zosta(cid:239)o przedstawione w przyk(cid:239)adzie poni(cid:285)ej.
root@KaliLinux:~# ./arping.sh
Usage - ./arping.sh [input file]
Example - ./arping.sh iplist.txt
Example will perform an ARP scan of all IP addresses defined in iplist.txt
root@KaliLinux:~# ./arping.sh iplist.txt
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
73
Poleć książkęKup książkęSkanowanie sieci z Kali Linux. Receptury
Je(cid:285)eli skrypt zostanie uruchomiony bez (cid:285)adnych argumentów, na ekranie zostanie wy(cid:258)wie-
tlony krótki opis sposobu u(cid:285)ycia, wskazuj(cid:200)cy, (cid:285)e argumentem wywo(cid:239)ania powinien by(cid:202) plik
tekstowy zawieraj(cid:200)cy list(cid:218) adresów IP. Po ponownym wywo(cid:239)aniu skryptu z w(cid:239)a(cid:258)ciwym argu-
mentem skrypt rozpoczyna dzia(cid:239)anie i wy(cid:258)wietla na ekranie list(cid:218) adresów IP aktywnych ho-
stów w sieci lokalnej, wybranych z listy adresów IP zawartych w pliku. W razie potrzeby mo(cid:285)esz
bez trudu przekierowa(cid:202) wyniki dzia(cid:239)ania skryptu do pliku na dysku. Aby to zrobi(cid:202), powiniene(cid:258) na
ko(cid:241)cu wiersza wywo(cid:239)ania skryptu doda(cid:202) znak wi(cid:218)kszo(cid:258)ci ( ) i nazw(cid:218) pliku, w którym maj(cid:200) zosta(cid:202)
zapisane dane,
Pobierz darmowy fragment (pdf)