La dernière fois ([Python] Python and Security-② Port Scanning Tool Made with Python), j'ai examiné les grandes lignes et les fonctionnalités de Python. Cette fois, créons un simple outil d'analyse de port en utilisant Python. De plus, en utilisant l'outil, il est possible de vérifier et de répondre aux services qui fonctionnent de manière imprudente.
** Parce qu'il s'agit d'un acte de collecte d'informations, "Banner Grabbing", c'est un crime à commettre à un sujet non autorisé. Veuillez noter que nous ne sommes pas responsables des problèmes liés à cet article. ** **
L'analyse des ports consiste à rechercher et à identifier un port ouvert au serveur cible ou au périphérique réseau. En vérifiant le port ouvert, il est possible de vérifier le service fonctionnant à partir de la cible, et pour un attaquant, l'analyse de port peut être considérée comme une préparation à une attaque.
** Les types de scan de port sont les suivants **
UDP Port Scan Dans le cas de l'analyse UDP, le port est analysé à l'aide du protocole UDP. Si le port est ouvert, il n'y a pas de réponse de la cible, mais s'il est fermé, il y a une réponse de message ICMP (Destination Unreachable, Port Unreachable). Cependant, l'analyse UDP est moins fiable car les paquets sont plus susceptibles d'être perdus par les routeurs et les pare-feu.
TCP Connect Scan(TCP Open Scan) Un scan qui utilise la fonction connect () pour connecter la cible avec 3 Way-Handshaking et vérifier les ports ouverts. Il est fiable et vous pouvez analyser sans root ni privilèges, mais l'analyse est lente et enregistre.
TCP Half-Open Scan(SYN Stealth Scan) Contrairement au scan TCP Connect, le scan semi-ouvert, également connu sous le nom de scan SYN, ne forme pas une session complète avec prise de contact à 3 voies et utilise uniquement des paquets SYN pour vérifier le port. Aucun journal n'est laissé, mais les privilèges root sont requis pour l'implémentation.
** Pourquoi avez-vous besoin des privilèges root? ** Puisqu'il est nécessaire de définir le bit de contrôle dans l'en-tête du protocole TCP, l'analyse SYN ne peut être effectuée qu'avec les privilèges root. ** Pourquoi n'y a-t-il pas de journal? ** Lorsqu'une réponse SYN / ACK est reçue de la cible, le paquet défini sur RST est envoyé comme réponse au lieu de ACK. Puisque le paquet est RST, la communication est interrompue de force et le réglage de communication n'est pas terminé (connexion de la session), il y a donc une forte possibilité qu'aucun journal ne soit laissé dans le système.
FIN/NULL/Xmas Scan Les trois scans sont TCP FIN Scan, qui définit Flag sur FIN, et Xmas Scan, qui définit NULL Scan, FIN, PSH et HUG en même temps. Étant donné que chaque communication n'est pas normale, aucun journal n'est laissé, la cible ne peut être utilisée que dans un environnement UNIX / Linux, et le résultat de Open / Filter / error est inconnu. FIN Scan NULL Scan Xmas Scan
Après avoir importé le module de socket, utilisez la fonction connect (), spécifiez l'adresse IP et le numéro de port et effectuez la communication TCP. Les données peuvent être envoyées et reçues à l'aide des fonctions send () et recv ().
port_scanning.py
import socket
s = socket.socket()
s.connect(('adresse IP',numéro de port))
s.close()
Port "Résultat"_scanning.py
#Si le port est ouvert
>>
#Si le port n'est pas ouvert
Traceback (most recent call last):
File "C:/~", line 3, in <module>
s.connect(('127.0.0.1', 23))
ConnectionRefusedError: [WinError 10061]Impossible de se connecter car il a été rejeté par l'ordinateur cible.
Pour résoudre l'erreur, utilisez les instructions «try» et «except» de manière simple pour faire la distinction entre succès et échec.
port_scanning.py
import socket
try:
s = socket.socket()
s.connect(('adresse IP',numéro de port))
print('success')
s.close()
except:
print('fail')
Port "Résultat"_scanning.py
#Si le port est ouvert
>> success
#Si le port n'est pas ouvert
>> fail
Créez pour vérifier automatiquement le numéro de port dans la plage à l'aide de l'instruction roop.
port_scanning.py
import socket
for port in range(1,101):
try:
s = socket.socket()
s.connect(('adresse IP', port))
print('Port ouvert:%d' % port)
s.close()
except: pass
Port "Résultat"_scanning.py
>>Port ouvert:22
>>Port ouvert:80
La vérification des ports 1 à 100 peut prendre du temps, alors utilisons le type de données de liste de Python pour analyser uniquement les ports qui sont principalement utilisés.
** Ports fréquemment utilisés ** 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(('adresse IP', port))
print('Port ouvert:%d' % port)
s.close()
except: pass
Port "Résultat"_scanning.py
>>Port ouvert:80
>>Port ouvert:443
>>Port ouvert:3306
>>Port ouvert:8080
Utilisons la fonction input () pour entrer l'adresse de l'hôte et créer du code pour effectuer l'analyse des ports.
port_scanning.py
import socket
ports = [20, 21, 22, 23, 25, 53, 80, 110, 123, 443, 1433, 3306, 1521, 8080, 3389]
host = input('Adresse IP:')
for port in ports:
try:
s = socket.socket()
s.connect((host, port))
print('Port ouvert:%d' % port)
s.close()
except: pass
Port "Résultat"_scanning.py
>>Adresse IP: 127.0.0.1
>>Port ouvert:80
>>Port ouvert:443
>>Port ouvert:3306
>>Port ouvert:8080
Cette fois, j'ai essayé de créer un simple outil d'analyse de port en utilisant la bibliothèque sokect de Python, mais pour l'utiliser pratiquement, diverses modifications sont nécessaires. Cependant, comme le principe de l'analyse des ports et l'outil d'analyse de base des ports peuvent être créés avec Python, la personne en charge et l'administrateur espèrent se référer à cet article et aider à construire un environnement réseau plus sécurisé.
14 février 2020- : sunny: [Python] Python and Security-① What is Python
Recommended Posts