
Vorwort
Es war einmal in den frühen 2000er Jahren, als viele von ihnen die Tatsache unterhielten, dass sie regelmäßig die Netzwerke ihres Anbieters und manchmal sogar noch weiter entfernte Ziele „scannten“, um Windows-Computer und -Ressourcen (SMB) zu erkennen, die zum Lesen (Schreiben) verfügbar sind. Der Suchprozess war primitiv: Ein Bereich von IP-Adressen oder eine Netzwerkmaske wurde festgelegt, und über verschiedene Tools - LANguard-Netzwerkscanner, xIntruder und dergleichen - wurden Adressen gescannt und Server gefunden. Oft stellte sich heraus, dass die erkannten Maschinen zum Lesen und seltener zum Schreiben verschiedener Netzwerkressourcen (Festplatten, Drucker, Verzeichnisse) verfügbar waren. Durch eine anonyme Sitzung, über IPC $ und den Benutzer "Gast" war es möglich, Ressourcen auf dem Computer zu übertragen, manchmal gab es Mitglieder der "Administratoren" ohne Kennwörter, und manchmal war es nach einem "aktiveren" Einfluss auf die erkannten Computer möglich, Server unter Windows NT 4.0 oder Windows zu finden 2000 Server. Wenn das Glück darauf abzielte, Computer mit dem damals weit verbreiteten Windows 98 zu finden, wurde es einfacher - in jenen Tagen enthielt das angegebene Betriebssystem viele verschiedene Sicherheitslücken, einschließlich der Implementierung der Arbeit mit SMB. Bruteforce für den Zugriff auf die Ressource wurde sogar bei Einwahl in wenigen Minuten ausgeführt Verbindungen. Für diejenigen, die in die alten Zeiten eintauchen möchten, wird ausführlich über den "Zugriff" auf Windows 9x - Hacking Exposed: Network Security Secrets & Solutions geschrieben. Kapitel 4: Hacken von Windows 95/98 und mir . Aber der Rest des Artikels handelt nicht davon.
Ich hätte nie gedacht, dass 2019 eine solche "Unterhaltung" möglich ist. Die Ähnlichkeit liegt in der Leichtigkeit, die verfügbaren Ressourcen anderer Leute für alle Neugierigen zu finden. Darüber hinaus werden wir uns nicht auf einen Trend konzentrieren, der in den letzten zwei Jahren populär war - die Suche nach MongoDB- oder Elasticsearch-Datenbanken, die für den Zugriff geöffnet sind -, sondern auf einen etwas bodenständigeren Service.
Ferner schlage ich vor, das gesamte Verfahren und ihre ethische Norm nicht zu bewerten. Ich stelle fest, dass dieser Beitrag kein Aufruf zum Handeln ist, der einigen Artikeln des Strafgesetzbuchs der Russischen Föderation oder ähnlichen Normen aus den Gesetzen anderer Staaten zugeschrieben werden kann.
Netzwerkdateisystem (NFS)
Network File System (NFS) - Ein Protokoll für den Netzwerkzugriff auf Dateisysteme, mit dem Sie Remote-Dateisysteme über ein Netzwerk verbinden (bereitstellen) können, Benutzern Zugriff auf Dateien gewähren und mit diesen Dateien auf die gleiche Weise wie mit lokalen Dateien arbeiten können.
Die meisten auf dem Markt verfügbaren Network-Attached Storage (NAS) unterstützen natürlich NFS und bieten Zugriff auf lokale Ressourcen sowie auf jeden Server mit einem Betriebssystem, auf dem der NFS-Dienst bereitgestellt werden kann.
Die Einstellungen für den Zugriff auf Serverressourcen von jedem Ubuntu-Betriebssystem und jeder IP-Adresse 192.168.1.1 sind in der Datei / etc / export enthalten und haben folgende Einträge:
- / data / place1 192.168.1.0/255.255.255.0(rw,no_subtree_check,nohide,async) 192.168.101.0/255.255.255.0(rw,no_subtree_check,nohide,async)
- data / place2 192.168.1.0/255.255.255.0(rw,no_subtree_check,nohide,async) 192.168.101.0/255.255.255.0(rw,no_subtree_check,nohide,async)
In diesem Fall ist der NFS-Zugriff auf den Server und seine Ressource / Daten / Ort1 für Clients mit IP-Adressen aus den Netzwerken 192.168.1.0/255.255.255.0, 192.168.101.0/255.255.255.0 möglich.
Hängen Sie die Remote-Ressource in ein lokales Verzeichnis ein, z. B. / home / user / example. Wenn sich der Client in einem zulässigen Subnetz befindet und der Client für NFS installiert ist, ist dies über den Befehl (Ubuntu) möglich:
mount -t nfs 192.168.1.1:/data/place1 /home/user/example
Wenn anstelle von IP-Adressen * oder (jeder) angegeben wird, kann häufig jeder Client eine Remote-Ressource in sein System einbinden.
Der Benutzer (z. B. unter Ubuntu) muss nur das Terminal eingeben: showmount -e ip-target und Informationen zu verfügbaren Ressourcen auf dem Server abrufen (Exportliste des Servers).
Zum Beispiel:
showmount -e 81.24..
Export list for 81.24..:
/home/admin 192.168.52.1/24
Somit wird das folgende Szenario gebildet: Um Server zu erkennen, auf denen NFS ausgeführt wird, die verfügbaren Ressourcen auf den Servern zu ermitteln, das Ergebnis in einem einzigen Ausgabeformular zu konsolidieren und dann je nach Situation fortzufahren.
Was kann auf den Ressourcen sein - offensichtlich alles:
- persönliche Dateien von Internetnutzern, beispielsweise bei "offenen" NAS-Geräten;
- Verzeichnisse mit Dateien ganzer Unternehmen, Datenbanken, Datenbankarchive;
- oft Verzeichnisse mit Adressen / home / * (manchmal mit Schlüsseln in .ssh und beschreibbar);
- Verzeichnisse mit Dateien von Videoüberwachungssystemen;
- andere ...
IP-Adressen abrufen
In Bezug auf die Erkennung von Servern mit NFS im globalen Internet gibt es zwei Möglichkeiten: unabhängig voneinander mithilfe verschiedener Tools und vorgefertigte Scanergebnisse, Datenbanken und Dienste von Drittanbietern. Tatsächlich kommt es darauf an, eine Liste der IP-Adressen zu erhalten. Im lokalen Netzwerk halte ich die Option für offensichtlich - handeln Sie unabhängig.
Die offenen TCP-Ports 111, 2049 können als Beweis für die Funktionsweise des NFS-Dienstes dienen.
Um unabhängig eine Liste der Server-IP-Adressen zu erhalten, reicht es aus, den Adressbereich oder das gesamte Subnetz auf das Vorhandensein der angegebenen offenen Ports zu überprüfen. Jedes Werkzeug ist dafür geeignet: nmap, masscan und so weiter.
Mit dem Befehl masscan -p111,2049 200.26.1XX.0/24 —rate=10000
Netzwerk 200.26.1XX.0 / 24 beispielsweise einige Sekunden lang nach offenen Ports 111, 2049 durchsucht:
Scanning 256 hosts [2 ports/host]
Discovered open port 2049/tcp on 200.26.1XX.28
Discovered open port 111/tcp on 200.26.1XX.15
Discovered open port 111/tcp on 200.26.1XX.20
Discovered open port 111/tcp on 200.26.1XX.28
Neben jeder der erkannten IP-Adressen kann der folgende Befehl angewendet werden:
showmount --no-headers -e 200.26.1XX.28
Ergebnis:
/usr/common *
Natürlich ist es möglich, Millionen von IP-Adressen des Internetraums selbst zu scannen, aber dies ist nicht der schnellste Weg, und dann kann der wunderbare Shodan- Dienst die Lösung für die Unteraufgabe sein, es gibt natürlich andere, aber diese mit sehr praktischer Syntax und API . Sich mit der Beschreibung der Funktionen des Dienstes zu befassen, ist nicht das Ziel des Artikels. Kurz gesagt - der Dienst bietet eine erweiterte Suche nach Geräten, die mit dem Internet verbunden sind. Suchkriterien können Netzwerkkennungen und andere Metadaten sein: Seriennummern von Zertifikaten und dergleichen. Shodan hat viele Funktionen für die gezielte Suche, aber ich habe keine separate Suche in NFS gefunden, da es beispielsweise ein Produktkriterium mit einem Produktnamen gibt: Mongodb, Elastic oder Apache. Daher können Sie über Web NFS nach folgenden Abfragen suchen: nfs, tcp 2049, tcp 111, Portmap: 2049 usw., wie Sie möchten .

