[Python] Python und Sicherheit - Port-Scan-Tool mit Python

Einführung

Beim letzten Mal ([Python] Python und Security-② Port Scanning Tool Made with Python) habe ich die Umrisse und Funktionen von Python untersucht. Dieses Mal erstellen wir mit Python ein einfaches Tool zum Scannen von Ports. Darüber hinaus ist es mit dem Tool möglich, Dienste zu überprüfen und auf diese zu reagieren, die unachtsam arbeiten.

** Da es sich um das Sammeln von Informationen handelt, "Banner Grabbing", ist es ein Verbrechen, das an einem nicht autorisierten Subjekt ausgeführt wird. Bitte beachten Sie, dass wir nicht für Probleme mit diesem Artikel verantwortlich sind. ** ** **

Was ist Port Scan?

Der Port-Scan dient zum Suchen und Identifizieren eines Ports, der für den Zielserver oder das Netzwerkgerät geöffnet ist. Durch Überprüfen der offenen Ports ist es möglich, die vom Ziel ausgeführten Dienste zu überprüfen. Für einen Angreifer kann das Scannen von Ports als Vorbereitung für einen Angriff angesehen werden.

** Folgende Arten von Port-Scans sind möglich **

Funktionen nach Art des Port-Scans

UDP Port Scan Beim UDP-Scan wird der Port mit dem UDP-Protokoll gescannt. Wenn der Port geöffnet ist, gibt es keine Antwort vom Ziel, aber wenn er geschlossen ist, gibt es eine ICMP-Nachricht (Ziel nicht erreichbar, Port nicht erreichbar). UDP-Scan ist jedoch weniger zuverlässig, da Pakete eher von Routern und Firewalls verloren gehen.

image.png

TCP Connect Scan(TCP Open Scan) Ein Scan, der die Funktion connect () verwendet, um das Ziel mit 3-Wege-Handshaking zu verbinden und nach offenen Ports zu suchen. Es ist zuverlässig und Sie können ohne Root und Berechtigungen scannen, aber der Scan ist langsam und protokolliert. image.png

TCP Half-Open Scan(SYN Stealth Scan) Im Gegensatz zu TCP Connect Scan bildet Half-Open Scan, auch als SYN-Scan bezeichnet, keine vollständige Sitzung mit 3-Wege-Handshaking und verwendet nur SYN-Pakete, um den Port zu überprüfen. Es ist kein Protokoll mehr vorhanden, für die Implementierung sind jedoch Root-Berechtigungen erforderlich. image.png

** Warum benötigen Sie Root-Rechte? ** Da das Steuerbit im Header des TCP-Protokolls gesetzt werden muss, kann das SYN-Scannen nur mit Root-Rechten durchgeführt werden. ** Warum gibt es kein Protokoll? ** Wenn eine SYN / ACK-Antwort vom Ziel empfangen wird, wird das auf RST eingestellte Paket als Antwort anstelle von ACK gesendet. Da das Paket RST ist, wird die Kommunikation zwangsweise beendet und die Kommunikationseinstellung wird nicht abgeschlossen (Verbindung der Sitzung), sodass eine hohe Wahrscheinlichkeit besteht, dass kein Protokoll im System verbleibt.

FIN/NULL/Xmas Scan Die drei Scans sind TCP FIN Scan, bei dem Flag auf FIN gesetzt wird, und Xmas Scan, bei dem NULL Scan, FIN, PSH und HUG gleichzeitig gesetzt werden. Da jede Kommunikation nicht normal ist, bleibt kein Protokoll übrig, das Ziel kann nur in einer UNIX / Linux-Umgebung verwendet werden und das Ergebnis von Öffnen / Filtern / Fehler ist unbekannt. FIN Scan image.png NULL Scan image.png Xmas Scan image.png

Lassen Sie uns mit Python ein Scan-Tool mithilfe des Socket-Moduls erstellen

Verwenden Sie nach dem Importieren des Socket-Moduls die Funktion connect (), geben Sie die IP- und Portnummer an und führen Sie die TCP-Kommunikation durch. Daten können mit den Funktionen send () und recv () gesendet und empfangen werden.

port_scanning.py


import socket
s = socket.socket()
s.connect(('IP Adresse',Port-Nummer))
s.close()

"Ergebnis" -Port_scanning.py


#Wenn der Port offen ist
>> 
#Wenn der Port nicht geöffnet ist
Traceback (most recent call last):
  File "C:/~", line 3, in <module>
    s.connect(('127.0.0.1', 23))
ConnectionRefusedError: [WinError 10061]Es konnte keine Verbindung hergestellt werden, da dies vom Zielcomputer abgelehnt wurde.

Um den Fehler zu beheben, verwenden Sie die Anweisungen "try" und "Ausnahme" auf einfache Weise, um zwischen Erfolg und Misserfolg zu unterscheiden.

port_scanning.py


import socket
try:
s = socket.socket()
s.connect(('IP Adresse',Port-Nummer))
    print('success')
    s.close()
except:
    print('fail')

