Lucene search
K

SSDP Amplification Scanner

🗓️ 25 Aug 2014 00:00:00Reported by Packet StormType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 58 Views

SSDP Amplification Scanner for detecting reflectors and sorting received packets

Code
`   
  
from scapy.all import *  
from struct import *  
import sys  
import socket  
import time  
import threading  
import random  
from threading import Thread  
  
  
########################  
#Remember the SSDP scanner keeps all packets received, so make sure you sort them example command:  
  
#Notice: THIS HAS ONLY BEEN TESTED ON A DEDICATED SERVER VPS's MAY NOT WORK.  
  
  
#Here is a small list of commands that can help you sort your list:  
  
#This command removes the length of the responce and puts the output in line-by-line list format:  
#cat scannedlist.txt | awk '{print $1}' | sort -u | sort -R > output.txt  
  
#This next command sorts for all packets over 300 byte reply size and saves the output to a list:  
#cat scannedlist.txt | awk '$2 > 300' | awk 'print $1' | sort -u | sort -R > output.txt  
  
#This next command sorts for all reflectors that replyed with 10 or more packets (this is my favorite):  
#cat scannedlist.txt | sort | uniq -c | awk '$2 > 10' | awk 'print $2' | sort -u | sort -R > output.txt  
########################  
  
if len (sys.argv) != 4:  
print "Usage: ./" + sys.argv[0] + " [ip-start] [ip-end] [output]\n Notice: This script requires Scapy (available with apt-get or yum installs\n Notice: THIS HAS ONLY BEEN TESTED ON A DEDICATED SERVER VPS's MAY NOT WORK.\n V.1.0 Made by XXX"  
sys.exit()  
  
mydestport = random.randint(400,65535)  
conf.verb = 0  
data = "M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nMX: 2\r\nST: ssdp:all\r\n\r\n"  
recv = 0  
  
  
def eth_addr (a) :  
b = "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x" % (ord(a[0]) , ord(a[1]) , ord(a[2]), ord(a[3]), ord(a[4]) , ord(a[5]))  
return b  
  
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
sock.connect(('google.com', 80))  
myhost = sock.getsockname()[0]  
sock.close()  
  
  
def ipRange(start_ip, end_ip):  
start = list(map(int, start_ip.split(".")))  
end = list(map(int, end_ip.split(".")))  
temp = start  
ip_range = []  
  
ip_range.append(start_ip)  
while temp != end:  
start[3] += 1  
for i in (3, 2, 1):  
if temp[i] == 256:  
temp[i] = 0  
temp[i-1] += 1  
ip_range.append(".".join(map(str, temp)))  
  
return ip_range  
  
ip_range = ipRange(sys.argv[1], sys.argv[2])  
  
def startscan():  
total = 0   
for server in ip_range:  
  
sys.stdout.write("\rSent %d Packets | Received %d Packets" % (total, recv))  
sys.stdout.flush()   
packet = IP(dst=server)/UDP(sport=mydestport,dport=1900)/Raw(load=data)  
send(packet)  
total = total + 1  
  
def listen():  
global recv  
try:  
s = socket.socket( socket.AF_PACKET , socket.SOCK_RAW , socket.ntohs(0x0003))  
except socket.error , msg:  
sys.exit()  
  
  
while True:  
packet = s.recvfrom(65565)  
  
  
packet = packet[0]  
  
eth_length = 14  
  
eth_header = packet[:eth_length]  
eth = unpack('!6s6sH' , eth_header)  
eth_protocol = socket.ntohs(eth[2])  
  
if eth_protocol == 8 :  
ip_header = packet[eth_length:20+eth_length]  
  
iph = unpack('!BBHHHBBH4s4s' , ip_header)  
  
version_ihl = iph[0]  
version = version_ihl >> 4  
ihl = version_ihl & 0xF  
  
iph_length = ihl * 4  
  
ttl = iph[5]  
protocol = iph[6]  
s_addr = socket.inet_ntoa(iph[8]);  
d_addr = socket.inet_ntoa(iph[9]);  
  
  
if protocol == 17 :  
u = iph_length + eth_length  
udph_length = 8  
udp_header = packet[u:u+8]  
  
udph = unpack('!HHHH' , udp_header)  
  
source_port = udph[0]  
dest_port = udph[1]  
length = udph[2]  
checksum = udph[3]  
  
if dest_port == mydestport :  
if d_addr == myhost :  
  
list = open(sys.argv[3], 'a')  
list.write("%s %d\n" % (s_addr, length))  
recv = recv + 1  
  
h_size = eth_length + iph_length + udph_length  
data_size = len(packet) - h_size  
  
data = packet[h_size:]  
  
if __name__ == '__main__':  
Thread(target = startscan).start()  
Thread(target = listen).start()  
  
  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

25 Aug 2014 00:00Current
7.4High risk
Vulners AI Score7.4
58