Oder installieren Sie den Shodan-Client (CLI), initialisieren Sie Ihre KEY-API für den Dienst und rufen Sie eine Suche über die Befehlszeile auf, zum Beispiel:
- shodan search --fields ip_str, port Portmap: 2049
- shodan search --fields ip_str, port --separator, nfs
Ergebnis:
139.196.154.23,111,
198.27.116.37,111,
95.211.192.96,111,
80.23.66.122,111,
210.116.82.97,111,
192.198.82.3,111,
165.227.67.242.111,
116.12.48.9.111,
85.34.250.102.111,
182,75,249,197,111,
192.151.212.175,111,
119.216.107.127,111,
217,59,68,2,111,
178,159,12,97,111,
...
Es ist also verständlich, wie die IP-Adresslisten von Geräten mit einem gültigen NFS-Dienst abgerufen werden.
Es gibt viele Möglichkeiten, dieses Problem massenhaft zu lösen: Bash-Skripte schreiben, eine knifflige Pipeline aus einer Befehlskette mit einem Aufruf von showmount organisieren und andere Optionen - wer mag was?
In meiner Forschung habe ich dieses Problem in Python auf zwei verschiedene Arten gelöst. Der erste besteht darin, über ssh mit einem NFS-Client eine Verbindung zu Ihrem persönlichen Ubuntu-Server herzustellen und dann den Befehl showmount mit dem gewünschten Pool von IP-Adressen aufzurufen. Die zweite Lösung ist in reinem Python.
Ich nehme an, dass sich eine Frage stellen könnte: Warum ist es so schwierig, warum in Python?
Denn wie in meinem vorherigen Artikel über Habr werde ich das Lampyre-Tool verwenden, für das am 26. Februar eine API veröffentlicht wurde , mit der Sie Ihre Module in Python auf die Plattform schreiben können.
LampyreKurz über Lampyre - eine Softwareplattform für OSINT und Datenanalyse mit einem "dicken" Client für Windows, ein Analogon des bekannten und beliebten Tools für denselben Zweck - Maltego. Wie in Maltego bietet Lampyre "out of the box" eine Reihe von Anfragen für verschiedene Dienste. Abfragen entsprechen konzeptionell Transformationen von einem bekannteren Produkt. Wenn etwas fehlt, können Sie jetzt Ihre eigenen Anfragen schreiben. Mit Lampyre gelieferte Anforderungen werden auf der Plattforminfrastruktur ausgeführt und unabhängig geschrieben - auf der Maschine. Das heißt, der Benutzer muss Python installiert und alle erforderlichen Bibliotheken im Code verwendet haben.
Ich habe beschlossen, die Funktionen der API zu testen. Der entscheidende Punkt ist, dass Lampyre bereits mehrere "Anfragen" an Shodan hat, zumal der Benutzer keine eigene KEY-API vom Dienst benötigen muss. Auf diese Weise können Sie mit einer Anforderung Listen mit IP-Adressen abrufen, während der NFS-Dienst ausgelöst wird. Mit der zweiten Anforderung überprüft das von mir geschriebene Modul die verfügbaren Ressourcen und visualisiert das Ergebnis mit den Eigenschaften der Ressourcen in demselben Diagramm.
Und hier Korea
Während der Suche von Shodan und dem Testen des Moduls wurde es interessant, die Situation mit der Qualität und Quantität der Scanergebnisse des Shodan-Dienstes in asiatischen Ländern zu sehen, wie die Dinge mit unsicheren Ressourcen sind. Die Wahl fiel auf die Republik Korea. Ich glaube, man muss nicht sagen, dass Südkorea ein sehr technologisch fortgeschrittenes Land ist, und ich schlug vor, dass Sie in seinen Netzwerken etwas Interessantes finden können.
Suche nach Shodan, in Abfrage: nfs , in Land: Republik Korea Code, kr

