From 64a0162e3facdcd3856b6ae7d23cbdf055a507d9 Mon Sep 17 00:00:00 2001 From: jvazquez-r7 Date: Mon, 15 Dec 2014 17:16:43 -0600 Subject: [PATCH] Add support for PAC-SERVER-CHECKSUM --- lib/rex/proto/kerberos/pac.rb | 1 + lib/rex/proto/kerberos/pac/server_checksum.rb | 28 +++++++++++++++++++ .../kerberos/pac/server_checksum_spec.rb | 26 +++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 lib/rex/proto/kerberos/pac/server_checksum.rb create mode 100644 spec/lib/rex/proto/kerberos/pac/server_checksum_spec.rb diff --git a/lib/rex/proto/kerberos/pac.rb b/lib/rex/proto/kerberos/pac.rb index e8bfb29c2a..f5613b1e4d 100644 --- a/lib/rex/proto/kerberos/pac.rb +++ b/lib/rex/proto/kerberos/pac.rb @@ -12,3 +12,4 @@ end require 'rex/proto/kerberos/pac/element' require 'rex/proto/kerberos/pac/priv_svr_checksum' +require 'rex/proto/kerberos/pac/server_checksum' diff --git a/lib/rex/proto/kerberos/pac/server_checksum.rb b/lib/rex/proto/kerberos/pac/server_checksum.rb new file mode 100644 index 0000000000..a1aaa6e2e9 --- /dev/null +++ b/lib/rex/proto/kerberos/pac/server_checksum.rb @@ -0,0 +1,28 @@ +# -*- coding: binary -*- + +module Rex + module Proto + module Kerberos + module Pac + class ServerChecksum < Element + + # @!attribute version + # @return [Fixnum] The checksum type + attr_accessor :checksum + + # Encodes the Rex::Proto::Kerberos::Pac::ServerChecksum + # + # @return [String] + def encode + encoded = '' + encoded << [checksum].pack('V') + encoded << "\x00" * 16 + + encoded + end + end + + end + end + end +end \ No newline at end of file diff --git a/spec/lib/rex/proto/kerberos/pac/server_checksum_spec.rb b/spec/lib/rex/proto/kerberos/pac/server_checksum_spec.rb new file mode 100644 index 0000000000..c85be939e5 --- /dev/null +++ b/spec/lib/rex/proto/kerberos/pac/server_checksum_spec.rb @@ -0,0 +1,26 @@ +# -*- coding:binary -*- +require 'spec_helper' + +require 'rex/proto/kerberos' + +describe Rex::Proto::Kerberos::Pac::ServerChecksum do + + subject(:server_checksum) do + described_class.new + end + + let(:rsa_md5) { 7 } + + let(:rsa_md5_sample) do + "\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + end + + describe "#encode" do + context "when RSA-MD5 checksum" do + it "encodes the ServerChecksums correctly" do + server_checksum.checksum = rsa_md5 + expect(server_checksum.encode).to eq(rsa_md5_sample) + end + end + end +end