From 526b9f199d460a487905eaa70f48523063811b9a Mon Sep 17 00:00:00 2001 From: HD Moore Date: Fri, 2 Dec 2005 02:35:30 +0000 Subject: [PATCH] Changes from Brian Caswell git-svn-id: file:///home/svn/incoming/trunk@3165 4d416f70-5f16-0410-b530-b9f4589650da --- lib/rex.rb.ts.rb | 56 +------------------------ lib/rex/proto/dcerpc/uuid.rb | 13 +++++- lib/rex/proto/dcerpc/uuid.rb.ut.rb | 9 ++++ lib/rex/proto/http/packet.rb.ut.rb | 6 ++- lib/rex/proto/http/request.rb.ut.rb | 4 +- lib/rex/proto/http/response.rb.ut.rb | 6 +-- lib/rex/proto/smb/simpleclient.rb.ut.rb | 46 +++++++++++++------- 7 files changed, 61 insertions(+), 79 deletions(-) diff --git a/lib/rex.rb.ts.rb b/lib/rex.rb.ts.rb index be2f9ac8f2..02e80685db 100644 --- a/lib/rex.rb.ts.rb +++ b/lib/rex.rb.ts.rb @@ -1,7 +1,6 @@ #!/usr/bin/ruby -I.. require 'test/unit' -require 'rex' require 'rex/exceptions.rb.ut' require 'rex/transformer.rb.ut' @@ -9,8 +8,6 @@ require 'rex/text.rb.ut' require 'rex/evasion.rb.ut' require 'rex/file.rb.ut' -require 'rex/arch/x86' - require 'rex/encoding/xor/generic.rb.ut' require 'rex/encoding/xor/byte.rb.ut' require 'rex/encoding/xor/word.rb.ut' @@ -27,8 +24,7 @@ require 'rex/socket/comm/local.rb.ut' require 'rex/socket/switch_board.rb.ut' require 'rex/socket/subnet_walker.rb.ut' -# require 'rex/proto' -require 'rex/proto.ts' +require 'rex/proto.rb.ts' require 'rex/parser/arguments.rb.ut' @@ -37,53 +33,3 @@ require 'rex/ui/text/table.rb.ut' require 'rex/exploitation/egghunter.rb.ut' require 'rex/exploitation/seh.rb.ut' - -class Rex::TestSuite - def self.suite - suite = Test::Unit::TestSuite.new("Rex") - - # General - suite << Rex::Exceptions::UnitTest.suite - suite << Rex::Transformer::UnitTest.suite - suite << Rex::Text::UnitTest.suite - suite << Rex::Evasion::UnitTest.suite - suite << Rex::File::UnitTest.suite - - # Arch - suite << Rex::Arch::X86::UnitTest.suite - - # Encoding - suite << Rex::Encoding::Xor::Generic::UnitTest.suite - suite << Rex::Encoding::Xor::Byte::UnitTest.suite - suite << Rex::Encoding::Xor::Word::UnitTest.suite - suite << Rex::Encoding::Xor::Dword::UnitTest.suite - suite << Rex::Encoding::Xor::DwordAdditive::UnitTest.suite - - # Sockets - suite << Rex::Socket::UnitTest.suite - suite << Rex::Socket::Parameters::UnitTest.suite - suite << Rex::Socket::Tcp::UnitTest.suite - suite << Rex::Socket::SslTcp::UnitTest.suite - suite << Rex::Socket::TcpServer::UnitTest.suite - suite << Rex::Socket::Udp::UnitTest.suite - suite << Rex::Socket::Comm::Local::UnitTest.suite - suite << Rex::Socket::SwitchBoard::UnitTest.suite - suite << Rex::Socket::SubnetWalker::UnitTest.suite - - # Protocols - suite << Rex::Proto::TestSuite.suite - - # Parsers - suite << Rex::Parser::Arguments::UnitTest.suite - - # Ui - suite << Rex::Ui::Color::Table::UnitTest.suite - suite << Rex::Ui::Text::Table::UnitTest.suite - - # Exploitation - suite << Rex::Exploitation::Egghunter::UnitTest.suite - suite << Rex::Exploitation::Seh::UnitTest.suite - - return suite; - end -end diff --git a/lib/rex/proto/dcerpc/uuid.rb b/lib/rex/proto/dcerpc/uuid.rb index 463c554315..3f129c2c35 100644 --- a/lib/rex/proto/dcerpc/uuid.rb +++ b/lib/rex/proto/dcerpc/uuid.rb @@ -30,11 +30,20 @@ class UUID ) end + # Validate a text based UUID + def self.is? (uuid_str) + raise ArgumentError if !uuid_str + if uuid_str.match(/^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/) + return true + else + return false + end + end + # Convert a UUID in string format to the binary representation def self.uuid_pack (uuid_str) - raise ArgumentError if uuid_str.length != 36 + raise ArgumentError if !self.is?(uuid_str) parts = uuid_str.split('-') - raise ArgumentError if parts.length != 5 [ parts[0].hex, parts[1].hex, parts[2].hex, parts[3].hex ].pack('Vvvn') + [ parts[4] ].pack('H*') end diff --git a/lib/rex/proto/dcerpc/uuid.rb.ut.rb b/lib/rex/proto/dcerpc/uuid.rb.ut.rb index 299967717e..29e7df5ccd 100644 --- a/lib/rex/proto/dcerpc/uuid.rb.ut.rb +++ b/lib/rex/proto/dcerpc/uuid.rb.ut.rb @@ -10,6 +10,15 @@ class Rex::Proto::DCERPC::UUID::UnitTest < Test::Unit::TestCase Klass = Rex::Proto::DCERPC::UUID + def test_is_uuid + assert(Klass.is?('afa8bd80-7d8a-11c9-bef4-08002b102989'), 'valid') + assert(!Klass.is?('afa8bd80-7d8a-11c9-bef4-08002b10298'), 'too short') + assert(!Klass.is?('afa8bd80-7d8a-11c9-bef4-08002b10298Z'), 'invalid character') + assert(!Klass.is?('afa8bd80-7d8a-11c9-bef4a08002b10298a'), 'missing dash') + assert(!Klass.is?('afa8bd80-7d8a-11c9-bef-a08002b10298a'), 'dash in wrong place') + assert_raise(Rex::ArgumentError, 'pack - too short') { Klass.is?(nil) } + end + def test_lookup assert_equal(Klass.uuid_by_name('MGMT'), 'afa8bd80-7d8a-11c9-bef4-08002b102989', 'uuid_by_name') assert_equal(Klass.vers_by_name('MGMT'), '2.0', 'vers_by_name') diff --git a/lib/rex/proto/http/packet.rb.ut.rb b/lib/rex/proto/http/packet.rb.ut.rb index aeeb887f73..a30ac078ee 100644 --- a/lib/rex/proto/http/packet.rb.ut.rb +++ b/lib/rex/proto/http/packet.rb.ut.rb @@ -19,12 +19,14 @@ class Rex::Proto::Http::Packet::UnitTest < Test::Unit::TestCase "\r\n" + "Super body" - assert_equal(Klass::ParseCode::Partial, h.parse(req1)) + h.auto_cl = false + h.parse(req1) + assert_equal(Klass::ParseCode::Completed, h.parse(req1)) assert_equal(true, h.completed?) assert_equal("Bird", h.headers['Foo']) assert_equal("text/html", h.headers['Accept']) assert_equal("Super body", h.body); - assert_equal(req1, h.to_s) + assert_equal(req1, h.to_s) end def test_to_s diff --git a/lib/rex/proto/http/request.rb.ut.rb b/lib/rex/proto/http/request.rb.ut.rb index 677163a839..077e418e9d 100644 --- a/lib/rex/proto/http/request.rb.ut.rb +++ b/lib/rex/proto/http/request.rb.ut.rb @@ -5,7 +5,7 @@ $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..')) require 'test/unit' require 'rex/proto/http' -class Rex::Proto::Http::Packet::UnitTest < Test::Unit::TestCase +class Rex::Proto::Http::Request::UnitTest < Test::Unit::TestCase Klass = Rex::Proto::Http::Request @@ -17,7 +17,7 @@ class Rex::Proto::Http::Packet::UnitTest < Test::Unit::TestCase h.auto_cl = true assert_equal( - "GET / HTTP/1.0\r\n" + + "GET / HTTP/1.1\r\n" + "Foo: Fishing\r\n" + "Content-Length: 0\r\n" + "Chicken: 47\r\n\r\n", h.to_s) diff --git a/lib/rex/proto/http/response.rb.ut.rb b/lib/rex/proto/http/response.rb.ut.rb index 68d43d4054..8326a7c7de 100644 --- a/lib/rex/proto/http/response.rb.ut.rb +++ b/lib/rex/proto/http/response.rb.ut.rb @@ -5,7 +5,7 @@ $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..')) require 'test/unit' require 'rex/proto/http' -class Rex::Proto::Http::Packet::UnitTest < Test::Unit::TestCase +class Rex::Proto::Http::Response::UnitTest < Test::Unit::TestCase Klass = Rex::Proto::Http::Response @@ -17,7 +17,7 @@ class Rex::Proto::Http::Packet::UnitTest < Test::Unit::TestCase h.auto_cl = true assert_equal( - "HTTP/1.0 200 OK\r\n" + + "HTTP/1.1 200 OK\r\n" + "Foo: Fishing\r\n" + "Content-Length: 0\r\n" + "Chicken: 47\r\n\r\n", h.to_s) @@ -33,7 +33,7 @@ class Rex::Proto::Http::Packet::UnitTest < Test::Unit::TestCase "Eat: Babies\r\n" + "\r\n") - assert_equal('404', h.code) + assert_equal(404, h.code) assert_equal('File not found', h.message) assert_equal('1.0', h.proto) assert_equal("HTTP/1.0 404 File not found\r\n", h.cmd_string) diff --git a/lib/rex/proto/smb/simpleclient.rb.ut.rb b/lib/rex/proto/smb/simpleclient.rb.ut.rb index 770c804acf..3289d487ca 100644 --- a/lib/rex/proto/smb/simpleclient.rb.ut.rb +++ b/lib/rex/proto/smb/simpleclient.rb.ut.rb @@ -7,7 +7,7 @@ require 'rex/proto/smb' require 'rex/proto/dcerpc' require 'rex/socket' -class Rex::Proto::SMB::Client::UnitTest < Test::Unit::TestCase +class Rex::Proto::SMB::SimpleClient::UnitTest < Test::Unit::TestCase Klass = Rex::Proto::SMB::SimpleClient @@ -23,11 +23,11 @@ class Rex::Proto::SMB::Client::UnitTest < Test::Unit::TestCase FILE_OPEN = 0x01 - @@host = '192.168.0.219' + @@host = '192.168.0.219' + # @@host = '10.4.10.58' @@port = 445 def test_smb_open_share - user = 'SMBTest' pass = 'SMBTest' share = 'C$' @@ -58,9 +58,29 @@ class Rex::Proto::SMB::Client::UnitTest < Test::Unit::TestCase c.delete(filename) c.disconnect(share) - assert_equal(write_data, d) - - c.connect('IPC$') + rescue + puts $!.to_s + $!.backtrace.join("\n") + return + end + + s.close + end + + def test_smb_dcerpc + s = Rex::Socket.create_tcp( + 'PeerHost' => @@host, + 'PeerPort' => @@port + ) + + c = Klass.new(s, true) + c.client.evasion_level = 0 + + user = '' + pass = '' + + begin + c.login('*SMBSERVER', user, pass) + c.connect('IPC$') f = c.create_pipe('\BROWSER') bind, ctx = DCERPCPacket.make_bind_fake_multi( @@ -93,16 +113,12 @@ class Rex::Proto::SMB::Client::UnitTest < Test::Unit::TestCase assert_equal(r.type, 12) assert_equal(r.ack_result[ctx-0], 0) assert_equal(r.ack_result[ctx-1], 2) - - - rescue - puts $!.to_s + $!.backtrace.join("\n") - return - end + rescue + puts $!.to_s + $!.backtrace.join("\n") + return + end s.close - - end - + end end