Das Ergebnis ließ nicht lange auf sich warten (im Bild unten nur ein Teil des allgemeinen Schemas).

Hostliste:
- psi.kaist.ac.kr
- hulk.kaist.ac.kr
- messi.kaist.ac.kr
- Marvel.kaist.ac.kr
- kaist.ac.kr
- ai1.kaist.ac.kr
- jarvis3.kaist.ac.kr
- baraddur.kaist.ac.kr
- rho.kaist.ac.kr
- jarvis.kaist.ac.kr
Alle sind, wie sowohl in der Grafik als auch in den Namen zu sehen ist, als AS1781 - Korea Advanced Institute of Science and Technology aufgeführt

Korea Advanced Technology Institute - Südkoreas führende akademische und Forschungsuniversität in Daejeon steht in der zweiten Zeile des nationalen Rankings in Südkorea. Die Universität ist durchweg in 5% der besten Bildungseinrichtungen in Südkorea vertreten.
Wir verwenden die angegebenen IP-Adressen als Eingabeargumente für das geschriebene Modul "Explore: NFS (SSH)" und als Ergebnis:

Ich habe schnell ein solches Schema für die Anzeige der Ergebnisse einer Tabelle in einem Diagramm erstellt (über Schemata und Prinzipien für die Erstellung von Diagrammen später in diesem Artikel).