"Ergebnis" -Port_scanning.py


#Wenn der Port offen ist
>> success
#Wenn der Port nicht geöffnet ist
>> fail

Erstellen, um die Portnummer innerhalb des Bereichs mithilfe der roop-Anweisung automatisch zu überprüfen.

port_scanning.py


import socket
for port in range(1,101):
    try:
        s = socket.socket()
        s.connect(('IP Adresse', port))
        print('Port öffnen:%d' % port)
        s.close()
        
    except: pass

"Ergebnis" -Port_scanning.py


>>Port öffnen:22
>>Port öffnen:80

Das Überprüfen der Ports 1 bis 100 kann zeitaufwändig sein. Verwenden Sie daher den Listendatentyp von Python, um nur die Ports zu scannen, die hauptsächlich verwendet werden.

** Häufig verwendete Ports ** 20, 21(FTP) / 22(SSH) / 23(Telnet) / 25(SMTP) / 53(DNS) / 80(HTTP) / 110(POP3) / 123(NTP) / 443(HTTPS) / 1433(MSSQL) / 3306(MYSQL) / 1521(ORACLE) / 8080(ORACLE, TOMCAT) / 3389(RDP)

port_scanning.py


import socket
ports = [20, 21, 22, 23, 25, 53, 80, 110, 123, 443, 1433, 3306, 1521, 8080, 3389]
for port in ports:
    try:
        s = socket.socket()
        s.connect(('IP Adresse', port))
        print('Port öffnen:%d' % port)
        s.close()
        
    except: pass

"Ergebnis" -Port_scanning.py


>>Port öffnen:80
>>Port öffnen:443
>>Port öffnen:3306
>>Port öffnen:8080

Verwenden Sie die Funktion input (), um die Hostadresse einzugeben und Code für die Portüberprüfung zu erstellen.

port_scanning.py


import socket
ports = [20, 21, 22, 23, 25, 53, 80, 110, 123, 443, 1433, 3306, 1521, 8080, 3389]
host = input('IP Adresse:')
for port in ports:
    try:
        s = socket.socket()
        s.connect((host, port))
        print('Port öffnen:%d' % port)
        s.close()
        
    except: pass

"Ergebnis" -Port_scanning.py


>>IP-Adresse: 127.0.0.1
>>Port öffnen:80
>>Port öffnen:443
>>Port öffnen:3306
>>Port öffnen:8080

Zusammenfassung

Dieses Mal habe ich versucht, ein einfaches Port-Scan-Tool mit der Python-Sokect-Bibliothek zu erstellen, aber um es praktisch zu verwenden, sind verschiedene Modifikationen erforderlich. Da das Prinzip des Port-Scannens und das grundlegende Tool zum Port-Scannen mit Python erstellt werden können, hoffen die verantwortliche Person und der Administrator, auf diesen Beitrag zu verweisen und beim Aufbau einer sichereren Netzwerkumgebung zu helfen.

Artikelübersicht

  1. Februar 2020- : sunny: [Python] Python und Sicherheit - ① Was ist Python

Recommended Posts

[Python] Python und Sicherheit - Port-Scan-Tool mit Python
GUI-Bildschneidewerkzeug mit Python + Tkinter
Port-Scan mit Python
Dynamische HTML-Seiten mit AWS Lambda und Python
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Python und Hardware-Verwenden von RS232C mit Python-
Ich habe einen Blackjack mit Python gemacht!
[Python] Python und Sicherheit - is Was ist Python?
Python mit Pyenv und Venv
Ich habe mit Python einen Blackjack gemacht.
Othello gemacht mit Python (wie GUI)
Ich habe Wordcloud mit Python gemacht.
Funktioniert mit Python und R.
Erstellen Sie ein automatisches Tool zum Überspringen von YouTube-Anzeigen mit Python und OCR
[Ich habe es mit Python gemacht] Tool für die Stapelausgabe von XML-Daten
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Mit Flask erstellte SNS Python-Grundlagen
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
Numer0n mit Elementen, die mit Python erstellt wurden
Ich habe mit Python eine Lotterie gemacht.
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Othello-Spieleentwicklung mit Python
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
Lesen und Schreiben von CSV mit Python
Mehrfachintegration mit Python und Sympy
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Ich habe mit Python einen Daemon erstellt
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Automatisches FX-Handelssystem mit Python und genetischem Algorithmus Teil 1
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
Überwachen Sie Mojo-Ausfälle mit Python und Skype
FM-Modulation und Demodulation mit Python Part 3
[Automatisierung] Bearbeiten Sie Maus und Tastatur mit Python
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Einfacher Slack API-Client mit Python
HTTP Split Download Typ mit Python gemacht
Passwortlose Authentifizierung mit RDS und IAM (Python)
Python-Installation und Paketverwaltung mit pip
Ich habe mit Python einen Zeichenzähler erstellt
Verwenden von Python und MeCab mit Azure Databricks
Überprüfen und empfangen Sie die serielle Schnittstelle in Python (Portprüfung)
POST verschieden mit Python und empfange mit Flask