Determiner les vulnerabilités en fonction de la banniere
🔒 Contenu de sécurité — usage encadré
Cette page décrit des techniques de sécurité offensive à des fins exclusivement pédagogiques et professionnelles (formation, préparation de certification, montée en compétence défensive).
Ces techniques ne doivent être mises en œuvre que dans un laboratoire isolé ou sur un système pour lequel vous disposez d'une autorisation écrite explicite du propriétaire. Les employer contre un système tiers sans autorisation est une infraction pénale (art. 323-1 et suivants du Code pénal). Voir les avertissements généraux.
| Fiche express | |
|---|---|
| Domaine | Sécurité — reconnaissance |
| Modules | socket, sys, os
|
| Rôle | Détection de vulnérabilités par bannière |
Script Python récupérant la bannière d'un service réseau (via socket) pour déterminer s'il est vulnérable, avec itération sur un sous-réseau, lecture d'un fichier de signatures et gestion d'erreurs. Fourni à titre pédagogique ; les adresses sont des exemples de laboratoire.
- determiner les vulnerabilités en fonction de la banniere
import socket
def retBanner(ip, port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port))
banner = s.recv(1024)
return banner
except:
return
def checkVulns(banner):
if 'FreeFloat Ftp Server (Version 1.00)' in banner:
print '[+] FreeFloat FTP Server is vulnerable.'
elif '3Com 3CDaemon FTP Server Version 2.0' in banner:
print '[+] 3CDaemon FTP Server is vulnerable.'
elif 'Ability Server 2.34' in banner:
print '[+] Ability FTP Server is vulnerable.'
elif 'Sami FTP Server 2.0.2' in banner:
print '[+] Sami FTP Server is vulnerable.'
else:
print '[-] FTP Server is not vulnerable.'
return
def main():
ip1 = '192.168.95.148'
ip2 = '192.168.95.149'
ip3 = '192.168.95.150'
port = 21
banner1 = retBanner(ip1, port)
if banner1:
print '[+] '+ ip1 +': '+banner1.strip('\n')
checkVulns(banner1)
banner2 = retBanner(ip2, port)
if banner2:
print '[+] '+ ip2 +': '+banner2.strip('\n')
checkVulns(banner2)
banner3=retBanner(ip3, port)
if banner3:
print '[+] '+ ip3 +': '+banner3.strip('\n')
checkVulns(banner3)
if __name__ == '__main__':
main()
Iteration
>>> for x in range(1,255): ... print "192.168.95."+str(x)
import socket
def retBanner(ip, port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port))
banner = s.recv(1024)
return banner
except:
return
def checkVulns(banner):
if 'FreeFloat Ftp Server (Version 1.00)' in banner:
print '[+] FreeFloat FTP Server is vulnerable.'
elif '3Com 3CDaemon FTP Server Version 2.0' in banner:
print '[+] 3CDaemon FTP Server is vulnerable.'
elif 'Ability Server 2.34' in banner:
print '[+] Ability FTP Server is vulnerable.'
elif 'Sami FTP Server 2.0.2' in banner:
print '[+] Sami FTP Server is vulnerable.'
else:
print '[-] FTP Server is not vulnerable.'
return
def main():
portList = [21,22,25,80,110,443]
for x in range(1, 255):
ip = '192.168.95.' + str(x)
for port in portList:
banner = retBanner(ip, port)
if banner:
print '[+] '+ ip + ': ' + banner
checkVulns(banner)
if __name__ == '__main__':
main()
File I/O
exemple : implémentation automatique de la liste des vulnerabilités
# cat vuln_banners.txt
def checkVulns(banner):
f = open("vuln_banners.txt",'r')
for line in f.readlines():
if line.strip('\n') in banner:
print "[+] Server is vulnerable: "+banner.strip('\n')
Sys Module
http://docs.python.org/library/sys
import sys
if len(sys.argv) == 2:
filename=sys.argv[1]
print "[+] Reading Vulnerabilities From: "+filename
# python vuln-scanner.py vuln-banners.txt
OS Module
- permets d'interagir avec l'environnement OS de la machine
import sys
import os
if len(sys.argv)==2:
filename = sys.argv[1]
if not os.path.isfile(filename):
print '[-] ' + filename + ' does not exist.'
exit(0)
if not os.access(filename, os.R_OK):
print '[-] ' + filename + ' access denied.'
exit(0)
print '[+] Reading Vulnerabilities From: '+filename
- gestion d'erreur pour acces fichier
Import socket
import os
import sys
def retBanner(ip, port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port))
banner = s.recv(1024)
return banner
except:
return
def checkVulns(banner, filename):
f = open(filename, 'r')
for line in f.readlines():
if line.strip('\n') in banner:
print '[+] Server is vulnerable: '+\
banner.strip('\n')
def main():
if len(sys.argv) == 2:
filename = sys.argv[1]
if not os.path.isfile(filename):
print '[-] '+filename+\
' does not exist.'
exit(0)
if not os.access(filename, os.R_OK):
print '[-] '+filename+\
' access denied.'
exit(0)
else:
print '[-] Usage: '+str(sys.argv[0])+\'
<vuln filename>'
exit(0)
portList = [21,22,25,80,110,443]
for x in range(147, 150):
ip = '192.168.95.'+ str(x)
for port in portList:
banner = retBanner(ip, port)
if banner:
print '[+] '+ip+': '+banner
checkVulns(banner, filename)
if __name__ == '__main__':
main()