Das Ergebnis der Kombination mit einem Shodan-Schema

Bei der Analyse der Scheitelpunkte und Beziehungen des Diagramms wird deutlich, an welchen Adressen die / home-Ressource verfügbar und für alle zugänglich ist (*).
Ändern Sie zur besseren visuellen Wahrnehmung die Eigenschaften von Diagrammobjekten und andere Einstellungen des Diagramms:

Natürlich habe ich abwechselnd einen Teil der Ressourcen auf einem meiner Server bereitgestellt und angefangen zu studieren. Es stellte sich fast überall gleich heraus - Benutzerverzeichnisse: asm, hoo, hyshin, jay, jiwon, jkhee110, jokangjin, kmh603, ksm782, lee, linus yoosj, ysha, zinnia7.
Fast alle Verzeichnisse mit Dateien wurden gelesen und geschrieben. Einige Benutzer in .ssh hatten autorisierte_Schlüssel-Dateien mit Schreibzugriff auf sie.
Ich habe meinen Schlüssel generiert, ihn auf die autorisierten Schlüssel eines der Benutzer kopiert und über ssh an Port 2222 mit dem Server verbunden. Ich habe die Portnummer aus den Daten von Shodan erhalten.
Benutzer, Netzwerkeinstellungen:

Hosts im Netzwerk:

Die Datei / etc / exportiert und fährt:

Datei / etc / fstab und Betriebssystem:

