[Python] Python et sécurité-② Outil d'analyse de port réalisé avec Python

introduction

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. ** **

Qu'est-ce que le scan de port?

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 **

Fonctionnalités par type d'analyse de port

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.

image.png

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. image.png

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. image.png

** 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 image.png NULL Scan image.png Xmas Scan image.png

Faisons un outil d'analyse avec Python en utilisant le module socket

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

Résumé

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é.

Résumé de l'article

14 février 2020- : sunny: [Python] Python and Security-① What is Python

Recommended Posts

[Python] Python et sécurité-② Outil d'analyse de port réalisé avec Python
Outil de rognage d'image GUI réalisé avec Python + Tkinter
Scan de port avec python
Pages HTML dynamiques créées avec AWS Lambda et Python
J'ai essayé de faire LINE BOT avec Python et Heroku
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
J'ai fait un blackjack avec du python!
[Python] Python et sécurité-① Qu'est-ce que Python?
python avec pyenv et venv
J'ai fait un blackjack avec Python.
Othello fait avec python (comme GUI)
J'ai créé wordcloud avec Python.
Fonctionne avec Python et R
Créer un outil de saut automatique d'annonces YouTube avec Python et OCR
[Je l'ai fait avec Python] Outil pour la sortie par lots de données XML
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Bases de SNS Python faites avec Flask
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Numer0n avec des objets fabriqués avec Python
J'ai fait une loterie avec Python.
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Développement de jeux Othello avec Python
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
Coexistence de Python2 et 3 avec CircleCI (1.0)
J'ai créé un démon avec Python
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
Système de trading automatique FX réalisé avec python et algorithme génétique Partie 1
Communiquez entre Elixir et Python avec gRPC
Calculer et afficher le poids standard avec python
Surveiller les pannes de Mojo avec Python et Skype
Modulation et démodulation FM avec Python Partie 3
[Automation] Manipulez la souris et le clavier avec Python
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
Client API Slack simple réalisé avec Python
Type de téléchargement de partage HTTP réalisé avec Python
Authentification sans mot de passe avec RDS et IAM (Python)
Installation de Python et gestion des packages avec pip
J'ai fait un compteur de caractères avec Python
Utilisation de Python et MeCab avec Azure Databricks
Vérifier et recevoir le port série en Python (vérification du port)
POSTER diversement avec Python et recevoir avec Flask