Ich glaube, dass dies ein Netzwerk einer Abteilung für Doktoranden oder Studenten ist, und sie führen eine Art von Berechnungen auf den Servern durch, da es viele verschiedene Python-Quellen gibt, die mit der GPU und der Anaconda-Distribution zusammenhängen, und so weiter. Ich habe nicht alles studiert und angefangen zu überlegen, was ich mit all dem anfangen soll. Natürlich konnte ich größtenteils „laufen“ (vielleicht konnte ich mir etwas Exotischeres vorstellen) , aber es hat mich nicht sonderlich interessiert. Und ich habe mir Folgendes ausgedacht: Da das Institut wissenschaftlich und fortgeschritten ist, sollte es Bereiche der Informationssicherheit geben. In der Tat sogar ein ganzes Labor: das Software Security Lab und sein Leiter Sang Kil Cha
Ich habe beschlossen, ihm einen Brief zu schreiben, und so heißt es, dass es sehr gefährlich ist, allen im Internet zu erlauben, NFS-Ressourcen mit Lese- und Schreibberechtigungen zu verbinden. Anscheinend müssen Sie etwas reparieren, Screenshots anhängen und senden.
Buchstabe 1Lieber Sang Kil Cha,
Ich schreibe Ihnen, da Sie auf der Website kaist.ac.kr als führendes SoftSec-Labor bei KAIST bezeichnet werden, und ich glaube, dass die folgende Angelegenheit Ihr Anliegen ist.
Während unserer Forschung auf dem Gebiet der Informationssicherheit wurden unbeabsichtigt und zufällig folgende Server entdeckt:
143.248.247.131 - psi.kaist.ac.kr
143.248.247.4 - jarvis3.kaist.ac.kr
143.248.247.169
143.248.247.223
143.248.247.235
143.248.247.251 - Marvel.kaist.ac.kr
143.248.247.239 - jarvis.kaist.ac.kr
143.248.247.194 - hulk.kaist.ac.kr
143.248.2.23
Auf all diesen Servern ist der NFS-Dienst (Network File System) betriebsbereit.
Die Sicherheitsstufe für den Zugriff auf diese Server ist unglaublich niedrig.
Auf die Home-Verzeichnisse dieser Server mit all ihren Inhalten kann jeder über das Internet zugreifen.
Beispiel: Einstellungen nfs - / etc / exportiert 143.248.247.251 -> / home oder für 143.248.247.239
showmount -e 143.248.247.239
Exportliste für 143.248.247.239:
/ Daten
/ home / appl
Benutzerverzeichnisse der meisten Server können gelesen und geschrieben werden, einschließlich ihrer Unterverzeichnisse, die öffentliche und private SSH-Zugriffsschlüssel enthalten.
Durch das Bearbeiten von Dateien können neue Zugriffsschlüssel hinzugefügt und Remote-SSH-Zugriff auf die Server und anschließend auf einige innere KAIST-Subnetze gewährt werden.
Nur zum Testen eines solchen flachen Zugriffs wurden keine Änderungen vorgenommen, keine Daten bearbeitet, kopiert oder gelöscht, die Infrastruktur wurde nicht beschädigt.
In den angehängten Dateien finden Sie eine Bestätigung und einen Beweis.
Ich habe keine Anforderungen oder Ansprüche, empfehle jedoch, die Netzwerksicherheitsstufe erheblich zu verbessern.
Bald antworteten sie mir, kostenlose Übersetzung: Danke, wir werden an jeden weiterleiten.
Antwort 1Danke, dass du mich informiert hast! Ich werde diese E-Mail an jemanden weiterleiten, der für unser Netzwerk und unsere Sicherheit verantwortlich ist. Am besten Sang Kil
Bevor ich diesen Artikel veröffentlichte, habe ich mich entschlossen zu überprüfen, was sich geändert hat:

Der Zugriff auf Ressourcen war zwar nur von Computern im internen Netzwerk aus zulässig, aber was ist mit dem Server 143.248.247.251? Gemäß den Einträgen in der Tabelle bleiben die Hostressourcen in den NFS-Einstellungen *. Ich habe eine andere Version der „Zuordnung“ der Tabelle in ein Diagramm skizziert:

Was sind die Änderungen in "Mapping": NFS-Objekte "kleben" jetzt mit zwei identischen Attributen zusammen - IP- und NFS-Pfad. Das Statusobjekt wird nur erstellt, wenn das Wertattribut, das den Inhalt der Rohdatensatzspalte enthält, den Wert " * " enthält.
Und die Grafik in der Tabelle erscheint in einer neuen Form:

Jetzt ist übrigens die Adressierung des internen Netzwerks deutlich sichtbar geworden, und auf dem Server 143.248.247.251 ist es auch möglich, den Inhalt von Benutzerverzeichnissen und Dateien zu bearbeiten. Grundsätzlich blieben die Möglichkeiten unverändert.
Und so schreibe ich einen zweiten Brief an Herrn Sang Kil Cha mit einem ähnlichen ersten Inhalt und stelle fest, dass einige der Ereignisse in einem Artikel über die beliebte habr.com-Ressource vorgestellt werden:
Buchstabe 2Lieber Sang Kil Cha, guten Tag.
Ich habe mich entschlossen, nachzuschauen, ob sich nach meiner E-Mail an Sie etwas geändert hat, und tatsächlich wurden die Zugriffseinstellungen geändert. Aber anscheinend haben die Sicherheitsingenieure die IP-Adresse 143.248.247.251 ausgelassen und ihre Einstellungen sind gleich geblieben. Bitte sichern Sie auch diese IP, damit keine Fremden darauf zugreifen können.
Ich schreibe einen Artikel zum Thema Informationssicherheit und werde ihn unter https://habr.com veröffentlichen . Dies ist eine sehr beliebte Website in Russland. Der Artikel enthält einige Passagen zur Frage der geringen Qualität der NFS-Zugriffseinstellungen sowie einige Beispiele für den Fall mit Ihren Servern. Ich werde Ihnen den Link zu meinem Artikel senden, wenn er veröffentlicht wird.
So verwenden Sie die Lampyre-API und schreiben Ihr Modul
Das Modul muss eine Liste von IP-Adressen oder eine Liste von Subnetzen in Form von 192.168.0 / 24 als Eingabe akzeptieren. In diesem Stadium müssen die Eingabedaten für die Beteiligung von Zeichenfolgen an IP-Adressen im Fall eines Subnetzes unabhängig im Code validiert werden. In IP-Liste konvertieren.
Im nächsten Schritt wird über die Python- Paramiko- Bibliothek auf den persönlichen SSH-Server zugegriffen und der Befehl wird sequentiell aufgerufen (es wird versucht, im Modulkonzeptcode eine Asynchronisierung durchzuführen ):
timeout {timeouts} showmount --no-headers -e {ip}
Die Ausgabe des Ergebnisses wird über Python-Code in die Ausgabestruktur Tabelle analysiert: eine Liste der Wörterbücher in Python.
Schlüssel im Wörterbuch:
- current_day - Datum der Benutzeranforderung
- host_query - IP, für die Informationen empfangen werden
- shared_path - NFS-Ressource
- status_ip - Informationen zum Zugriff auf die Ressource. Wenn IP-Adressen über "," aufgelistet sind, wird die Wörterbuchzeichenfolge in der Liste dupliziert.
Ferner wird gemäß dem Konzept des Konzepts ein primitiver Versuch unternommen, den Wert des status_ip-Schlüssels in den Betreff zu analysieren: IP-Adresse, Host-Datensatz, die Werte "*" oder "Jeder"
Gemäß der API- Dokumentation und den Erläuterungen von Support Lampyre.io sollte jedes Modul Daten an die Tabelle zurückgeben, eine oder mehrere, aber die Tabelle sollte als Teil der API beschrieben werden (Task-Header, Tabellen-Header). In der Tat ist dies das Hauptergebnis des Moduls.
Das Endergebnis unter Berücksichtigung der Wörterbuchschlüssel ist also eine Tabelle:
class NFSHeader(metaclass=Header): display_name = 'Search data from NFS services' current_day = Field('Date', ValueType.Datetime) host_query = Field('Search ip', ValueType.String) shared_path = Field('NFS path', ValueType.String) ip = Field('ip address', ValueType.String) network = Field('network address', ValueType.String) host = Field('host', ValueType.String) status = Field('raw record', ValueType.String)
Werte (leicht geändert) aus der Analyse des Ergebnisses des Befehls showmount auf dem Server werden in die Tabelle geschrieben. Die Namen der Felder in der Klasse sprechen für sich selbst. In der Rohdatensatzspalte werden Informationen über den Zugriff auf die Ressource gespeichert. In gewissem Sinne kann diese Analyse von Daten zu NFS-Ressourcen auch als OSINT betrachtet werden. Informationen über den möglichen Zugriff von verschiedenen IP-Adressen geben einen Eindruck von den Eigentümern der Ressource oder der Adressierung innerhalb des Ressourcennetzwerks. Beispielsweise befindet sich die IP-Adresse des Servers mit NFS in der Ukraine und die für den Zugriff zugelassene IP-Adresse in Deutschland:

Wenn Sie die Studie dieses Beispiels erweitern, wird sofort die Verbindung der Server nicht nur über NFS, sondern auch über ein Zertifikat unter den Adressen 77.120.103.9, 138.201.202.135 und der Domain * .aniart.com.ua bestätigt.

So übertragen Sie Daten in ein Modul und schreiben in eine Tabelle:
Erstellen Sie Ihre eigene SearchDataNFS-Klasse aus der Task-Klasse:
class SearchDataNFS(Task)
In der Methode get_id
eine eindeutige zufällige UUID zurück:
def get_id(self): return 'bf51fd57-3fec-4416-9d07-905935a484b4'
get_display_name
Methode get_display_name
wie die Aufgabe aufgerufen werden soll, und in der Methode get_description
entsprechend dem Namen die Beschreibung der Aufgabe:
def get_display_name(self): return 'Explore: NFS(SSH)' def get_description(self): return 'Explore NFS resourses'
get_headers
Methode get_headers
welche Tabellen verwendet werden sollen:
def get_headers(self): return NFSHeader
Die Methode get_enter_params bestimmt das Erscheinungsbild des Eingabefensters. Aus dem Code geht hervor, dass der Eingabe eine Liste von Zeichenfolgen bereitgestellt wird, die später unabhängig in IP-Adressen konvertiert werden:
def get_enter_params(self): ep_coll = EnterParamCollection() ep_coll.add_enter_param('ips', 'IP', ValueType.String, is_array=True, value_sources=[Attributes.System.IPAddress], description='IPs, networks') return ep_coll
In der Methode execute findet die Ausführung der Hauptaufgabe statt:
ips = [] for input_ip in set(map(lambda z: z.strip(), enter_params.ips)): ips.extend(reparse_ip_hosts(input_ip))
Auf Eingabeparameter wird über enter_params.ips zugegriffen. In der Methode reparse_ip_hosts
erfolgt eine selbst implementierte Validierung von Zeichenfolgen in IP-Adressen.
targets = ((ip, port) for ip in ips for port in ports) lines = thread_async_nfs_one_client(targets) info = reparse_result_rows(lines) fields_table = NFSHeader.get_fields() for data_id in info: tmp = NFSHeader.create_empty() for field in fields_table: if field in data_id: tmp[fields_table[field]] = data_id[field] result_writer.write_line(tmp, header_class=NFSHeader)
In der Funktion thread_async_nfs_one_client
wird eine Verbindung zum Server mit ssh hergestellt (IP-Adresse, Benutzername und Passwort werden durch Hardcode festgelegt) und showmount wird ausgeführt, wie zuvor angegeben, das Ergebnis wird analysiert und anschließend in der Funktion reparse_result_rows
erneut reparse_result_rows
. Es ist wichtig zu beachten, dass info eine Liste ist, die aus Wörterbüchern besteht. In jedem Wörterbuch werden die Schlüssel als Felder der NFSHeader-Klasse benannt. Das heißt, das Wörterbuch sieht folgendermaßen aus:
{ 'current_day': datetime.datetime(2019, 3, 6, 16, 48, 17), 'host_query': '192.168.1.1', 'shared_path': '/volume1/workspace', 'ip': '192.168.10.10', 'network': '', 'host': '', 'status': '192.168.10.10' }
Es ist wichtig, die Datentypen im Wörterbuch zu beachten. Sie müssen mit denen in der Beschreibung der Tabelle übereinstimmen.
Weiter in der Schleife wird durch die Listenelemente iteriert und über die API-Methode ( result_writer.write_line ) in eine bestimmte NFSHeader-Tabelle geschrieben.
Für eine detailliertere Beschreibung sollten Sie die Dokumentation lesen.
Grundsätzlich kann das Modul zu Lampyre hinzugefügt werden.
Verwenden Sie Ihr Modul in Lampyre
Aufgrund der Tatsache, dass ssh verwendet wird und der Befehl showmount ausgeführt wird, müssen Sie natürlich über ssh Zugriff auf Ihren Server haben. Für meine Tests wurde diese Rolle von der virtuellen Maschine in Virtualbox mit Ubuntu und dem darauf installierten NFS-Client gespielt.
Um mit nativen Modulen auf dem Computer eines Benutzers arbeiten zu können, ist Python 3.6 erforderlich. Der Pfad zum Interpreter muss in Systemvariablen angegeben sein, oder der Pfad dazu muss in der Lampyre\config\appSettings.config
. Standardmäßig ist der pythonPath-Schlüssel in den Einstellungen auskommentiert.
Das Laden eines Moduls in Lampyre erfolgt in folgenden Schritten:
- Laden Sie im Fenster "Skripte" die Datei Lampyre \ user_tasks \ ontology.py (wird mit der Anwendung geliefert).
- Laden Sie im selben Fenster Ihr Modul, in diesem Fall nfs_via_ssh.py. Wenn etwas schief gelaufen ist, sollte die Schaltfläche Details helfen
- Nach dem Laden wird im Fenster Liste der Anforderungen auf der Registerkarte Aufgaben der Abschnitt Lokale Aufgaben angezeigt (im Code des Moduls können Sie ihn auch anders nennen). Er hat den Namen Explore: NFS (SSH) :

Aktualisiertes Fenster Liste der Anfragen:

- Die IP-Adressen von Servern mit NFS werden, wie bereits erwähnt, am besten ermittelt, indem zuerst eine Shodan- Suchabfrage mit den Parametern Query: tcp 2049 ausgeführt wird (Sie können einfach nfs angeben). Der Parameter Seite oder Bereich , der standardmäßig auf 1 festgelegt ist, bedeutet, dass 1 Seite mit Antworten vom Shodan-Dienst zurückgegeben wird. Auf einer Seite gibt es normalerweise 100 Ergebnisse (Zeilen).
Das Ergebnis der Hinrichtung von Shodan:

- Kopieren Sie die IP-Adressen aus der Tabelle oder aus dem Diagramm in die Zwischenablage und fügen Sie sie in das Modulfenster IP Explore: NFS (SSH) ein. Führen Sie das Ergebnis aus und erwarten Sie es:

Natürlich müssen Sie die Bandbreite Ihrer eigenen und fremden Server sowie das Timeout berücksichtigen, die im Modulcode festgelegt sind.
Das Ergebnis wird in Form einer Tabelle erhalten. Sie können jedoch fortfahren und das Ergebnis der Tabelle mit dem Diagramm der Ergebnisse aus der Ausführung der Shodan-Suche kombinieren. Es wird zunächst etwas schwierig zu erkennen sein.
Visualisierung der Tabelle mit dem Ergebnis
Fangen wir an. Es gibt eine Tabelle mit einer Reihe von Spalten mit Werten aus der Ausführung des Benutzermoduls. Wenn Sie jedoch auf die Schaltfläche Schema im Fenster Anforderungen achten, ist diese inaktiv. Da die Zuordnung der Tabelle zum Diagramm nicht festgelegt ist und festgelegt werden muss.
Schema 1 (nicht das beste)
Bei geöffneter Tabelle befindet sich aus dem Modulergebnis in der unteren rechten Ecke ein Schnittstellenelement "Erstellungsvorlage hinzufügen". Klicken Sie dazu auf das Fenster "Erstellungsvorlage". Hier können Sie die Zuordnung von Tabellenzeilen zu Diagrammobjekten festlegen. Ich werde den Prozess im Artikel nicht im Detail beschreiben. Der Link auf dem Plattformkanal in Youtube zeigt, wie das geht. Innerhalb des Artikels beschränke ich mich auf Bilder dessen, was passieren soll:

Vorlage für Grafik:

Es ist wichtig zu beachten, dass sich IP- und Domänenobjekte in Lampyre befinden und ich NFS- und Netzwerkobjekte erstellt habe. , «» . , , — «» — , — - , . , NFS – 2 , NFS path Status, — NFS path. — . «» — Schema .
:

:

«» — i2 (IBM i2 Analyst's Notebook) :

«» , : IP- IP- , , NFS , IP. ( ).
2

. — , IP- :

, , (csv) . , «» . «» , .
Shodan NFS Shodan search, add to active tab — :

:

Lampyre , ssh.
— , NFS .