Compare commits
320 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 286827c6e5 | |||
| 39980c7e87 | |||
| 9e8f1d1160 | |||
| 0f41bdc8b8 | |||
| fd53e969fd | |||
| 405eae4b6e | |||
| 91ba25a898 | |||
| 2c36f79934 | |||
| fa9bd88091 | |||
| 5db7d1edd5 | |||
| 07c3c41269 | |||
| cd61975966 | |||
| fc1635e80a | |||
| 6f5183afec | |||
| 2a24151fa8 | |||
| 105a28d8fd | |||
| a7aeac5df3 | |||
| 1d8b746d89 | |||
| 9fe4994492 | |||
| 5de69ab6a6 | |||
| 3fb6ee4f7d | |||
| 7a62b71839 | |||
| a521d469ed | |||
| d207345778 | |||
| 28135bcb09 | |||
| 9c4614f73c | |||
| e194d5490d | |||
| 0477c5f8fe | |||
| 3b558624f3 | |||
| 723028d5bc | |||
| 40c49cefd8 | |||
| 57aef9a6f5 | |||
| 2abc636f16 | |||
| 77e5043be9 | |||
| 386a1912e5 | |||
| 3faa48d810 | |||
| 7d6b6cba43 | |||
| 651beb9acb | |||
| 812aa9bc1a | |||
| e2dc862121 | |||
| dd1920edd6 | |||
| e72d9bd21f | |||
| 714ce2f3ce | |||
| 5a54537cbc | |||
| 0959ef3d13 | |||
| cd7b69b699 | |||
| 768d7477d7 | |||
| 49f10e6ed8 | |||
| ccc5bbd745 | |||
| 17032b1eed | |||
| 31f3aa1f6d | |||
| 38a96e3cfc | |||
| e25b6145f9 | |||
| f081ede2aa | |||
| ea6d8860a1 | |||
| ebf6fe4e56 | |||
| a5009170e7 | |||
| f658efe144 | |||
| 07a1653e57 | |||
| 9df31e950f | |||
| bfc7bfdd9a | |||
| 846dbc7432 | |||
| 54158c8662 | |||
| d242bc220b | |||
| 955a5142ca | |||
| e05cd95c9b | |||
| e0163a325d | |||
| 5d48f123f6 | |||
| c937982a28 | |||
| 758fee6320 | |||
| ad811dc70c | |||
| ad4ee3cffd | |||
| 1fd8fe57df | |||
| 1895311911 | |||
| ac4b2bee4d | |||
| 8689b0adef | |||
| 70589668c2 | |||
| e658640014 | |||
| ece8013d7a | |||
| f048463ed6 | |||
| b05198c05a | |||
| a5c87db65e | |||
| e1164d3e14 | |||
| ae339cb59f | |||
| c35dc2e6b3 | |||
| b2612eaf1c | |||
| adad3809cc | |||
| 89a8d27602 | |||
| 329ea4fe01 | |||
| c73a866932 | |||
| fb751e3b9f | |||
| 7e05f88399 | |||
| 6b4eb9a8e2 | |||
| 2a6d288fe8 | |||
| 64aaa50132 | |||
| baf7065e1b | |||
| 017a44c0ae | |||
| 2d4cc8b21c | |||
| deea30ddb4 | |||
| 14514d7b8b | |||
| dbd5937dc7 | |||
| 96ba6da697 | |||
| 6653d5e913 | |||
| 01fda27264 | |||
| a588bfd31a | |||
| 77c8dc2b64 | |||
| fb309aae11 | |||
| f6762b41b6 | |||
| 94c353222d | |||
| e9e5869951 | |||
| c0285067c9 | |||
| ac17780f6d | |||
| 6bf1f613b6 | |||
| 091da05a86 | |||
| 39b8bcc808 | |||
| 4987f77526 | |||
| 3faf4a4702 | |||
| cac6494427 | |||
| 2c33642de8 | |||
| 12ae8b3ec6 | |||
| 493b81d874 | |||
| 31fa57fcb2 | |||
| d543b16cc1 | |||
| ea226f7482 | |||
| 0a68171bab | |||
| bf1558d702 | |||
| d4bbf0fe39 | |||
| 86ff5f93eb | |||
| 4e96833408 | |||
| 1064049729 | |||
| cc99a6a96f | |||
| 74344e9295 | |||
| 0b51741779 | |||
| 4b701700c1 | |||
| 7ed11ffd52 | |||
| 65dbb1a83f | |||
| 7aed1e9581 | |||
| 92df11baa7 | |||
| 8f17011909 | |||
| 635df2f233 | |||
| 9c033492d2 | |||
| 2236518694 | |||
| 8b8ab61e3d | |||
| ee4924582a | |||
| 8ddd6a4655 | |||
| eb36a36272 | |||
| 8511dc4131 | |||
| 7edc248207 | |||
| 1844b3956d | |||
| 03a988b5dc | |||
| 88810ce836 | |||
| 0e772cc338 | |||
| eb830cb361 | |||
| 7980a7052c | |||
| 8f3b1e71b3 | |||
| cd0dbc0e24 | |||
| 9cce7643ab | |||
| 5d17637038 | |||
| b3c27452cd | |||
| 613f5309bb | |||
| 104841babf | |||
| bc5529396f | |||
| f680b666c7 | |||
| 143033f657 | |||
| 2843437ca9 | |||
| 7d2d0aa166 | |||
| e7b448537f | |||
| bf7c7688c0 | |||
| 9d6e0664a4 | |||
| a44640c9fc | |||
| 7c1c08fc19 | |||
| 0373156cce | |||
| f5a920da99 | |||
| 64754a5609 | |||
| 0919f74a3d | |||
| 22b875d0f3 | |||
| b1517e6ace | |||
| aa1fec7f02 | |||
| d630eac272 | |||
| cea30b5427 | |||
| e99cc00a57 | |||
| a830c28012 | |||
| 2b7d25950b | |||
| e54442af36 | |||
| 0dbfecba36 | |||
| c00a3ac9cd | |||
| 08e707225c | |||
| b5220c8881 | |||
| 8a0249cdbf | |||
| 579481e5f8 | |||
| f210ade253 | |||
| 9295d9077e | |||
| 8bf6a34d6c | |||
| e71ba1ad4a | |||
| 490d6d046b | |||
| 382d34d398 | |||
| 63b4c0beba | |||
| 9137bd6527 | |||
| 713578aea7 | |||
| a3829b800d | |||
| 5619b6d554 | |||
| 06222911f6 | |||
| 3093ba8394 | |||
| a56a063b84 | |||
| 2bec646393 | |||
| 8aa6fca760 | |||
| ff6bc5cf68 | |||
| 78a4ee686b | |||
| 9f573e2d8d | |||
| dee02fc85b | |||
| 56a02fdb4a | |||
| 313d86982c | |||
| 1d09fa677e | |||
| 4f986c4a48 | |||
| 45fea32c77 | |||
| c115ad3c36 | |||
| 7cb0954a6e | |||
| b0f1b2a1f7 | |||
| cc4e553c11 | |||
| 0c769e2fd7 | |||
| 78ea93044b | |||
| ff0391cdc7 | |||
| 15119d2a0f | |||
| f108d7b20a | |||
| fbe3adcb4c | |||
| 9ea1240cbb | |||
| 0296d1784d | |||
| 8f197d4918 | |||
| 05dd3fa4ba | |||
| d97bc52d8a | |||
| f0001eb9e6 | |||
| 121ebdfef6 | |||
| 0b8b0499f3 | |||
| 83475bb929 | |||
| f5ee2d7948 | |||
| b99e71dcdd | |||
| c921611821 | |||
| ff0b52cffb | |||
| 1f6658639f | |||
| 94d4388af9 | |||
| f16720bb55 | |||
| f66c43475b | |||
| 77cd6dbc8b | |||
| d9f0a10737 | |||
| 8b4767449f | |||
| 325c01e45d | |||
| ae0a98785f | |||
| c8e4745d6d | |||
| c2bd75b587 | |||
| 7e2897277b | |||
| 892aeaf727 | |||
| 0d4b22ce7a | |||
| f9b1f2a424 | |||
| 3ec9cf54c9 | |||
| 1a1f3335b8 | |||
| a0a9c2140b | |||
| c6519d08c0 | |||
| 4251ad199e | |||
| 88d093eb7e | |||
| 5547890002 | |||
| 36c85b7150 | |||
| 605f48e58d | |||
| 13b6f1cf48 | |||
| 33ca914fc1 | |||
| 2a6a8245cf | |||
| 080ea3e56a | |||
| 06fbbf7001 | |||
| 43354774e1 | |||
| ae45c1b9d3 | |||
| a6a2886faa | |||
| 112b5988f2 | |||
| 0c00c7cc50 | |||
| 7ffd07c44d | |||
| 575717681c | |||
| 172afd180a | |||
| 45302b9403 | |||
| cbae9be5b5 | |||
| d86eda5f1d | |||
| a59e635913 | |||
| e822920298 | |||
| ebc62cf9c9 | |||
| 839657abec | |||
| b5039c3817 | |||
| ee9623c11e | |||
| 244e4a9954 | |||
| be945d26fc | |||
| 2e538bd72d | |||
| 7743fdb2f9 | |||
| 0e53548c82 | |||
| e5cc456be7 | |||
| 27c006a8f9 | |||
| 9981271e2a | |||
| c8730ca55b | |||
| fe5ffa9cec | |||
| c501e1e58a | |||
| d5c7a50e86 | |||
| 925cd63171 | |||
| e6f442697b | |||
| e418f98d45 | |||
| 28af6a490b | |||
| 44b2e5e35c | |||
| a2dc3b754f | |||
| 31c93e9dbc | |||
| f8ada87e86 | |||
| f9caa4d25e | |||
| c50cb2eb8a | |||
| a3afb92ee2 | |||
| a9a6f0c5f9 | |||
| 96864b3892 | |||
| bc2bd99698 | |||
| 4d9f7db15a | |||
| f5d09f735e | |||
| 9b10a3f1dc | |||
| 85169d5e8d | |||
| 6a194b3a88 | |||
| f068d669d6 | |||
| 370daaed5e | |||
| 621b9523b1 | |||
| 1996886ae9 | |||
| 22aabc7805 |
+8
-3
@@ -8,7 +8,7 @@
|
||||
|
||||
# inherit_from: .rubocop_todo.yml
|
||||
|
||||
Style/ClassLength:
|
||||
Metrics/ClassLength:
|
||||
Description: 'Most Metasploit modules are quite large. This is ok.'
|
||||
Enabled: true
|
||||
Exclude:
|
||||
@@ -25,14 +25,14 @@ Style/Encoding:
|
||||
Description: 'We prefer binary to UTF-8.'
|
||||
EnforcedStyle: 'when_needed'
|
||||
|
||||
Style/LineLength:
|
||||
Metrics/LineLength:
|
||||
Description: >-
|
||||
Metasploit modules often pattern match against very
|
||||
long strings when identifying targets.
|
||||
Enabled: true
|
||||
Max: 180
|
||||
|
||||
Style/MethodLength:
|
||||
Metrics/MethodLength:
|
||||
Enabled: true
|
||||
Description: >-
|
||||
While the style guide suggests 10 lines, exploit definitions
|
||||
@@ -44,6 +44,11 @@ Style/MethodLength:
|
||||
Style/Encoding:
|
||||
Enabled: false
|
||||
|
||||
# %q() is super useful for long strings split over multiple lines and
|
||||
# is very common in module constructors for things like descriptions
|
||||
Style/UnneededPercentQ:
|
||||
Enabled: false
|
||||
|
||||
Style/NumericLiterals:
|
||||
Enabled: false
|
||||
Description: 'This often hurts readability for exploit-ish code.'
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1.9.3-p550
|
||||
1.9.3-p551
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
# Changelog
|
||||
|
||||
# Next Release
|
||||
* Enhancements
|
||||
* [#4045](https://github.com/rapid7/metasploit-framework/pull/4045): Reorganize Msf::Module into submodule of related methods to reduce file size and allow for easier understanding of functionality - [@limhoff-r7](https://github.com/limhoff-r7)
|
||||
* Bug Fixes
|
||||
* Deprecations
|
||||
* Incompatible Changes
|
||||
@@ -1,18 +1,10 @@
|
||||
source 'https://rubygems.org'
|
||||
# Add default group gems to `metasploit-framework.gemspec`:
|
||||
# spec.add_runtime_dependency '<name>', [<version requirements>]
|
||||
gemspec
|
||||
gemspec name: 'metasploit-framework'
|
||||
|
||||
group :db do
|
||||
# Needed for Msf::DbManager
|
||||
gem 'activerecord', '>= 3.0.0', '< 4.0.0'
|
||||
|
||||
# Metasploit::Credential database models
|
||||
gem 'metasploit-credential', '~> 0.12.0'
|
||||
# Database models shared between framework and Pro.
|
||||
gem 'metasploit_data_models', '~> 0.21.1'
|
||||
# Needed for module caching in Mdm::ModuleDetails
|
||||
gem 'pg', '>= 0.11'
|
||||
gemspec name: 'metasploit-framework-db'
|
||||
end
|
||||
|
||||
group :development do
|
||||
@@ -43,9 +35,7 @@ group :development, :test do
|
||||
end
|
||||
|
||||
group :pcap do
|
||||
gem 'network_interface', '~> 0.0.1'
|
||||
# For sniffer and raw socket modules
|
||||
gem 'pcaprub'
|
||||
gemspec name: 'metasploit-framework-pcap'
|
||||
end
|
||||
|
||||
group :test do
|
||||
|
||||
+23
-17
@@ -9,7 +9,7 @@ PATH
|
||||
json
|
||||
metasploit-concern (~> 0.3.0)
|
||||
metasploit-model (~> 0.28.0)
|
||||
meterpreter_bins (= 0.0.10)
|
||||
meterpreter_bins (= 0.0.11)
|
||||
msgpack
|
||||
nokogiri
|
||||
packetfu (= 1.1.9)
|
||||
@@ -20,6 +20,16 @@ PATH
|
||||
rubyzip (~> 1.1)
|
||||
sqlite3
|
||||
tzinfo
|
||||
metasploit-framework-db (4.10.1.pre.dev)
|
||||
activerecord (< 4.0.0)
|
||||
metasploit-credential (~> 0.13.3)
|
||||
metasploit-framework (= 4.10.1.pre.dev)
|
||||
metasploit_data_models (~> 0.21.1)
|
||||
pg (>= 0.11)
|
||||
metasploit-framework-pcap (4.10.1.pre.dev)
|
||||
metasploit-framework (= 4.10.1.pre.dev)
|
||||
network_interface (~> 0.0.1)
|
||||
pcaprub
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
@@ -102,7 +112,7 @@ GEM
|
||||
metasploit-concern (0.3.0)
|
||||
activesupport (~> 3.0, >= 3.0.0)
|
||||
railties (< 4.0.0)
|
||||
metasploit-credential (0.12.0)
|
||||
metasploit-credential (0.13.3)
|
||||
metasploit-concern (~> 0.3.0)
|
||||
metasploit-model (~> 0.28.0)
|
||||
metasploit_data_models (~> 0.21.0)
|
||||
@@ -113,7 +123,7 @@ GEM
|
||||
metasploit-model (0.28.0)
|
||||
activesupport
|
||||
railties (< 4.0.0)
|
||||
metasploit_data_models (0.21.1)
|
||||
metasploit_data_models (0.21.2)
|
||||
activerecord (>= 3.2.13, < 4.0.0)
|
||||
activesupport
|
||||
arel-helpers
|
||||
@@ -122,15 +132,15 @@ GEM
|
||||
pg
|
||||
railties (< 4.0.0)
|
||||
recog (~> 1.0)
|
||||
meterpreter_bins (0.0.10)
|
||||
meterpreter_bins (0.0.11)
|
||||
method_source (0.8.2)
|
||||
mime-types (1.25.1)
|
||||
mini_portile (0.6.0)
|
||||
mini_portile (0.6.1)
|
||||
msgpack (0.5.9)
|
||||
multi_json (1.0.4)
|
||||
network_interface (0.0.1)
|
||||
nokogiri (1.6.3.1)
|
||||
mini_portile (= 0.6.0)
|
||||
nokogiri (1.6.4.1)
|
||||
mini_portile (~> 0.6.0)
|
||||
packetfu (1.1.9)
|
||||
pcaprub (0.11.3)
|
||||
pg (0.17.1)
|
||||
@@ -165,7 +175,7 @@ GEM
|
||||
rb-readline (0.5.1)
|
||||
rdoc (3.12.2)
|
||||
json (~> 1.4)
|
||||
recog (1.0.0)
|
||||
recog (1.0.5)
|
||||
nokogiri
|
||||
redcarpet (3.1.2)
|
||||
rkelly-remix (0.0.6)
|
||||
@@ -197,19 +207,19 @@ GEM
|
||||
simplecov-html (~> 0.5.3)
|
||||
simplecov-html (0.5.3)
|
||||
slop (3.6.0)
|
||||
sprockets (2.2.2)
|
||||
sprockets (2.2.3)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
sqlite3 (1.3.9)
|
||||
sqlite3 (1.3.10)
|
||||
thor (0.19.1)
|
||||
tilt (1.4.1)
|
||||
timecop (0.7.1)
|
||||
treetop (1.4.15)
|
||||
polyglot
|
||||
polyglot (>= 0.3.1)
|
||||
tzinfo (0.3.41)
|
||||
tzinfo (0.3.42)
|
||||
xpath (2.0.0)
|
||||
nokogiri (~> 1.3)
|
||||
yard (0.8.7.4)
|
||||
@@ -218,18 +228,14 @@ PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
activerecord (>= 3.0.0, < 4.0.0)
|
||||
aruba
|
||||
cucumber-rails
|
||||
factory_girl (>= 4.1.0)
|
||||
factory_girl_rails
|
||||
fivemat (= 1.2.1)
|
||||
metasploit-credential (~> 0.12.0)
|
||||
metasploit-framework!
|
||||
metasploit_data_models (~> 0.21.1)
|
||||
network_interface (~> 0.0.1)
|
||||
pcaprub
|
||||
pg (>= 0.11)
|
||||
metasploit-framework-db!
|
||||
metasploit-framework-pcap!
|
||||
pry
|
||||
rake (>= 10.0.0)
|
||||
redcarpet
|
||||
|
||||
@@ -10,4 +10,5 @@ require 'metasploit/framework/spec/untested_payloads'
|
||||
Metasploit::Framework::Require.optionally_active_record_railtie
|
||||
|
||||
Metasploit::Framework::Application.load_tasks
|
||||
Metasploit::Framework::Spec::Constants.define_task
|
||||
Metasploit::Framework::Spec::UntestedPayloads.define_task
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="bin" ContentType="application/vnd.openxmlformats-officedocument.oleObject"/><Default Extension="wmf" ContentType="image/x-wmf"/><Default Extension="jpeg" ContentType="image/jpeg"/><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Default Extension="vml" ContentType="application/vnd.openxmlformats-officedocument.vmlDrawing"/><Override PartName="/ppt/presentation.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml"/><Override PartName="/ppt/slideMasters/slideMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml"/><Override PartName="/ppt/slides/slide1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/><Override PartName="/ppt/presProps.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presProps+xml"/><Override PartName="/ppt/viewProps.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml"/><Override PartName="/ppt/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/ppt/tableStyles.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml"/><Override PartName="/ppt/slideLayouts/slideLayout1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout3.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout4.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout5.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout6.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout7.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout8.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout9.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout10.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/ppt/slideLayouts/slideLayout11.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/></Types>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail" Target="docProps/thumbnail.jpeg"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="ppt/presentation.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/></Relationships>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Template></Template><TotalTime>37</TotalTime><Words>2</Words><Application>Microsoft Office PowerPoint</Application><PresentationFormat>On-screen Show (4:3)</PresentationFormat><Paragraphs>2</Paragraphs><Slides>1</Slides><Notes>0</Notes><HiddenSlides>0</HiddenSlides><MMClips>0</MMClips><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size="6" baseType="variant"><vt:variant><vt:lpstr>Theme</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant><vt:variant><vt:lpstr>Embedded OLE Servers</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant><vt:variant><vt:lpstr>Slide Titles</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size="3" baseType="lpstr"><vt:lpstr>Office Theme</vt:lpstr><vt:lpstr>Packager Shell Object</vt:lpstr><vt:lpstr>Example</vt:lpstr></vt:vector></TitlesOfParts><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>14.0000</AppVersion></Properties>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>Example</dc:title><cp:lastModifiedBy>Windows User</cp:lastModifiedBy><cp:revision>9</cp:revision><dcterms:created xsi:type="dcterms:W3CDTF">2014-08-06T07:56:10Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2014-11-12T06:36:10Z</dcterms:modified></cp:coreProperties>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps" Target="presProps.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="slideMasters/slideMaster1.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles" Target="tableStyles.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps" Target="viewProps.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="../media/image1.wmf"/></Relationships>
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
<xml xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:p="urn:schemas-microsoft-com:office:powerpoint"
|
||||
xmlns:oa="urn:schemas-microsoft-com:office:activation">
|
||||
<o:shapelayout v:ext="edit">
|
||||
<o:idmap v:ext="edit" data="1"/>
|
||||
</o:shapelayout><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75"
|
||||
o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
|
||||
<v:stroke joinstyle="miter"/>
|
||||
<v:formulas>
|
||||
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
|
||||
<v:f eqn="sum @0 1 0"/>
|
||||
<v:f eqn="sum 0 0 @1"/>
|
||||
<v:f eqn="prod @2 1 2"/>
|
||||
<v:f eqn="prod @3 21600 pixelWidth"/>
|
||||
<v:f eqn="prod @3 21600 pixelHeight"/>
|
||||
<v:f eqn="sum @0 0 1"/>
|
||||
<v:f eqn="prod @6 1 2"/>
|
||||
<v:f eqn="prod @7 21600 pixelWidth"/>
|
||||
<v:f eqn="sum @8 21600 0"/>
|
||||
<v:f eqn="prod @7 21600 pixelHeight"/>
|
||||
<v:f eqn="sum @10 21600 0"/>
|
||||
</v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
|
||||
<o:lock v:ext="edit" aspectratio="t"/>
|
||||
</v:shapetype><v:shape id="_x0000_s1034" type="#_x0000_t75" style='position:absolute;left:100pt;top:-100pt;width:30pt;height:30pt'>
|
||||
<v:fill color="white" opacity="1" on="f" type="solid"/>
|
||||
<v:stroke on="f"/>
|
||||
<v:imagedata o:relid="rId1" o:title="" croptop="0" cropbottom="0" cropleft="0"
|
||||
cropright="0" grayscale="f" bilevel="f"/>
|
||||
<o:lock v:ext="edit" aspectratio="t" position="f" selection="f" grouping="f"/>
|
||||
</v:shape></xml>
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:presentationPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:extLst><p:ext uri="{E76CE94A-603C-4142-B9EB-6D1370010A27}"><p14:discardImageEditData xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="0"/></p:ext><p:ext uri="{D31A062A-798A-4329-ABDD-BBA856620510}"><p14:defaultImageDpi xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="220"/></p:ext><p:ext uri="{FD5EFAAD-0ECE-453E-9831-46B23BE46B34}"><p15:chartTrackingRefBased xmlns:p15="http://schemas.microsoft.com/office/powerpoint/2012/main" xmlns="" val="0"/></p:ext></p:extLst></p:presentationPr>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:presentation xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" saveSubsetFonts="1"><p:sldMasterIdLst><p:sldMasterId id="2147483648" r:id="rId1"/></p:sldMasterIdLst><p:sldIdLst><p:sldId id="256" r:id="rId2"/></p:sldIdLst><p:sldSz cx="9144000" cy="6858000" type="screen4x3"/><p:notesSz cx="6858000" cy="9144000"/><p:defaultTextStyle><a:defPPr><a:defRPr lang="en-US"/></a:defPPr><a:lvl1pPr marL="0" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl9pPr></p:defaultTextStyle><p:extLst><p:ext uri="{EFAFB233-063F-42B5-8137-9DF3F51BA10A}"><p15:sldGuideLst xmlns:p15="http://schemas.microsoft.com/office/powerpoint/2012/main" xmlns="">
|
||||
<p15:guide id="1" orient="horz" pos="2160">
|
||||
<p15:clr>
|
||||
<a:srgbClr val="A4A3A4"/>
|
||||
</p15:clr>
|
||||
</p15:guide>
|
||||
<p15:guide id="2" pos="2880">
|
||||
<p15:clr>
|
||||
<a:srgbClr val="A4A3A4"/>
|
||||
</p15:clr>
|
||||
</p15:guide>
|
||||
</p15:sldGuideLst></p:ext></p:extLst></p:presentation>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" Target="../slideMasters/slideMaster1.xml"/></Relationships>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="title" preserve="1"><p:cSld name="Title Slide"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ctrTitle"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="685800" y="2130425"/><a:ext cx="7772400" cy="1470025"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Subtitle 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="subTitle" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1371600" y="3886200"/><a:ext cx="6400800" cy="1752600"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0" algn="ctr"><a:buNone/><a:defRPr><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master subtitle style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="vertTx" preserve="1"><p:cSld name="Title and Vertical Text"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Vertical Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" orient="vert" idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="vertTitleAndTx" preserve="1"><p:cSld name="Vertical Title and Text"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Vertical Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title" orient="vert"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="6629400" y="274638"/><a:ext cx="2057400" cy="5851525"/></a:xfrm></p:spPr><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Vertical Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" orient="vert" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="274638"/><a:ext cx="6019800" cy="5851525"/></a:xfrm></p:spPr><p:txBody><a:bodyPr vert="eaVert"/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="obj" preserve="1"><p:cSld name="Title and Content"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="secHead" preserve="1"><p:cSld name="Section Header"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="4406900"/><a:ext cx="7772400" cy="1362075"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="t"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="4000" b="1" cap="all"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="2906713"/><a:ext cx="7772400" cy="1500187"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2000"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1800"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1600"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="twoObj" preserve="1"><p:cSld name="Two Content"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="half" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1600200"/><a:ext cx="4038600" cy="4525963"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2800"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2400"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2000"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1800"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1800"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1800"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1800"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1800"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1800"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Content Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="4648200" y="1600200"/><a:ext cx="4038600" cy="4525963"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="2800"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2400"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2000"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="1800"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="1800"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="1800"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="1800"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="1800"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="1800"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
File diff suppressed because one or more lines are too long
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="titleOnly" preserve="1"><p:cSld name="Title Only"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Date Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Footer Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Slide Number Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="blank" preserve="1"><p:cSld name="Blank"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Date Placeholder 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Footer Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Slide Number Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="objTx" preserve="1"><p:cSld name="Content with Caption"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="273050"/><a:ext cx="3008313" cy="1162050"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="2000" b="1"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="3575050" y="273050"/><a:ext cx="5111750" cy="5853113"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr><a:defRPr sz="3200"/></a:lvl1pPr><a:lvl2pPr><a:defRPr sz="2800"/></a:lvl2pPr><a:lvl3pPr><a:defRPr sz="2400"/></a:lvl3pPr><a:lvl4pPr><a:defRPr sz="2000"/></a:lvl4pPr><a:lvl5pPr><a:defRPr sz="2000"/></a:lvl5pPr><a:lvl6pPr><a:defRPr sz="2000"/></a:lvl6pPr><a:lvl7pPr><a:defRPr sz="2000"/></a:lvl7pPr><a:lvl8pPr><a:defRPr sz="2000"/></a:lvl8pPr><a:lvl9pPr><a:defRPr sz="2000"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p><a:p><a:pPr lvl="1"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Second level</a:t></a:r></a:p><a:p><a:pPr lvl="2"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Third level</a:t></a:r></a:p><a:p><a:pPr lvl="3"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fourth level</a:t></a:r></a:p><a:p><a:pPr lvl="4"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Fifth level</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Text Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="457200" y="1435100"/><a:ext cx="3008313" cy="4691063"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="1400"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1200"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1000"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="picTx" preserve="1"><p:cSld name="Picture with Caption"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="4800600"/><a:ext cx="5486400" cy="566738"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="2000" b="1"/></a:lvl1pPr></a:lstStyle><a:p><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master title style</a:t></a:r><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Picture Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="pic" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="612775"/><a:ext cx="5486400" cy="4114800"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="3200"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="2800"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="2400"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="2000"/></a:lvl9pPr></a:lstStyle><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Text Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" sz="half" idx="2"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="1792288" y="5367338"/><a:ext cx="5486400" cy="804862"/></a:xfrm></p:spPr><p:txBody><a:bodyPr/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="1400"/></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1200"/></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1000"/></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="900"/></a:lvl9pPr></a:lstStyle><a:p><a:pPr lvl="0"/><a:r><a:rPr lang="en-US" smtClean="0"/><a:t>Click to edit Master text styles</a:t></a:r></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="5" name="Date Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{A3E2BFEF-B464-43B7-BACB-B80E2ED36959}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>11/12/2014</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Footer Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="7" name="Slide Number Placeholder 6"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{FDE0A223-AA89-463D-95C0-64ABE7403E02}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout8.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout3.xml"/><Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout7.xml"/><Relationship Id="rId12" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="../theme/theme1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout2.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout1.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout6.xml"/><Relationship Id="rId11" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout11.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout5.xml"/><Relationship Id="rId10" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout10.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout4.xml"/><Relationship Id="rId9" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout9.xml"/></Relationships>
|
||||
+2
File diff suppressed because one or more lines are too long
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="../embeddings/oleObject1.bin"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing" Target="../drawings/vmlDrawing1.vml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="../media/image1.wmf"/></Relationships>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<a:tblStyleLst xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" def="{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}"/>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<p:viewPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:normalViewPr><p:restoredLeft sz="15620"/><p:restoredTop sz="94660"/></p:normalViewPr><p:slideViewPr><p:cSldViewPr><p:cViewPr varScale="1"><p:scale><a:sx n="57" d="100"/><a:sy n="57" d="100"/></p:scale><p:origin x="-1242" y="-522"/></p:cViewPr><p:guideLst><p:guide orient="horz" pos="2160"/><p:guide pos="2880"/></p:guideLst></p:cSldViewPr></p:slideViewPr><p:notesTextViewPr><p:cViewPr><p:scale><a:sx n="100" d="100"/><a:sy n="100" d="100"/></p:scale><p:origin x="0" y="0"/></p:cViewPr></p:notesTextViewPr><p:gridSpacing cx="76200" cy="76200"/></p:viewPr>
|
||||
@@ -0,0 +1,41 @@
|
||||
%clr
|
||||
%mag .~+P``````-o+:. -o+:.%clr
|
||||
%mag.+oooyysyyssyyssyddh++os-````` ``````````````` `%clr
|
||||
%mag+++++++++++++++++++++++sydhyoyso/:.````...`...-///::+ohhyosyyosyy/+om++:ooo///o%clr
|
||||
%mag++++///////~~~~///////++++++++++++++++ooyysoyysosso+++++++++++++++++++///oossosy%clr
|
||||
%mag--.` .-.-...-////+++++++++++++++////////~~//////++++++++++++///%clr
|
||||
%mag `...............` `...-/////...`%clr
|
||||
%clr
|
||||
%clr
|
||||
%whi .::::::::::-. .::::::-%clr
|
||||
%whi .hmMMMMMMMMMMNddds\...//M\\.../hddddmMMMMMMNo%clr
|
||||
%whi :Nm-/NMMMMMMMMMMMMM%blu$$%whiNMMMMm%blu&&%whiMMMMMMMMMMMMMMy%clr
|
||||
%whi .sm/`-yMMMMMMMMMMMM%blu$$%whiMMMMMN%blu&&%whiMMMMMMMMMMMMMh`%clr
|
||||
%whi -Nd` :MMMMMMMMMMM%blu$$%whiMMMMMN%blu&&%whiMMMMMMMMMMMMh`%clr
|
||||
%whi -Nh` .yMMMMMMMMMM%blu$$%whiMMMMMN%blu&&%whiMMMMMMMMMMMm/%clr
|
||||
%whi `oo/``-hd: `` .sNd :MMMMMMMMMM%blu$$%whiMMMMMN%blu&&%whiMMMMMMMMMMm/%clr
|
||||
%whi .yNmMMh%dred//%whi+syysso-`````` -mh` :MMMMMMMMMM%blu$$%whiMMMMMN%blu&&%whiMMMMMMMMMMd%clr
|
||||
%whi .shMMMMN%dred//%whidmNMMMMMMMMMMMMs` `:```-o++++oooo+:/ooooo+:+o+++oooo++/%clr
|
||||
%whi `///omh%dred//%whidMMMMMMMMMMMMMMMN/%dred:::::/+ooso--/ydh//+s+/ossssso:--syN///os:%clr
|
||||
%whi /MMMMMMMMMMMMMMMMMMd. %dred`/++-.-yy/%whi...%dredosydh/-+oo:-`o//%whi...%dredoyodh+%clr
|
||||
%whi -hMMmssddd+:dMMmNMMh. %dred`.-=mmk.%whi//^^^\\%dred.^^`:++:^^o:%whi//^^^\\%dred`::%clr
|
||||
%whi .sMMmo. -dMd--:mN/` %whi||--X--||%clr %dred%whi||--X--||%clr
|
||||
%whi........../yddy/:...+hmo-...hdd:............%whi\\=v=//%clr............%dred%whi\\=v=//%clr.........
|
||||
%grn================================================================================%clr
|
||||
%grn=====================%whi+--------------------------------+%grn=========================%clr
|
||||
%grn=====================%whi| Session one died of dysentery. |%grn=========================%clr
|
||||
%grn=====================%whi+--------------------------------+%grn=========================%clr
|
||||
%grn================================================================================%clr
|
||||
%clr
|
||||
%clr %grnPress ENTER to size up the situation%clr
|
||||
%clr
|
||||
%whi%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clr
|
||||
%whi%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Date: April 25, 1848 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clr
|
||||
%whi%%%%%%%%%%%%%%%%%%%%%%%%%% Weather: It's always cool in the lab %%%%%%%%%%%%%%%%%clr
|
||||
%whi%%%%%%%%%%%%%%%%%%%%%%%%%%% Health: Overweight %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clr
|
||||
%whi%%%%%%%%%%%%%%%%%%%%%%%%% Caffeine: 12975 mg %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clr
|
||||
%whi%%%%%%%%%%%%%%%%%%%%%%%%%%% Hacked: All the things %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clr
|
||||
%whi%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clr
|
||||
%clr
|
||||
%clr %whiPress SPACE BAR to continue%clr
|
||||
%clr
|
||||
@@ -215,6 +215,9 @@ if has_ctypes:
|
||||
("wProcessorLevel", ctypes.c_uint16),
|
||||
("wProcessorRevision", ctypes.c_uint16)]
|
||||
|
||||
class TOKEN_USER(ctypes.Structure):
|
||||
_fields_ = [("User", SID_AND_ATTRIBUTES)]
|
||||
|
||||
#
|
||||
# Linux Structures
|
||||
#
|
||||
@@ -364,6 +367,7 @@ TLV_TYPE_COMPUTER_NAME = TLV_META_TYPE_STRING | 1040
|
||||
TLV_TYPE_OS_NAME = TLV_META_TYPE_STRING | 1041
|
||||
TLV_TYPE_USER_NAME = TLV_META_TYPE_STRING | 1042
|
||||
TLV_TYPE_ARCHITECTURE = TLV_META_TYPE_STRING | 1043
|
||||
TLV_TYPE_SID = TLV_META_TYPE_STRING | 1045
|
||||
|
||||
##
|
||||
# Environment
|
||||
@@ -525,6 +529,36 @@ def get_stat_buffer(path):
|
||||
st_buf += struct.pack('<II', blksize, blocks)
|
||||
return st_buf
|
||||
|
||||
def get_token_user(handle):
|
||||
TOKEN_QUERY = 0x0008
|
||||
TokenUser = 1
|
||||
advapi32 = ctypes.windll.advapi32
|
||||
advapi32.OpenProcessToken.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_void_p)]
|
||||
|
||||
token_handle = ctypes.c_void_p()
|
||||
if not advapi32.OpenProcessToken(handle, TOKEN_QUERY, ctypes.byref(token_handle)):
|
||||
return None
|
||||
token_user_buffer = (ctypes.c_byte * 4096)()
|
||||
dw_returned = ctypes.c_uint32()
|
||||
result = advapi32.GetTokenInformation(token_handle, TokenUser, ctypes.byref(token_user_buffer), ctypes.sizeof(token_user_buffer), ctypes.byref(dw_returned))
|
||||
ctypes.windll.kernel32.CloseHandle(token_handle)
|
||||
if not result:
|
||||
return None
|
||||
return cstruct_unpack(TOKEN_USER, token_user_buffer)
|
||||
|
||||
def get_username_from_token(token_user):
|
||||
user = (ctypes.c_char * 512)()
|
||||
domain = (ctypes.c_char * 512)()
|
||||
user_len = ctypes.c_uint32()
|
||||
user_len.value = ctypes.sizeof(user)
|
||||
domain_len = ctypes.c_uint32()
|
||||
domain_len.value = ctypes.sizeof(domain)
|
||||
use = ctypes.c_ulong()
|
||||
use.value = 0
|
||||
if not ctypes.windll.advapi32.LookupAccountSidA(None, token_user.User.Sid, user, ctypes.byref(user_len), domain, ctypes.byref(domain_len), ctypes.byref(use)):
|
||||
return None
|
||||
return str(ctypes.string_at(domain)) + '\\' + str(ctypes.string_at(user))
|
||||
|
||||
def netlink_request(req_type):
|
||||
import select
|
||||
# See RFC 3549
|
||||
@@ -632,11 +666,6 @@ def channel_open_stdapi_net_tcp_server(request, response):
|
||||
response += tlv_pack(TLV_TYPE_CHANNEL_ID, channel_id)
|
||||
return ERROR_SUCCESS, response
|
||||
|
||||
@meterpreter.register_function
|
||||
def stdapi_sys_config_getuid(request, response):
|
||||
response += tlv_pack(TLV_TYPE_USER_NAME, getpass.getuser())
|
||||
return ERROR_SUCCESS, response
|
||||
|
||||
@meterpreter.register_function
|
||||
def stdapi_sys_config_getenv(request, response):
|
||||
for env_var in packet_enum_tlvs(request, TLV_TYPE_ENV_VARIABLE):
|
||||
@@ -649,6 +678,32 @@ def stdapi_sys_config_getenv(request, response):
|
||||
response += tlv_pack(TLV_TYPE_ENV_GROUP, pgroup)
|
||||
return ERROR_SUCCESS, response
|
||||
|
||||
@meterpreter.register_function_windll
|
||||
def stdapi_sys_config_getsid(request, response):
|
||||
token = get_token_user(ctypes.windll.kernel32.GetCurrentProcess())
|
||||
if not token:
|
||||
return ERROR_FAILURE, response
|
||||
sid_str = ctypes.c_char_p()
|
||||
if not ctypes.windll.advapi32.ConvertSidToStringSidA(token.User.Sid, ctypes.byref(sid_str)):
|
||||
return ERROR_FAILURE, response
|
||||
sid_str = str(ctypes.string_at(sid_str))
|
||||
response += tlv_pack(TLV_TYPE_SID, sid_str)
|
||||
return ERROR_SUCCESS, response
|
||||
|
||||
@meterpreter.register_function
|
||||
def stdapi_sys_config_getuid(request, response):
|
||||
if has_windll:
|
||||
token = get_token_user(ctypes.windll.kernel32.GetCurrentProcess())
|
||||
if not token:
|
||||
return ERROR_FAILURE, response
|
||||
username = get_username_from_token(token)
|
||||
if not username:
|
||||
return ERROR_FAILURE, response
|
||||
else:
|
||||
username = getpass.getuser()
|
||||
response += tlv_pack(TLV_TYPE_USER_NAME, username)
|
||||
return ERROR_SUCCESS, response
|
||||
|
||||
@meterpreter.register_function
|
||||
def stdapi_sys_config_sysinfo(request, response):
|
||||
uname_info = platform.uname()
|
||||
@@ -821,26 +876,10 @@ def stdapi_sys_process_get_processes_via_windll(request, response):
|
||||
exe_path = ctypes.string_at(exe_path)
|
||||
else:
|
||||
exe_path = ''
|
||||
complete_username = ''
|
||||
tkn_h = ctypes.c_long()
|
||||
tkn_len = ctypes.c_uint32()
|
||||
if ctypes.windll.advapi32.OpenProcessToken(proc_h, TOKEN_QUERY, ctypes.byref(tkn_h)):
|
||||
ctypes.windll.advapi32.GetTokenInformation(tkn_h, TokenUser, None, 0, ctypes.byref(tkn_len))
|
||||
buf = (ctypes.c_ubyte * tkn_len.value)()
|
||||
if ctypes.windll.advapi32.GetTokenInformation(tkn_h, TokenUser, ctypes.byref(buf), ctypes.sizeof(buf), ctypes.byref(tkn_len)):
|
||||
user_tkn = SID_AND_ATTRIBUTES()
|
||||
ctypes.memmove(ctypes.byref(user_tkn), buf, ctypes.sizeof(user_tkn))
|
||||
username = (ctypes.c_char * 512)()
|
||||
domain = (ctypes.c_char * 512)()
|
||||
u_len = ctypes.c_uint32()
|
||||
u_len.value = ctypes.sizeof(username)
|
||||
d_len = ctypes.c_uint32()
|
||||
d_len.value = ctypes.sizeof(domain)
|
||||
use = ctypes.c_ulong()
|
||||
use.value = 0
|
||||
ctypes.windll.advapi32.LookupAccountSidA(None, user_tkn.Sid, username, ctypes.byref(u_len), domain, ctypes.byref(d_len), ctypes.byref(use))
|
||||
complete_username = str(ctypes.string_at(domain)) + '\\' + str(ctypes.string_at(username))
|
||||
k32.CloseHandle(tkn_h)
|
||||
process_username = ''
|
||||
process_token_user = get_token_user(proc_h)
|
||||
if process_token_user:
|
||||
process_username = get_username_from_token(process_token_user) or ''
|
||||
parch = windll_GetNativeSystemInfo()
|
||||
is_wow64 = ctypes.c_ubyte()
|
||||
is_wow64.value = 0
|
||||
@@ -851,7 +890,7 @@ def stdapi_sys_process_get_processes_via_windll(request, response):
|
||||
pgroup = bytes()
|
||||
pgroup += tlv_pack(TLV_TYPE_PID, pe32.th32ProcessID)
|
||||
pgroup += tlv_pack(TLV_TYPE_PARENT_PID, pe32.th32ParentProcessID)
|
||||
pgroup += tlv_pack(TLV_TYPE_USER_NAME, complete_username)
|
||||
pgroup += tlv_pack(TLV_TYPE_USER_NAME, process_username)
|
||||
pgroup += tlv_pack(TLV_TYPE_PROCESS_NAME, pe32.szExeFile)
|
||||
pgroup += tlv_pack(TLV_TYPE_PROCESS_PATH, exe_path)
|
||||
pgroup += tlv_pack(TLV_TYPE_PROCESS_ARCH, parch)
|
||||
|
||||
+104
-50
@@ -1,5 +1,7 @@
|
||||
000000000000-directory~.xml
|
||||
000000000000.cfg
|
||||
000000000000-directory~.xml
|
||||
000000000000-directory.xml
|
||||
000000000000-phone.cfg
|
||||
256T.CM
|
||||
323tosip1_1.bin
|
||||
4601_02_readme_R2_3.txt
|
||||
@@ -18,26 +20,6 @@
|
||||
46xxupgrade.scr
|
||||
6100-113.bin
|
||||
7200-118.bin
|
||||
CFE.bin
|
||||
CP7912010301SIP050608A.sbin
|
||||
OS79XX.TXT
|
||||
P003-07-5-00.bin
|
||||
P003-07-5-00.sbn
|
||||
P0S3-07-5-00.bin
|
||||
P0S3-07-5-00.loads
|
||||
P0S3-07-5-00.sb2
|
||||
RINGLIST.DAT
|
||||
SEP000F34118045.cnf
|
||||
SEP001562EA69E8.cnf
|
||||
SEPDefault.cnf
|
||||
SIP000F34118045.cnf
|
||||
SIPDefault.cnf
|
||||
SIPinsertMAChere.cnf
|
||||
SoundPointIPLocalization
|
||||
SoundPointIPWelcome.wav
|
||||
TECfg.bin
|
||||
TEImage.bin
|
||||
XMLDefault.cnf.xml
|
||||
a01d01b2_3.bin
|
||||
a02d01b2_3.bin
|
||||
a10d01b2_3.bin
|
||||
@@ -46,98 +28,144 @@ a20d01b2_3.bin
|
||||
a25d01a2_5.bin
|
||||
aastra.cfg
|
||||
active/system.ini
|
||||
admin-config
|
||||
admin.bin
|
||||
admin.cfg
|
||||
administrator-config
|
||||
admin-confg
|
||||
admin-config
|
||||
administrator.bin
|
||||
administrator.cfg
|
||||
administrator-config
|
||||
applications.cfg
|
||||
b01d01b2_3.bin
|
||||
b02d01b2_3.bin
|
||||
b10d01b2_3.bin
|
||||
b20d01a2_3.bin
|
||||
b20d01b2_3.bin
|
||||
b25d01a2_5.bin
|
||||
backup-config
|
||||
backup.bin
|
||||
backup.cfg
|
||||
backup-config
|
||||
backup.img
|
||||
bbla0_83.bin
|
||||
boot-config
|
||||
boot.bin
|
||||
boot.cfg
|
||||
boot.txt
|
||||
boot-config
|
||||
bootrom.ld
|
||||
boot.txt
|
||||
bridge-confg
|
||||
CFE.bin
|
||||
cfg.bin
|
||||
cisco_util
|
||||
cisco-confg
|
||||
cisconet.bin
|
||||
cisconet.cfg
|
||||
ciscortr.bin
|
||||
ciscortr.cfg
|
||||
code-config
|
||||
cisco_util
|
||||
code.bin
|
||||
code.cfg
|
||||
code-config
|
||||
code.img
|
||||
config.bin
|
||||
config.dump
|
||||
config.ini
|
||||
config.txt
|
||||
CP7912010301SIP050608A.sbin
|
||||
cvt01_2_3.bin
|
||||
cvt02_2_3.bin
|
||||
cvt02sw_2_3.bin
|
||||
debian.cfg
|
||||
def06r1_8_3.bin
|
||||
def24r1_8_3.bin
|
||||
default-config
|
||||
default.bin
|
||||
default.cfg
|
||||
default-config
|
||||
default.ini
|
||||
device-config
|
||||
device.bin
|
||||
device.cfg
|
||||
device-config
|
||||
dialplan.xml
|
||||
dump.dmc
|
||||
firmware-config
|
||||
features.cfg
|
||||
firewall-nat.cfg
|
||||
firmware.bin
|
||||
firmware.cfg
|
||||
firmware-config
|
||||
firmware.img
|
||||
gateway-confg
|
||||
gkdefault.cfg
|
||||
gw-confg
|
||||
H323.cfg
|
||||
ifIndex-table
|
||||
image-config
|
||||
image.bin
|
||||
image.cfg
|
||||
image-config
|
||||
image.eim
|
||||
image.out
|
||||
infrared.txt
|
||||
local-config
|
||||
local.bin
|
||||
local.cfg
|
||||
main-config
|
||||
local-config
|
||||
lync.cfg
|
||||
main.bin
|
||||
main.cfg
|
||||
main-config
|
||||
main.img
|
||||
merlin2.pcm
|
||||
myrouter-confg
|
||||
n831r0.bin
|
||||
n84r1.bin
|
||||
nir4113.bin
|
||||
nir539R4.bin
|
||||
OS79XX.TXT
|
||||
P003-07-5-00.bin
|
||||
P003-07-5-00.sbn
|
||||
P003-08-11-00.bin
|
||||
P003-08-11-00.sbn
|
||||
P003-08-2-00.bin
|
||||
P003-08-2-00.sbn
|
||||
P003-08-3-00.bin
|
||||
P003-08-3-00.sbn
|
||||
P003-08-6-00.bin
|
||||
P003-08-6-00.sbn
|
||||
P003-08-9-00.bin
|
||||
P003-08-9-00.sbn
|
||||
P003-8-12-00.bin
|
||||
P003-8-12-00.sbn
|
||||
P0S3-07-5-00.bin
|
||||
P0S3-07-5-00.loads
|
||||
P0S3-07-5-00.sb2
|
||||
P0S3-08-11-00.loads
|
||||
P0S3-08-11-00.sb2
|
||||
P0S3-08-2-00.loads
|
||||
P0S3-08-2-00.sb2
|
||||
P0S3-08-3-00.loads
|
||||
P0S3-08-3-00.sb2
|
||||
P0S3-08-6-00.loads
|
||||
P0S3-08-6-00.sb2
|
||||
P0S3-08-9-00.loads
|
||||
P0S3-08-9-00.sb2
|
||||
P0S3-8-12-00.loads
|
||||
P0S3-8-12-00.sb2
|
||||
passwd.bin
|
||||
passwd.cfg
|
||||
passwd.ini
|
||||
password.bin
|
||||
password.cfg
|
||||
password.ini
|
||||
persistent-data
|
||||
persistent.bin
|
||||
persistent.cfg
|
||||
persistent-data
|
||||
phbook00e011010455.txt
|
||||
phone1.cfg
|
||||
polycomConfig.xsd
|
||||
polycom.xml
|
||||
prestige
|
||||
prestige.bin
|
||||
prestige.cfg
|
||||
private-config
|
||||
private.bin
|
||||
private.cfg
|
||||
private-config
|
||||
pstn.cfg
|
||||
public.bin
|
||||
public.cfg
|
||||
pwd.bin
|
||||
@@ -148,47 +176,73 @@ pxelinux.cfg/default
|
||||
ram
|
||||
ram-0
|
||||
ras
|
||||
ras-0
|
||||
ras-1
|
||||
ras0
|
||||
ras-0
|
||||
ras1
|
||||
ras-1
|
||||
reg-advanced.cfg
|
||||
reg-basic.cfg
|
||||
region.cfg
|
||||
release.xml
|
||||
remote-config
|
||||
remote.bin
|
||||
remote.cfg
|
||||
remote-config
|
||||
RINGLIST.DAT
|
||||
rom
|
||||
rom-0
|
||||
rom-1
|
||||
rom0
|
||||
rom-0
|
||||
rom1
|
||||
router-confg
|
||||
rom-1
|
||||
router.bin
|
||||
router.cfg
|
||||
router-confg
|
||||
s10d01b2_2.bin
|
||||
s20d01b2_2.bin
|
||||
secret-config
|
||||
secret.bin
|
||||
secret.cfg
|
||||
sip.cfg
|
||||
sip.ld
|
||||
sip.ver
|
||||
sip_4602D01A.txt
|
||||
sip_4602D02A.txt
|
||||
secret-config
|
||||
SEP000F34118045.cnf
|
||||
SEP001562EA69E8.cnf
|
||||
SEPDefault.cnf
|
||||
SIP000F34118045.cnf
|
||||
sip_327.cfg
|
||||
sip_4602ap1_1.ebin
|
||||
sip_4602bt1_1.ebin
|
||||
sip_4602D01A.txt
|
||||
sip_4602D02A.txt
|
||||
sip-basic.cfg
|
||||
sip.cfg
|
||||
sip-confg
|
||||
SIPDefault.cnf
|
||||
SIPinsertMAChere.cnf
|
||||
sip-interop.cfg
|
||||
sip.ld
|
||||
sipto323_1_1.ebin
|
||||
startup-config
|
||||
sip.ver
|
||||
site.cfg
|
||||
SoundPointIPLocalization
|
||||
SoundPointIPWelcome.wav
|
||||
startup.bin
|
||||
startup.cfg
|
||||
startup-config
|
||||
syncinfo.xml
|
||||
system-config
|
||||
system.bin
|
||||
system.cfg
|
||||
system-config
|
||||
system.img
|
||||
system.ini
|
||||
TECfg.bin
|
||||
TEImage.bin
|
||||
test
|
||||
test.txt
|
||||
text.txt
|
||||
uip200_463enc.pac
|
||||
uniden00e011030397.txt
|
||||
unidencom.txt
|
||||
v2210c.bin
|
||||
version.info
|
||||
video.cfg
|
||||
video-integration.cfg
|
||||
vip-confg
|
||||
voip-confg
|
||||
XMLDefault.cnf.xml
|
||||
|
||||
+2
-1
@@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20140905031549) do
|
||||
ActiveRecord::Schema.define(:version => 20140922170030) do
|
||||
|
||||
create_table "api_keys", :force => true do |t|
|
||||
t.text "token"
|
||||
@@ -272,6 +272,7 @@ ActiveRecord::Schema.define(:version => 20140905031549) do
|
||||
t.string "username", :null => false
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.string "type", :null => false
|
||||
end
|
||||
|
||||
add_index "metasploit_credential_publics", ["username"], :name => "index_metasploit_credential_publics_on_username", :unique => true
|
||||
|
||||
@@ -32,6 +32,10 @@ module Metasploit
|
||||
# works in compatible manner with activerecord's rake tasks and other
|
||||
# railties.
|
||||
module Framework
|
||||
extend ActiveSupport::Autoload
|
||||
|
||||
autoload :Spec
|
||||
|
||||
# Returns the root of the metasploit-framework project. Use in place of
|
||||
# `Rails.root`.
|
||||
#
|
||||
|
||||
@@ -41,7 +41,7 @@ module Metasploit
|
||||
|
||||
begin
|
||||
success = connect_login(credential.public, credential.private)
|
||||
rescue ::EOFError, Errno::ECONNRESET, Rex::AddressInUse, Rex::ConnectionError, Rex::ConnectionTimeout, ::Timeout::Error
|
||||
rescue ::EOFError, Errno::ECONNRESET, Rex::ConnectionError, Rex::ConnectionTimeout, ::Timeout::Error
|
||||
result_options[:status] = Metasploit::Model::Login::Status::UNABLE_TO_CONNECT
|
||||
success = false
|
||||
end
|
||||
|
||||
@@ -92,7 +92,7 @@ module Metasploit
|
||||
end
|
||||
|
||||
end
|
||||
rescue ::EOFError, Errno::ECONNRESET, Rex::AddressInUse, Rex::ConnectionError, Rex::ConnectionTimeout, ::Timeout::Error
|
||||
rescue ::EOFError, Errno::ECONNRESET, Rex::ConnectionError, Rex::ConnectionTimeout, ::Timeout::Error
|
||||
result_options[:status] = Metasploit::Model::Login::Status::UNABLE_TO_CONNECT
|
||||
end
|
||||
|
||||
|
||||
@@ -80,13 +80,18 @@ module Metasploit
|
||||
# @return [void]
|
||||
def self.optionally_require_metasploit_db_gem_engines
|
||||
optionally(
|
||||
'metasploit/credential/engine',
|
||||
'metasploit-credential not in the bundle',
|
||||
)
|
||||
'metasploit/credential',
|
||||
'metasploit-credential not in the bundle',
|
||||
) do
|
||||
require 'metasploit/credential/engine'
|
||||
end
|
||||
|
||||
optionally(
|
||||
'metasploit_data_models/engine',
|
||||
'metaspoit_data_models not in the bundle'
|
||||
)
|
||||
'metasploit_data_models',
|
||||
'metasploit_data_models not in the bundle'
|
||||
) do
|
||||
require 'metasploit_data_models/engine'
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
module Metasploit::Framework::Spec
|
||||
extend ActiveSupport::Autoload
|
||||
|
||||
autoload :Constants
|
||||
end
|
||||
@@ -0,0 +1,99 @@
|
||||
require 'msf/core/modules'
|
||||
|
||||
# Monitor constants created by module loading to ensure that the loads in one example don't interfere with the
|
||||
# assertions in another example.
|
||||
module Metasploit::Framework::Spec::Constants
|
||||
extend ActiveSupport::Autoload
|
||||
|
||||
autoload :Each
|
||||
autoload :Suite
|
||||
|
||||
#
|
||||
# CONSTANTS
|
||||
#
|
||||
|
||||
# Regex parsing loaded module constants
|
||||
LOADED_MODULE_CHILD_CONSTANT_REGEXP = /^Mod(?<unpacked_full_name>[0-9a-f]+)$/
|
||||
# The parent namespace child_constant_name that can have children added when loading modules.
|
||||
PARENT_CONSTANT = Msf::Modules
|
||||
# Constant names under {PARENT_CONSTANT} that can persist between specs because they are part of the loader library
|
||||
# and not dynamically loaded code
|
||||
PERSISTENT_CHILD_CONSTANT_NAMES = %w{
|
||||
Error
|
||||
Loader
|
||||
MetasploitClassCompatibilityError
|
||||
Namespace
|
||||
VersionCompatibilityError
|
||||
}.map(&:to_sym)
|
||||
|
||||
# Cleans child constants from {PARENT_CONSTANT}.
|
||||
#
|
||||
# @return [true] if there were leaked constants that were cleaned.
|
||||
# @return [false] if there were no leaked constants.
|
||||
# @see each
|
||||
def self.clean
|
||||
count = each do |child_name|
|
||||
PARENT_CONSTANT.send(:remove_const, child_name)
|
||||
end
|
||||
|
||||
count != 0
|
||||
end
|
||||
|
||||
# Adds actions to `spec` task so that `rake spec` fails if any of the following:
|
||||
#
|
||||
# # `log/leaked-constants.log` exists after printing out the leaked constants.
|
||||
# # {Each.configured!} is unnecessary in `spec/spec_helper.rb` and should be removed.
|
||||
#
|
||||
# @return [void]
|
||||
def self.define_task
|
||||
Suite.define_task
|
||||
# After Suite as Suite will kill for leaks before Each say it cleaned no leaks in case there are leaks in an
|
||||
# `after(:all)` that {Each} won't catch in its `after(:each)` checks.
|
||||
Each.define_task
|
||||
end
|
||||
|
||||
# Yields each child_constant_name under {PARENT_CONSTANT}.
|
||||
#
|
||||
# @yield [child_name]
|
||||
# @yieldparam child_name [Symbol] name of child_constant_name relative to {PARENT_CONSTANT}.
|
||||
# @yieldreturn [void]
|
||||
# @return [Integer] count
|
||||
def self.each
|
||||
inherit = false
|
||||
count = 0
|
||||
|
||||
child_constant_names = PARENT_CONSTANT.constants(inherit)
|
||||
|
||||
child_constant_names.each do |child_constant_name|
|
||||
unless PERSISTENT_CHILD_CONSTANT_NAMES.include? child_constant_name
|
||||
count += 1
|
||||
yield child_constant_name
|
||||
end
|
||||
end
|
||||
|
||||
count
|
||||
end
|
||||
|
||||
# The module full name for `child_constant_name`
|
||||
#
|
||||
# @param child_constant_name [String] the name of a child constant_name under {PARENT_CONSTANT}.
|
||||
# @return [String] full module name used to load `child_constant_name`.
|
||||
# @return [nil] if `child_constant_name` does not correspond to a loaded module.
|
||||
def self.full_name(child_constant_name)
|
||||
full_name = nil
|
||||
|
||||
match = LOADED_MODULE_CHILD_CONSTANT_REGEXP.match(child_constant_name)
|
||||
|
||||
if match
|
||||
potential_full_name = [match[:unpacked_full_name]].pack('H*')
|
||||
|
||||
module_type, _reference_name = potential_full_name.split('/', 2)
|
||||
|
||||
if Msf::MODULE_TYPES.include? module_type
|
||||
full_name = potential_full_name
|
||||
end
|
||||
end
|
||||
|
||||
full_name
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,119 @@
|
||||
# @note This should only temporarily be used in `spec/spec_helper.rb` when
|
||||
# `Metasploit::Framework::Spec::Constants::Suite.configure!` detects a leak. Permanently having
|
||||
# `Metasploit::Framework::Spec::Constants::Each.configure!` can lead to false positives when modules are purposely
|
||||
# loaded in a `before(:all)` and cleaned up in a `after(:all)`.
|
||||
#
|
||||
# Fails example if it leaks module loading constants.
|
||||
module Metasploit::Framework::Spec::Constants::Each
|
||||
#
|
||||
# CONSTANTS
|
||||
#
|
||||
|
||||
LOG_PATHNAME = Pathname.new('log/metasploit/framework/spec/constants/each.log')
|
||||
|
||||
#
|
||||
# Module Methods
|
||||
#
|
||||
|
||||
class << self
|
||||
attr_accessor :leaks_cleaned
|
||||
end
|
||||
|
||||
# Is {Metasploit::Framework::Spec::Constants::Each.configure!} still necessary or should it be removed?
|
||||
#
|
||||
# @return [true] if {configure!}'s `before(:each)` cleaned up leaked constants
|
||||
# @return [false] otherwise
|
||||
def self.leaks_cleaned?
|
||||
!!@leaks_cleaned
|
||||
end
|
||||
|
||||
# Configures after(:each) callback for RSpe to fail example if leaked constants.
|
||||
#
|
||||
# @return [void]
|
||||
def self.configure!
|
||||
unless @configured
|
||||
RSpec.configure do |config|
|
||||
config.before(:each) do |example|
|
||||
leaks_cleaned = Metasploit::Framework::Spec::Constants.clean
|
||||
|
||||
if leaks_cleaned
|
||||
$stderr.puts "Cleaned leaked constants before #{example.metadata.full_description}"
|
||||
end
|
||||
|
||||
# clean so that leaks from earlier example aren't attributed to this example
|
||||
Metasploit::Framework::Spec::Constants::Each.leaks_cleaned ||= leaks_cleaned
|
||||
end
|
||||
|
||||
config.after(:each) do |example|
|
||||
child_names = Metasploit::Framework::Spec::Constants.to_enum(:each).to_a
|
||||
|
||||
if child_names.length > 0
|
||||
lines = ['Leaked constants:']
|
||||
|
||||
child_names.sort.each do |child_name|
|
||||
lines << " #{child_name}"
|
||||
end
|
||||
|
||||
lines << ''
|
||||
lines << "Add `include_context 'Metasploit::Framework::Spec::Constants cleaner'` to clean up constants from #{example.metadata.full_description}"
|
||||
|
||||
message = lines.join("\n")
|
||||
|
||||
# use caller metadata so that Jump to Source in the Rubymine RSpec running jumps to the example instead of
|
||||
# here
|
||||
fail RuntimeError, message, example.metadata[:caller]
|
||||
end
|
||||
end
|
||||
|
||||
config.after(:suite) do
|
||||
if Metasploit::Framework::Spec::Constants::Each.leaks_cleaned?
|
||||
if LOG_PATHNAME.exist?
|
||||
LOG_PATHNAME.delete
|
||||
end
|
||||
else
|
||||
LOG_PATHNAME.open('w') { |f|
|
||||
f.puts "No leaks were cleaned by `Metasploit::Framework::Spec::Constants::Each.configured!`. Remove " \
|
||||
"it from `spec/spec_helper.rb` so it does not interfere with contexts that persist loaded " \
|
||||
"modules for entire context and clean up modules in `after(:all)`"
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@configured = true
|
||||
end
|
||||
end
|
||||
|
||||
# Whether {configure!} was called
|
||||
#
|
||||
# @return [Boolean]
|
||||
def self.configured?
|
||||
!!@configured
|
||||
end
|
||||
|
||||
# Adds action to `spec` task so that `rake spec` fails if {configured!} is unnecessary in `spec/spec_helper.rb` and
|
||||
# should be removed
|
||||
#
|
||||
# @return [void]
|
||||
def self.define_task
|
||||
Rake::Task.define_task('metasploit:framework:spec:constant:each:clean') do
|
||||
if LOG_PATHNAME.exist?
|
||||
LOG_PATHNAME.delete
|
||||
end
|
||||
end
|
||||
|
||||
Rake::Task.define_task(spec: 'metasploit:framework:spec:constant:each:clean')
|
||||
|
||||
Rake::Task.define_task(:spec) do
|
||||
if LOG_PATHNAME.exist?
|
||||
LOG_PATHNAME.open { |f|
|
||||
f.each_line do |line|
|
||||
$stderr.write line
|
||||
end
|
||||
}
|
||||
|
||||
exit(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,119 @@
|
||||
# Logs if constants created by module loading are left over after suite has completed.
|
||||
module Metasploit::Framework::Spec::Constants::Suite
|
||||
#
|
||||
# CONSTANTS
|
||||
#
|
||||
|
||||
LOGS_PATHNAME = Pathname.new('log/metasploit/framework/spec/constants/suite')
|
||||
|
||||
# Logs leaked constants to {LOG_PATHNAME} and prints `message` to stderr.
|
||||
#
|
||||
# @param hook (see log_pathname)
|
||||
# @param message [String] additional message printed to stderr when there is at least one leaked constant.
|
||||
# @return [void]
|
||||
def self.log_leaked_constants(hook, message)
|
||||
count = 0
|
||||
hook_log_pathname = log_pathname(hook)
|
||||
hook_log_pathname.parent.mkpath
|
||||
|
||||
hook_log_pathname.open('w') do |f|
|
||||
count = Metasploit::Framework::Spec::Constants.each do |child_name|
|
||||
f.puts child_name
|
||||
end
|
||||
end
|
||||
|
||||
if count > 0
|
||||
$stderr.puts "#{count} #{'constant'.pluralize(count)} leaked under " \
|
||||
"#{Metasploit::Framework::Spec::Constants::PARENT_CONSTANT}. #{message} See #{hook_log_pathname} " \
|
||||
"for details."
|
||||
else
|
||||
hook_log_pathname.delete
|
||||
end
|
||||
end
|
||||
|
||||
# Configures after(:suite) callback for RSpec to check for leaked constants.
|
||||
def self.configure!
|
||||
unless @configured
|
||||
RSpec.configure do |config|
|
||||
config.before(:suite) do
|
||||
Metasploit::Framework::Spec::Constants::Suite.log_leaked_constants(
|
||||
:before,
|
||||
'Modules are being loaded outside callbacks before suite starts.'
|
||||
)
|
||||
end
|
||||
|
||||
config.after(:suite) do
|
||||
Metasploit::Framework::Spec::Constants::Suite.log_leaked_constants(
|
||||
:after,
|
||||
'Modules are being loaded inside callbacks or examples during suite run.'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@configured = true
|
||||
end
|
||||
end
|
||||
|
||||
# Adds action to `spec` task so that `rake spec` fails if `log/leaked-constants.log` exists after printing out the
|
||||
# leaked constants.
|
||||
#
|
||||
# @return [void]
|
||||
def self.define_task
|
||||
Rake::Task.define_task(:spec) do
|
||||
leaked_before = Metasploit::Framework::Spec::Constants::Suite.print_leaked_constants(:before)
|
||||
leaked_after = Metasploit::Framework::Spec::Constants::Suite.print_leaked_constants(:after)
|
||||
|
||||
# leaks after suite can be be cleaned up by {Metasploit::Framework::Spec::Constants::Each.configure!}, but
|
||||
# leaks before suite require user intervention to find the leaks since it's a programming error in how the specs
|
||||
# are written where Modules are being loaded in the context scope.
|
||||
if leaked_after
|
||||
$stderr.puts
|
||||
$stderr.puts "Add `Metasploit::Framework::Spec::Constants::Each.configure!` to `spec/spec_helper.rb` " \
|
||||
"**NOTE: `Metasploit::Framework::Spec::Constants::Each` may report false leaks if `after(:all)` " \
|
||||
"is used to clean up constants instead of `after(:each)`**"
|
||||
end
|
||||
|
||||
if leaked_before || leaked_after
|
||||
exit 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# @param hook [:after, :before] Whether the log is recording leaked constants `:before` the suite runs or `:after` the
|
||||
# suite runs.
|
||||
def self.log_pathname(hook)
|
||||
LOGS_PATHNAME.join("#{hook}.log")
|
||||
end
|
||||
|
||||
# Prints logged leaked constants to stderr.
|
||||
#
|
||||
# @param hook [:after, :before] Whether the log is recording leaked constants `:before` the suite runs or `:after` the
|
||||
# suite runs.
|
||||
# @return [true] if leaks printed
|
||||
# @return [false] otherwise
|
||||
def self.print_leaked_constants(hook)
|
||||
hook_log_pathname = log_pathname(hook)
|
||||
|
||||
leaks = false
|
||||
|
||||
if hook_log_pathname.exist?
|
||||
leaks = true
|
||||
$stderr.puts "Leaked constants detected under #{Metasploit::Framework::Spec::Constants::PARENT_CONSTANT} #{hook} suite:"
|
||||
|
||||
hook_log_pathname.open do |f|
|
||||
f.each_line do |line|
|
||||
constant_name = line.strip
|
||||
full_name = Metasploit::Framework::Spec::Constants.full_name(constant_name)
|
||||
|
||||
if full_name
|
||||
formatted_full_name = " # #{full_name}"
|
||||
end
|
||||
|
||||
$stderr.puts " #{constant_name}#{formatted_full_name}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
leaks
|
||||
end
|
||||
end
|
||||
@@ -20,17 +20,17 @@ class ReadableText
|
||||
# @return [String] formatted text output of the dump.
|
||||
def self.dump_module(mod, indent = " ")
|
||||
case mod.type
|
||||
when MODULE_PAYLOAD
|
||||
when Msf::MODULE_PAYLOAD
|
||||
return dump_payload_module(mod, indent)
|
||||
when MODULE_NOP
|
||||
when Msf::MODULE_NOP
|
||||
return dump_basic_module(mod, indent)
|
||||
when MODULE_ENCODER
|
||||
when Msf::MODULE_ENCODER
|
||||
return dump_basic_module(mod, indent)
|
||||
when MODULE_EXPLOIT
|
||||
when Msf::MODULE_EXPLOIT
|
||||
return dump_exploit_module(mod, indent)
|
||||
when MODULE_AUX
|
||||
when Msf::MODULE_AUX
|
||||
return dump_auxiliary_module(mod, indent)
|
||||
when MODULE_POST
|
||||
when Msf::MODULE_POST
|
||||
return dump_post_module(mod, indent)
|
||||
else
|
||||
return dump_generic_module(mod, indent)
|
||||
|
||||
@@ -54,12 +54,12 @@ module Framework
|
||||
|
||||
ModuleSimplifiers =
|
||||
{
|
||||
MODULE_ENCODER => Msf::Simple::Encoder,
|
||||
MODULE_EXPLOIT => Msf::Simple::Exploit,
|
||||
MODULE_NOP => Msf::Simple::Nop,
|
||||
MODULE_PAYLOAD => Msf::Simple::Payload,
|
||||
MODULE_AUX => Msf::Simple::Auxiliary,
|
||||
MODULE_POST => Msf::Simple::Post,
|
||||
Msf::MODULE_ENCODER => Msf::Simple::Encoder,
|
||||
Msf::MODULE_EXPLOIT => Msf::Simple::Exploit,
|
||||
Msf::MODULE_NOP => Msf::Simple::Nop,
|
||||
Msf::MODULE_PAYLOAD => Msf::Simple::Payload,
|
||||
Msf::MODULE_AUX => Msf::Simple::Auxiliary,
|
||||
Msf::MODULE_POST => Msf::Simple::Post,
|
||||
}
|
||||
|
||||
#
|
||||
|
||||
@@ -18,6 +18,16 @@ require 'rex'
|
||||
require 'rex/ui'
|
||||
|
||||
module Msf
|
||||
autoload :Author, 'msf/core/author'
|
||||
autoload :Platform, 'msf/core/platform'
|
||||
autoload :Reference, 'msf/core/reference'
|
||||
autoload :SiteReference, 'msf/core/site_reference'
|
||||
autoload :Target, 'msf/core/target'
|
||||
|
||||
#
|
||||
# Constants
|
||||
#
|
||||
|
||||
LogSource = "core"
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
# -*- coding: binary -*-
|
||||
require 'msf/core'
|
||||
|
||||
###
|
||||
#
|
||||
# This data type represents an author of a piece of code in either
|
||||
# the framework, a module, a script, or something entirely unrelated.
|
||||
#
|
||||
###
|
||||
class Msf::Author
|
||||
|
||||
# A hash of known author names
|
||||
Known =
|
||||
{
|
||||
'amaloteaux' => 'alex_maloteaux' + 0x40.chr + 'metasploit.com',
|
||||
'anonymous' => 'Unknown',
|
||||
'bannedit' => 'bannedit' + 0x40.chr + 'metasploit.com',
|
||||
'Carlos Perez' => 'carlos_perez' + 0x40.chr + 'darkoperator.com',
|
||||
'cazz' => 'bmc' + 0x40.chr + 'shmoo.com',
|
||||
'CG' => 'cg' + 0x40.chr + 'carnal0wnage.com',
|
||||
'ddz' => 'ddz' + 0x40.chr + 'theta44.org',
|
||||
'egypt' => 'egypt' + 0x40.chr + 'metasploit.com',
|
||||
'et' => 'et' + 0x40.chr + 'metasploit.com',
|
||||
'Christian Mehlmauer' => 'FireFart' + 0x40.chr + 'gmail.com',
|
||||
'hdm' => 'hdm' + 0x40.chr + 'metasploit.com',
|
||||
'I)ruid' => 'druid' + 0x40.chr + 'caughq.org',
|
||||
'jcran' => 'jcran' + 0x40.chr + 'metasploit.com',
|
||||
'jduck' => 'jduck' + 0x40.chr + 'metasploit.com',
|
||||
'joev' => 'joev' + 0x40.chr + 'metasploit.com',
|
||||
'juan vazquez' => 'juan.vazquez' + 0x40.chr + 'metasploit.com',
|
||||
'kf' => 'kf_list' + 0x40.chr + 'digitalmunition.com',
|
||||
'kris katterjohn' => 'katterjohn' + 0x40.chr + 'gmail.com',
|
||||
'MC' => 'mc' + 0x40.chr + 'metasploit.com',
|
||||
'Ben Campbell' => 'eat_meatballs' + 0x40.chr + 'hotmail.co.uk',
|
||||
'msmith' => 'msmith' + 0x40.chr + 'metasploit.com',
|
||||
'mubix' => 'mubix' + 0x40.chr + 'hak5.org',
|
||||
'natron' => 'natron' + 0x40.chr + 'metasploit.com',
|
||||
'optyx' => 'optyx' + 0x40.chr + 'no$email.com',
|
||||
'patrick' => 'patrick' + 0x40.chr + 'osisecurity.com.au',
|
||||
'pusscat' => 'pusscat' + 0x40.chr + 'metasploit.com',
|
||||
'Ramon de C Valle' => 'rcvalle' + 0x40.chr + 'metasploit.com',
|
||||
'sf' => 'stephen_fewer' + 0x40.chr + 'harmonysecurity.com',
|
||||
'sinn3r' => 'sinn3r' + 0x40.chr + 'metasploit.com',
|
||||
'skape' => 'mmiller' + 0x40.chr + 'hick.org',
|
||||
'skylined' => 'skylined' + 0x40.chr + 'edup.tudelft.nl',
|
||||
'spoonm' => 'spoonm' + 0x40.chr + 'no$email.com',
|
||||
'stinko' => 'vinnie' + 0x40.chr + 'metasploit.com',
|
||||
'theLightCosine' => 'theLightCosine' + 0x40.chr + 'metasploit.com',
|
||||
'todb' => 'todb' + 0x40.chr + 'metasploit.com',
|
||||
'vlad902' => 'vlad902' + 0x40.chr + 'gmail.com',
|
||||
'wvu' => 'wvu' + 0x40.chr + 'metasploit.com'
|
||||
}
|
||||
|
||||
#
|
||||
# Class method that translates a string to an instance of the Author class,
|
||||
# if it's of the right format, and returns the Author class instance
|
||||
#
|
||||
def self.from_s(str)
|
||||
instance = self.new
|
||||
|
||||
# If the serialization fails...
|
||||
if (instance.from_s(str) == false)
|
||||
return nil
|
||||
end
|
||||
|
||||
return instance
|
||||
end
|
||||
|
||||
#
|
||||
# Transforms the supplied source into an array of authors
|
||||
#
|
||||
def self.transform(src)
|
||||
Rex::Transformer.transform(src, Array, [ self ], 'Author')
|
||||
end
|
||||
|
||||
def initialize(name = nil, email = nil)
|
||||
self.name = name
|
||||
self.email = email || Known[name]
|
||||
end
|
||||
|
||||
#
|
||||
# Compares authors
|
||||
#
|
||||
def ==(tgt)
|
||||
return (tgt.to_s == to_s)
|
||||
end
|
||||
|
||||
#
|
||||
# Serialize the author object to a string in form:
|
||||
#
|
||||
# name <email>
|
||||
#
|
||||
def to_s
|
||||
str = "#{name}"
|
||||
|
||||
if (email and not email.empty?)
|
||||
str += " <#{email}>"
|
||||
end
|
||||
|
||||
return str
|
||||
end
|
||||
|
||||
#
|
||||
# Translate the author from the supplied string which may
|
||||
# have either just a name or also an email address
|
||||
#
|
||||
def from_s(str)
|
||||
|
||||
|
||||
# Supported formats:
|
||||
# known_name
|
||||
# user [at/@] host [dot/.] tld
|
||||
# Name <user [at/@] host [dot/.] tld>
|
||||
|
||||
|
||||
if ((m = str.match(/^\s*([^<]+)<([^>]+)>\s*$/)))
|
||||
self.name = m[1].sub(/<.*/, '')
|
||||
self.email = m[2].sub(/\s*\[at\]\s*/, '@').sub(/\s*\[dot\]\s*/, '.')
|
||||
else
|
||||
if (Known[str])
|
||||
self.email = Known[str]
|
||||
self.name = str
|
||||
else
|
||||
self.email = str.sub(/\s*\[at\]\s*/, '@').sub(/\s*\[dot\]\s*/, '.').gsub(/^<|>$/, '')
|
||||
m = self.email.match(/([^@]+)@/)
|
||||
self.name = m ? m[1] : nil
|
||||
if !(self.email and self.email.index('@'))
|
||||
self.name = self.email
|
||||
self.email = ''
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
self.name.strip! if self.name
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
#
|
||||
# Sets the name of the author and updates the email if it's a known author.
|
||||
#
|
||||
def name=(name)
|
||||
self.email = Known[name] if (Known[name])
|
||||
@name = name
|
||||
end
|
||||
|
||||
attr_accessor :email
|
||||
attr_reader :name
|
||||
end
|
||||
@@ -21,14 +21,14 @@ class Auxiliary < Msf::Module
|
||||
# Returns MODULE_AUX to indicate that this is an auxiliary module.
|
||||
#
|
||||
def self.type
|
||||
MODULE_AUX
|
||||
Msf::MODULE_AUX
|
||||
end
|
||||
|
||||
#
|
||||
# Returns MODULE_AUX to indicate that this is an auxiliary module.
|
||||
#
|
||||
def type
|
||||
MODULE_AUX
|
||||
Msf::MODULE_AUX
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
@@ -35,7 +35,7 @@ module Auxiliary::RServices
|
||||
begin
|
||||
sd = connect(true, { 'CPORT' => cport })
|
||||
|
||||
rescue Rex::AddressInUse
|
||||
rescue Rex::BindFailed
|
||||
# Ignore and try again
|
||||
#vprint_error("Unable to connect: #{$!}")
|
||||
|
||||
|
||||
@@ -57,11 +57,18 @@ def run
|
||||
|
||||
threads_max = datastore['THREADS'].to_i
|
||||
@tl = []
|
||||
@scan_errors = []
|
||||
|
||||
#
|
||||
# Sanity check threading on different platforms
|
||||
# Sanity check threading given different conditions
|
||||
#
|
||||
|
||||
if datastore['CPORT'].to_i != 0 && threads_max > 1
|
||||
print_error("Warning: A maximum of one thread is possible when a source port is set (CPORT)")
|
||||
print_error("Thread count has been adjusted to 1")
|
||||
threads_max = 1
|
||||
end
|
||||
|
||||
if(Rex::Compat.is_windows)
|
||||
if(threads_max > 16)
|
||||
print_error("Warning: The Windows platform cannot reliably support more than 16 threads")
|
||||
@@ -81,17 +88,22 @@ def run
|
||||
begin
|
||||
|
||||
if (self.respond_to?('run_range'))
|
||||
# No automated progress reporting for run_range
|
||||
# No automated progress reporting or error handling for run_range
|
||||
return run_range(datastore['RHOSTS'])
|
||||
end
|
||||
|
||||
if (self.respond_to?('run_host'))
|
||||
|
||||
@tl = []
|
||||
|
||||
loop do
|
||||
# Stop scanning if we hit a fatal error
|
||||
break if has_fatal_errors?
|
||||
|
||||
# Spawn threads for each host
|
||||
while (@tl.length < threads_max)
|
||||
|
||||
# Stop scanning if we hit a fatal error
|
||||
break if has_fatal_errors?
|
||||
|
||||
ip = ar.next_ip
|
||||
break if not ip
|
||||
|
||||
@@ -102,6 +114,10 @@ def run
|
||||
|
||||
begin
|
||||
nmod.run_host(targ)
|
||||
rescue ::Rex::BindFailed
|
||||
if datastore['CHOST']
|
||||
@scan_errors << "The source IP (CHOST) value of #{datastore['CHOST']} was not usable"
|
||||
end
|
||||
rescue ::Rex::ConnectionError, ::Rex::ConnectionProxyError, ::Errno::ECONNRESET, ::Errno::EINTR, ::Rex::TimeoutError, ::Timeout::Error, ::EOFError
|
||||
rescue ::Interrupt,::NoMethodError, ::RuntimeError, ::ArgumentError, ::NameError
|
||||
raise $!
|
||||
@@ -114,6 +130,9 @@ def run
|
||||
end
|
||||
end
|
||||
|
||||
# Stop scanning if we hit a fatal error
|
||||
break if has_fatal_errors?
|
||||
|
||||
# Exit once we run out of hosts
|
||||
if(@tl.length == 0)
|
||||
break
|
||||
@@ -133,6 +152,7 @@ def run
|
||||
scanner_show_progress() if @show_progress
|
||||
end
|
||||
|
||||
scanner_handle_fatal_errors
|
||||
return
|
||||
end
|
||||
|
||||
@@ -147,10 +167,12 @@ def run
|
||||
|
||||
ar = Rex::Socket::RangeWalker.new(datastore['RHOSTS'])
|
||||
|
||||
@tl = []
|
||||
|
||||
while(true)
|
||||
nohosts = false
|
||||
|
||||
# Stop scanning if we hit a fatal error
|
||||
break if has_fatal_errors?
|
||||
|
||||
while (@tl.length < threads_max)
|
||||
|
||||
batch = []
|
||||
@@ -172,6 +194,10 @@ def run
|
||||
mybatch = bat.dup
|
||||
begin
|
||||
nmod.run_batch(mybatch)
|
||||
rescue ::Rex::BindFailed
|
||||
if datastore['CHOST']
|
||||
@scan_errors << "The source IP (CHOST) value of #{datastore['CHOST']} was not usable"
|
||||
end
|
||||
rescue ::Rex::ConnectionError, ::Rex::ConnectionProxyError, ::Errno::ECONNRESET, ::Errno::EINTR, ::Rex::TimeoutError, ::Timeout::Error
|
||||
rescue ::Interrupt,::NoMethodError, ::RuntimeError, ::ArgumentError, ::NameError
|
||||
raise $!
|
||||
@@ -191,6 +217,9 @@ def run
|
||||
end
|
||||
end
|
||||
|
||||
# Stop scanning if we hit a fatal error
|
||||
break if has_fatal_errors?
|
||||
|
||||
# Exit if there are no more pending threads
|
||||
if (@tl.length == 0)
|
||||
break
|
||||
@@ -212,6 +241,7 @@ def run
|
||||
scanner_show_progress() if @show_progress
|
||||
end
|
||||
|
||||
scanner_handle_fatal_errors
|
||||
return
|
||||
end
|
||||
|
||||
@@ -234,17 +264,38 @@ def seppuko!
|
||||
end
|
||||
end
|
||||
|
||||
def has_fatal_errors?
|
||||
@scan_errors && !@scan_errors.empty?
|
||||
end
|
||||
|
||||
def scanner_handle_fatal_errors
|
||||
return unless has_fatal_errors?
|
||||
return unless @tl
|
||||
|
||||
# First kill any running threads
|
||||
@tl.each {|t| t.kill if t.alive? }
|
||||
|
||||
# Show the unique errors triggered by the scan
|
||||
uniq_errors = @scan_errors.uniq
|
||||
uniq_errors.each do |emsg|
|
||||
print_error("Fatal: #{emsg}")
|
||||
end
|
||||
print_error("Scan terminated due to #{uniq_errors.size} fatal error(s)")
|
||||
end
|
||||
|
||||
def scanner_progress
|
||||
return 0 unless @range_done and @range_count
|
||||
pct = (@range_done / @range_count.to_f) * 100
|
||||
end
|
||||
|
||||
def scanner_show_progress
|
||||
# it should already be in the process of shutting down if there are fatal errors
|
||||
return if has_fatal_errors?
|
||||
pct = scanner_progress
|
||||
if(pct >= (@range_percent + @show_percent))
|
||||
if pct >= (@range_percent + @show_percent)
|
||||
@range_percent = @range_percent + @show_percent
|
||||
tdlen = @range_count.to_s.length
|
||||
print_status("Scanned #{"%.#{tdlen}d" % @range_done} of #{@range_count} hosts (#{"%.3d" % pct.to_i}% complete)")
|
||||
print_status(sprintf("Scanned %#{tdlen}d of %d hosts (%d%% complete)", @range_done, @range_count, pct))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -8,33 +8,36 @@ module Msf
|
||||
#
|
||||
###
|
||||
module Auxiliary::UDPScanner
|
||||
|
||||
include Auxiliary::Scanner
|
||||
|
||||
# A hash of results of a given batch run, keyed by host
|
||||
attr_accessor :results
|
||||
|
||||
#
|
||||
# Initializes an instance of an auxiliary module that scans UDP
|
||||
#
|
||||
|
||||
def initialize(info = {})
|
||||
super
|
||||
|
||||
register_options(
|
||||
[
|
||||
Opt::CHOST,
|
||||
Opt::RPORT,
|
||||
OptInt.new('BATCHSIZE', [true, 'The number of hosts to probe in each set', 256]),
|
||||
OptInt.new('THREADS', [true, "The number of concurrent threads", 10])
|
||||
], self.class)
|
||||
|
||||
register_advanced_options(
|
||||
[
|
||||
Opt::CHOST,
|
||||
Opt::CPORT,
|
||||
OptInt.new('ScannerRecvInterval', [true, 'The maximum numbers of sends before entering the processing loop', 30]),
|
||||
OptInt.new('ScannerMaxResends', [true, 'The maximum times to resend a packet when out of buffers', 10]),
|
||||
OptInt.new('ScannerRecvQueueLimit', [true, 'The maximum queue size before breaking out of the processing loop', 100]),
|
||||
OptInt.new('ScannerRecvWindow', [true, 'The number of seconds to wait post-scan to catch leftover replies', 15]),
|
||||
OptInt.new('ScannerRecvWindow', [true, 'The number of seconds to wait post-scan to catch leftover replies', 15])
|
||||
|
||||
], self.class)
|
||||
end
|
||||
|
||||
|
||||
# Define our batch size
|
||||
def run_batch_size
|
||||
datastore['BATCHSIZE'].to_i
|
||||
@@ -44,6 +47,7 @@ module Auxiliary::UDPScanner
|
||||
def run_batch(batch)
|
||||
@udp_sock = Rex::Socket::Udp.create({
|
||||
'LocalHost' => datastore['CHOST'] || nil,
|
||||
'LocalPort' => datastore['CPORT'] || 0,
|
||||
'Context' => { 'Msf' => framework, 'MsfExploit' => self }
|
||||
})
|
||||
add_socket(@udp_sock)
|
||||
@@ -155,12 +159,25 @@ module Auxiliary::UDPScanner
|
||||
queue.length
|
||||
end
|
||||
|
||||
def cport
|
||||
datastore['CPORT']
|
||||
end
|
||||
|
||||
def rport
|
||||
datastore['RPORT']
|
||||
end
|
||||
|
||||
#
|
||||
# The including module override these methods
|
||||
# The including module may override some of these methods
|
||||
#
|
||||
|
||||
# Called for each IP in the batch
|
||||
# Builds and returns the probe to be sent
|
||||
def build_probe
|
||||
end
|
||||
|
||||
# Called for each IP in the batch. This will send all necessary probes.
|
||||
def scan_host(ip)
|
||||
scanner_send(build_probe, ip, rport)
|
||||
end
|
||||
|
||||
# Called for each response packet
|
||||
@@ -169,11 +186,12 @@ module Auxiliary::UDPScanner
|
||||
|
||||
# Called before the scan block
|
||||
def scanner_prescan(batch)
|
||||
vprint_status("Sending probes to #{batch[0]}->#{batch[-1]} (#{batch.length} hosts)")
|
||||
@results = {}
|
||||
end
|
||||
|
||||
# Called after the scan block
|
||||
def scanner_postscan(batch)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -302,6 +302,9 @@ module Msf::DBManager::Import
|
||||
when /MetasploitV4/
|
||||
@import_filedata[:type] = "Metasploit XML"
|
||||
return :msf_xml
|
||||
when /MetasploitV5/
|
||||
@import_filedata[:type] = "Metasploit XML"
|
||||
return :msf_xml
|
||||
when /netsparker/
|
||||
@import_filedata[:type] = "NetSparker XML"
|
||||
return :netsparker_xml
|
||||
|
||||
@@ -75,9 +75,10 @@ module Msf::DBManager::Note
|
||||
if (opts[:port])
|
||||
proto = nil
|
||||
sname = nil
|
||||
case opts[:proto].to_s.downcase # Catch incorrect usages
|
||||
proto_lower = opts[:proto].to_s.downcase # Catch incorrect usages
|
||||
case proto_lower
|
||||
when 'tcp','udp'
|
||||
proto = opts[:proto]
|
||||
proto = proto_lower
|
||||
sname = opts[:sname] if opts[:sname]
|
||||
when 'dns','snmp','dhcp'
|
||||
proto = 'udp'
|
||||
@@ -166,4 +167,4 @@ module Msf::DBManager::Note
|
||||
ret[:note] = note
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -162,14 +162,14 @@ class Encoder < Module
|
||||
# Returns MODULE_ENCODER to indicate that this is an encoder module.
|
||||
#
|
||||
def self.type
|
||||
return MODULE_ENCODER
|
||||
return Msf::MODULE_ENCODER
|
||||
end
|
||||
|
||||
#
|
||||
# Returns MODULE_ENCODER to indicate that this is an encoder module.
|
||||
#
|
||||
def type
|
||||
return MODULE_ENCODER
|
||||
return Msf::MODULE_ENCODER
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
@@ -621,14 +621,14 @@ class Exploit < Msf::Module
|
||||
# Returns MODULE_EXPLOIT to indicate that this is an exploit module.
|
||||
#
|
||||
def self.type
|
||||
MODULE_EXPLOIT
|
||||
Msf::MODULE_EXPLOIT
|
||||
end
|
||||
|
||||
#
|
||||
# Returns MODULE_EXPLOIT to indicate that this is an exploit module.
|
||||
#
|
||||
def type
|
||||
MODULE_EXPLOIT
|
||||
Msf::MODULE_EXPLOIT
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
@@ -49,8 +49,6 @@ module Exploit::Android
|
||||
|
||||
// libraryData contains the bytes for a native shared object built via NDK
|
||||
// which will load the "stage", which in this case is our android meterpreter stager.
|
||||
// LibraryData is loaded via ajax later, because we have to access javascript in
|
||||
// order to detect what arch we are running.
|
||||
var libraryData = "#{Rex::Text.to_octal(ndkstager(stagename, arch), '\\\\0')}";
|
||||
|
||||
// the stageData is the JVM bytecode that is loaded by the NDK stager. It contains
|
||||
|
||||
@@ -476,7 +476,7 @@ module Exploit::Remote::HttpServer
|
||||
host = "[#{host}]"
|
||||
end
|
||||
|
||||
if datastore['URIPORT']
|
||||
if datastore['URIPORT'] != 0
|
||||
port = ':' + datastore['URIPORT'].to_s
|
||||
elsif (ssl and datastore["SRVPORT"] == 443)
|
||||
port = ''
|
||||
@@ -547,7 +547,7 @@ module Exploit::Remote::HttpServer
|
||||
# Guard against removing resources added by other modules
|
||||
if @my_resources.include?(name)
|
||||
@my_resources.delete(name)
|
||||
service.remove_resource(name)
|
||||
service.remove_resource(name) if service
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ class Framework
|
||||
def initialize(opts={})
|
||||
|
||||
# Allow specific module types to be loaded
|
||||
types = opts[:module_types] || MODULE_TYPES
|
||||
types = opts[:module_types] || Msf::MODULE_TYPES
|
||||
|
||||
self.threads = ThreadManager.new(self)
|
||||
self.events = EventDispatcher.new(self)
|
||||
|
||||
+44
-939
@@ -12,13 +12,46 @@ module Msf
|
||||
#
|
||||
###
|
||||
class Module
|
||||
autoload :Arch, 'msf/core/module/arch'
|
||||
autoload :Author, 'msf/core/module/author'
|
||||
autoload :AuxiliaryAction, 'msf/core/module/auxiliary_action'
|
||||
autoload :Compatibility, 'msf/core/module/compatibility'
|
||||
autoload :DataStore, 'msf/core/module/data_store'
|
||||
autoload :Deprecated, 'msf/core/module/deprecated'
|
||||
autoload :Failure, 'msf/core/module/failure'
|
||||
autoload :FullName, 'msf/core/module/full_name'
|
||||
autoload :HasActions, 'msf/core/module/has_actions'
|
||||
autoload :ModuleInfo, 'msf/core/module/module_info'
|
||||
autoload :ModuleStore, 'msf/core/module/module_store'
|
||||
autoload :Network, 'msf/core/module/network'
|
||||
autoload :Options, 'msf/core/module/options'
|
||||
autoload :Platform, 'msf/core/module/platform'
|
||||
autoload :PlatformList, 'msf/core/module/platform_list'
|
||||
autoload :Privileged, 'msf/core/module/privileged'
|
||||
autoload :Ranking, 'msf/core/module/ranking'
|
||||
autoload :Reference, 'msf/core/module/reference'
|
||||
autoload :Search, 'msf/core/module/search'
|
||||
autoload :SiteReference, 'msf/core/module/reference'
|
||||
autoload :Target, 'msf/core/module/target'
|
||||
autoload :Type, 'msf/core/module/type'
|
||||
autoload :UI, 'msf/core/module/ui'
|
||||
autoload :UUID, 'msf/core/module/uuid'
|
||||
|
||||
# Modules can subscribe to a user-interface, and as such they include the
|
||||
# UI subscriber module. This provides methods like print, print_line, etc.
|
||||
# User interfaces are designed to be medium independent, and as such the
|
||||
# user interface subscribes are designed to provide a flexible way of
|
||||
# interacting with the user, n stuff.
|
||||
include Rex::Ui::Subscriber
|
||||
include Msf::Module::Arch
|
||||
include Msf::Module::Author
|
||||
include Msf::Module::Compatibility
|
||||
include Msf::Module::DataStore
|
||||
include Msf::Module::FullName
|
||||
include Msf::Module::ModuleInfo
|
||||
include Msf::Module::ModuleStore
|
||||
include Msf::Module::Network
|
||||
include Msf::Module::Options
|
||||
include Msf::Module::Privileged
|
||||
include Msf::Module::Ranking
|
||||
include Msf::Module::Search
|
||||
include Msf::Module::Type
|
||||
include Msf::Module::UI
|
||||
include Msf::Module::UUID
|
||||
|
||||
# Make include public so we can runtime extend
|
||||
public_class_method :include
|
||||
@@ -26,47 +59,6 @@ class Module
|
||||
class << self
|
||||
include Framework::Offspring
|
||||
|
||||
#
|
||||
# Class method to figure out what type of module this is
|
||||
#
|
||||
def type
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def fullname
|
||||
type + '/' + refname
|
||||
end
|
||||
|
||||
def shortname
|
||||
refname.split('/').last
|
||||
end
|
||||
|
||||
#
|
||||
# Returns this module's ranking.
|
||||
#
|
||||
def rank
|
||||
(const_defined?('Rank')) ? const_get('Rank') : NormalRanking
|
||||
end
|
||||
|
||||
#
|
||||
# Returns this module's ranking as a string representation.
|
||||
#
|
||||
def rank_to_s
|
||||
RankingName[rank]
|
||||
end
|
||||
|
||||
#
|
||||
# Returns this module's ranking as a string for display.
|
||||
#
|
||||
def rank_to_h
|
||||
rank_to_s.gsub('Rank', '').downcase
|
||||
end
|
||||
#
|
||||
# The module's name that is assigned it it by the framework
|
||||
# or derived from the path that the module is loaded from.
|
||||
#
|
||||
attr_accessor :refname
|
||||
|
||||
#
|
||||
# This attribute holds the non-duplicated copy of the module
|
||||
# implementation. This attribute is used for reloading purposes so that
|
||||
@@ -98,14 +90,6 @@ class Module
|
||||
true
|
||||
end
|
||||
|
||||
require 'msf/core/module/author'
|
||||
require 'msf/core/module/platform_list'
|
||||
require 'msf/core/module/reference'
|
||||
require 'msf/core/module/target'
|
||||
require 'msf/core/module/auxiliary_action'
|
||||
require 'msf/core/module/has_actions'
|
||||
require 'msf/core/module/deprecated'
|
||||
|
||||
#
|
||||
# Creates an instance of an abstract module using the supplied information
|
||||
# hash.
|
||||
@@ -125,13 +109,13 @@ class Module
|
||||
info_fixups
|
||||
|
||||
# Transform some of the fields to arrays as necessary
|
||||
self.author = Author.transform(module_info['Author'])
|
||||
self.author = Msf::Author.transform(module_info['Author'])
|
||||
self.arch = Rex::Transformer.transform(module_info['Arch'], Array, [ String ], 'Arch')
|
||||
self.platform = PlatformList.transform(module_info['Platform'])
|
||||
self.references = Rex::Transformer.transform(module_info['References'], Array, [ SiteReference, Reference ], 'Ref')
|
||||
|
||||
# Create and initialize the option container for this module
|
||||
self.options = OptionContainer.new
|
||||
self.options = Msf::OptionContainer.new
|
||||
self.options.add_options(info['Options'], self.class)
|
||||
self.options.add_advanced_options(info['AdvancedOptions'], self.class)
|
||||
self.options.add_evasion_options(info['EvasionOptions'], self.class)
|
||||
@@ -173,135 +157,6 @@ class Module
|
||||
obj
|
||||
end
|
||||
|
||||
#
|
||||
# Overwrite the Subscriber print_(status|error|good) to do time stamps
|
||||
#
|
||||
|
||||
def print_prefix
|
||||
ret = ''
|
||||
if (datastore['TimestampOutput'] =~ /^(t|y|1)/i) || (
|
||||
framework && framework.datastore['TimestampOutput'] =~ /^(t|y|1)/i
|
||||
)
|
||||
prefix = "[#{Time.now.strftime("%Y.%m.%d-%H:%M:%S")}] "
|
||||
|
||||
xn ||= datastore['ExploitNumber']
|
||||
xn ||= framework.datastore['ExploitNumber']
|
||||
if xn.is_a?(Fixnum)
|
||||
prefix << "[%04d] " % xn
|
||||
end
|
||||
|
||||
ret = prefix
|
||||
end
|
||||
ret
|
||||
end
|
||||
|
||||
def print_status(msg='')
|
||||
super(print_prefix + msg)
|
||||
end
|
||||
|
||||
def print_error(msg='')
|
||||
super(print_prefix + msg)
|
||||
end
|
||||
|
||||
def print_good(msg='')
|
||||
super(print_prefix + msg)
|
||||
end
|
||||
|
||||
def print_warning(msg='')
|
||||
super(print_prefix + msg)
|
||||
end
|
||||
|
||||
|
||||
#
|
||||
# Overwrite the Subscriber print_line to do custom prefixes
|
||||
#
|
||||
|
||||
def print_line_prefix
|
||||
datastore['CustomPrintPrefix'] || framework.datastore['CustomPrintPrefix'] || ''
|
||||
end
|
||||
|
||||
def print_line(msg='')
|
||||
super(print_line_prefix + msg)
|
||||
end
|
||||
|
||||
# Verbose version of #print_status
|
||||
def vprint_status(msg)
|
||||
print_status(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
# Verbose version of #print_error
|
||||
def vprint_error(msg)
|
||||
print_error(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
# Verbose version of #print_good
|
||||
def vprint_good(msg)
|
||||
print_good(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
# Verbose version of #print_line
|
||||
def vprint_line(msg)
|
||||
print_line(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
# Verbose version of #print_debug
|
||||
def vprint_debug(msg)
|
||||
print_debug(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
# Verbose version of #print_warning
|
||||
def vprint_warning(msg)
|
||||
print_warning(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's framework full reference name. This is the
|
||||
# short name that end-users work with (refname) plus the type
|
||||
# of module prepended. Ex:
|
||||
#
|
||||
# payloads/windows/shell/reverse_tcp
|
||||
#
|
||||
def fullname
|
||||
self.class.fullname
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's framework reference name. This is the
|
||||
# short name that end-users work with. Ex:
|
||||
#
|
||||
# windows/shell/reverse_tcp
|
||||
#
|
||||
def refname
|
||||
self.class.refname
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's rank.
|
||||
#
|
||||
def rank
|
||||
self.class.rank
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's rank in string format.
|
||||
#
|
||||
def rank_to_s
|
||||
self.class.rank_to_s
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's rank in display format.
|
||||
#
|
||||
def rank_to_h
|
||||
self.class.rank_to_h
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's framework short name. This is a
|
||||
# possibly conflicting name used for things like console
|
||||
# prompts.
|
||||
#
|
||||
# reverse_tcp
|
||||
#
|
||||
def shortname
|
||||
self.class.shortname
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the unduplicated class associated with this module.
|
||||
#
|
||||
@@ -316,35 +171,6 @@ class Module
|
||||
self.class.file_path
|
||||
end
|
||||
|
||||
#
|
||||
# Return the module's name from the module information hash.
|
||||
#
|
||||
def name
|
||||
module_info['Name']
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's alias, if it has one. Otherwise, the module's
|
||||
# name is returned.
|
||||
#
|
||||
def alias
|
||||
module_info['Alias']
|
||||
end
|
||||
|
||||
#
|
||||
# Return the module's description.
|
||||
#
|
||||
def description
|
||||
module_info['Description']
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the disclosure date, if known.
|
||||
#
|
||||
def disclosure_date
|
||||
date_str = Date.parse(module_info['DisclosureDate'].to_s) rescue nil
|
||||
end
|
||||
|
||||
#
|
||||
# Checks to see if the target is vulnerable, returning unsupported if it's
|
||||
# not supported.
|
||||
@@ -355,27 +181,6 @@ class Module
|
||||
Msf::Exploit::CheckCode::Unsupported
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the hash that describes this module's compatibilities.
|
||||
#
|
||||
def compat
|
||||
module_info['Compat'] || {}
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the address of the last target host (rough estimate)
|
||||
#
|
||||
def target_host
|
||||
self.respond_to?('rhost') ? rhost : self.datastore['RHOST']
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the address of the last target port (rough estimate)
|
||||
#
|
||||
def target_port
|
||||
self.respond_to?('rport') ? rport : self.datastore['RPORT']
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the current workspace
|
||||
#
|
||||
@@ -416,125 +221,6 @@ class Module
|
||||
self.datastore['ParentUUID'] = ref.uuid.dup
|
||||
end
|
||||
|
||||
#
|
||||
# Returns whether or not this module is compatible with the supplied
|
||||
# module.
|
||||
#
|
||||
def compatible?(mod)
|
||||
ch = nil
|
||||
|
||||
# Invalid module? Shoot, we can't compare that.
|
||||
return true if (mod == nil)
|
||||
|
||||
# Determine which hash to used based on the supplied module type
|
||||
if (mod.type == MODULE_ENCODER)
|
||||
ch = self.compat['Encoder']
|
||||
elsif (mod.type == MODULE_NOP)
|
||||
ch = self.compat['Nop']
|
||||
elsif (mod.type == MODULE_PAYLOAD)
|
||||
ch = self.compat['Payload']
|
||||
if self.respond_to?("target") and self.target and self.target['Payload'] and self.target['Payload']['Compat']
|
||||
ch = ch.merge(self.target['Payload']['Compat'])
|
||||
end
|
||||
else
|
||||
return true
|
||||
end
|
||||
|
||||
# Enumerate each compatibility item in our hash to find out
|
||||
# if we're compatible with this sucker.
|
||||
ch.each_pair do |k,v|
|
||||
|
||||
# Get the value of the current key from the module, such as
|
||||
# the ConnectionType for a stager (ws2ord, for instance).
|
||||
mval = mod.module_info[k]
|
||||
|
||||
# Reject a filled compat item on one side, but not the other
|
||||
if (v and not mval)
|
||||
dlog("Module #{mod.refname} is incompatible with #{self.refname} for #{k}: limiter was #{v}")
|
||||
return false
|
||||
end
|
||||
|
||||
# Track how many of our values matched the module
|
||||
mcnt = 0
|
||||
|
||||
# Values are whitespace separated
|
||||
sv = v.split(/\s+/)
|
||||
mv = mval.split(/\s+/)
|
||||
|
||||
sv.each do |x|
|
||||
|
||||
dlog("Checking compat [#{mod.refname} with #{self.refname}]: #{x} to #{mv.join(", ")}", 'core', LEV_3)
|
||||
|
||||
# Verify that any negate values are not matched
|
||||
if (x[0,1] == '-' and mv.include?(x[1, x.length-1]))
|
||||
dlog("Module #{mod.refname} is incompatible with #{self.refname} for #{k}: limiter was #{x}, value was #{mval}", 'core', LEV_1)
|
||||
return false
|
||||
end
|
||||
|
||||
mcnt += 1 if mv.include?(x)
|
||||
end
|
||||
|
||||
# No values matched, reject this module
|
||||
if (mcnt == 0)
|
||||
dlog("Module #{mod.refname} is incompatible with #{self.refname} for #{k}: limiter was #{v}, value was #{mval}", 'core', LEV_1)
|
||||
return false
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
dlog("Module #{mod.refname} is compatible with #{self.refname}", "core", LEV_1)
|
||||
|
||||
|
||||
# If we get here, we're compatible.
|
||||
return true
|
||||
end
|
||||
|
||||
#
|
||||
# Return the module's abstract type.
|
||||
#
|
||||
def type
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
#
|
||||
# Return a comma separated list of author for this module.
|
||||
#
|
||||
def author_to_s
|
||||
author.collect { |author| author.to_s }.join(", ")
|
||||
end
|
||||
|
||||
#
|
||||
# Enumerate each author.
|
||||
#
|
||||
def each_author(&block)
|
||||
author.each(&block)
|
||||
end
|
||||
|
||||
#
|
||||
# Return a comma separated list of supported architectures, if any.
|
||||
#
|
||||
def arch_to_s
|
||||
arch.join(", ")
|
||||
end
|
||||
|
||||
#
|
||||
# Enumerate each architecture.
|
||||
#
|
||||
def each_arch(&block)
|
||||
arch.each(&block)
|
||||
end
|
||||
|
||||
#
|
||||
# Return whether or not the module supports the supplied architecture.
|
||||
#
|
||||
def arch?(what)
|
||||
if (what == ARCH_ANY)
|
||||
true
|
||||
else
|
||||
arch.index(what) != nil
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Return a comma separated list of supported platforms, if any.
|
||||
#
|
||||
@@ -549,56 +235,6 @@ class Module
|
||||
(platform & what).empty? == false
|
||||
end
|
||||
|
||||
#
|
||||
# Returns whether or not the module requires or grants high privileges.
|
||||
#
|
||||
def privileged?
|
||||
privileged == true
|
||||
end
|
||||
|
||||
#
|
||||
# The default communication subsystem for this module. We may need to move
|
||||
# this somewhere else.
|
||||
#
|
||||
def comm
|
||||
Rex::Socket::Comm::Local
|
||||
end
|
||||
|
||||
#
|
||||
# Overrides the class' own datastore with the one supplied. This is used
|
||||
# to allow modules to share datastores, such as a payload sharing an
|
||||
# exploit module's datastore.
|
||||
#
|
||||
def share_datastore(ds)
|
||||
self.datastore = ds
|
||||
self.datastore.import_options(self.options)
|
||||
end
|
||||
|
||||
#
|
||||
# Imports default options into the module's datastore, optionally clearing
|
||||
# all of the values currently set in the datastore.
|
||||
#
|
||||
def import_defaults(clear_datastore = true)
|
||||
# Clear the datastore if the caller asked us to
|
||||
self.datastore.clear if clear_datastore
|
||||
|
||||
self.datastore.import_options(self.options, 'self', true)
|
||||
|
||||
# If there are default options, import their values into the datastore
|
||||
if (module_info['DefaultOptions'])
|
||||
self.datastore.import_options_from_hash(module_info['DefaultOptions'], true, 'self')
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# This method ensures that the options associated with this module all
|
||||
# have valid values according to each required option in the option
|
||||
# container.
|
||||
#
|
||||
def validate
|
||||
self.options.validate(self.datastore)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is being debugged. The debug flag is set
|
||||
# by setting datastore['DEBUG'] to 1|true|yes
|
||||
@@ -607,123 +243,6 @@ class Module
|
||||
(datastore['DEBUG'] || '') =~ /^(1|t|y)/i
|
||||
end
|
||||
|
||||
#
|
||||
# Indicates whether the module supports IPv6. This is true by default,
|
||||
# but certain modules require additional work to be compatible or are
|
||||
# hardcoded in terms of application support and should be skipped.
|
||||
#
|
||||
def support_ipv6?
|
||||
true
|
||||
end
|
||||
|
||||
#
|
||||
# This provides a standard set of search filters for every module.
|
||||
# The search terms are in the form of:
|
||||
# {
|
||||
# "text" => [ [ "include_term1", "include_term2", ...], [ "exclude_term1", "exclude_term2"], ... ],
|
||||
# "cve" => [ [ "include_term1", "include_term2", ...], [ "exclude_term1", "exclude_term2"], ... ]
|
||||
# }
|
||||
#
|
||||
# Returns true on no match, false on match
|
||||
#
|
||||
def search_filter(search_string)
|
||||
return false if not search_string
|
||||
|
||||
search_string += " "
|
||||
|
||||
# Split search terms by space, but allow quoted strings
|
||||
terms = search_string.split(/\"/).collect{|t| t.strip==t ? t : t.split(' ')}.flatten
|
||||
terms.delete('')
|
||||
|
||||
# All terms are either included or excluded
|
||||
res = {}
|
||||
|
||||
terms.each do |t|
|
||||
f,v = t.split(":", 2)
|
||||
if not v
|
||||
v = f
|
||||
f = 'text'
|
||||
end
|
||||
next if v.length == 0
|
||||
f.downcase!
|
||||
v.downcase!
|
||||
res[f] ||=[ [], [] ]
|
||||
if v[0,1] == "-"
|
||||
next if v.length == 1
|
||||
res[f][1] << v[1,v.length-1]
|
||||
else
|
||||
res[f][0] << v
|
||||
end
|
||||
end
|
||||
|
||||
k = res
|
||||
|
||||
refs = self.references.map{|x| [x.ctx_id, x.ctx_val].join("-") }
|
||||
is_server = (self.respond_to?(:stance) and self.stance == "aggressive")
|
||||
is_client = (self.respond_to?(:stance) and self.stance == "passive")
|
||||
|
||||
[0,1].each do |mode|
|
||||
match = false
|
||||
k.keys.each do |t|
|
||||
next if k[t][mode].length == 0
|
||||
|
||||
k[t][mode].each do |w|
|
||||
# Reset the match flag for each keyword for inclusive search
|
||||
match = false if mode == 0
|
||||
|
||||
# Convert into a case-insensitive regex
|
||||
r = Regexp.new(Regexp.escape(w), true)
|
||||
|
||||
case t
|
||||
when 'text'
|
||||
terms = [self.name, self.fullname, self.description] + refs + self.author.map{|x| x.to_s}
|
||||
if self.respond_to?(:targets) and self.targets
|
||||
terms = terms + self.targets.map{|x| x.name}
|
||||
end
|
||||
match = [t,w] if terms.any? { |x| x =~ r }
|
||||
when 'name'
|
||||
match = [t,w] if self.name =~ r
|
||||
when 'path'
|
||||
match = [t,w] if self.fullname =~ r
|
||||
when 'author'
|
||||
match = [t,w] if self.author.map{|x| x.to_s}.any? { |a| a =~ r }
|
||||
when 'os', 'platform'
|
||||
match = [t,w] if self.platform_to_s =~ r or self.arch_to_s =~ r
|
||||
if not match and self.respond_to?(:targets) and self.targets
|
||||
match = [t,w] if self.targets.map{|x| x.name}.any? { |t| t =~ r }
|
||||
end
|
||||
when 'port'
|
||||
match = [t,w] if self.datastore['RPORT'].to_s =~ r
|
||||
when 'type'
|
||||
match = [t,w] if Msf::MODULE_TYPES.any? { |modt| w == modt and self.type == modt }
|
||||
when 'app'
|
||||
match = [t,w] if (w == "server" and is_server)
|
||||
match = [t,w] if (w == "client" and is_client)
|
||||
when 'cve'
|
||||
match = [t,w] if refs.any? { |ref| ref =~ /^cve\-/i and ref =~ r }
|
||||
when 'bid'
|
||||
match = [t,w] if refs.any? { |ref| ref =~ /^bid\-/i and ref =~ r }
|
||||
when 'osvdb'
|
||||
match = [t,w] if refs.any? { |ref| ref =~ /^osvdb\-/i and ref =~ r }
|
||||
when 'edb'
|
||||
match = [t,w] if refs.any? { |ref| ref =~ /^edb\-/i and ref =~ r }
|
||||
end
|
||||
break if match
|
||||
end
|
||||
# Filter this module if no matches for a given keyword type
|
||||
if mode == 0 and not match
|
||||
return true
|
||||
end
|
||||
end
|
||||
# Filter this module if we matched an exclusion keyword (-value)
|
||||
if mode == 1 and match
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
|
||||
#
|
||||
# Support fail_with for all module types, allow specific classes to override
|
||||
#
|
||||
@@ -731,126 +250,12 @@ class Module
|
||||
raise RuntimeError, "#{reason.to_s}: #{msg}"
|
||||
end
|
||||
|
||||
#
|
||||
# Constants indicating the reason for an unsuccessful module attempt
|
||||
#
|
||||
module Failure
|
||||
|
||||
#
|
||||
# No confidence in success or failure
|
||||
#
|
||||
None = 'none'
|
||||
|
||||
#
|
||||
# No confidence in success or failure
|
||||
#
|
||||
Unknown = 'unknown'
|
||||
|
||||
#
|
||||
# The network service was unreachable (connection refused, etc)
|
||||
#
|
||||
Unreachable = 'unreachable'
|
||||
|
||||
#
|
||||
# The exploit settings were incorrect
|
||||
#
|
||||
BadConfig = 'bad-config'
|
||||
|
||||
#
|
||||
# The network service disconnected us mid-attempt
|
||||
#
|
||||
Disconnected = 'disconnected'
|
||||
|
||||
#
|
||||
# The application endpoint or specific service was not found
|
||||
#
|
||||
NotFound = 'not-found'
|
||||
|
||||
#
|
||||
# The application replied in an unexpected fashion
|
||||
#
|
||||
UnexpectedReply = 'unexpected-reply'
|
||||
|
||||
#
|
||||
# The exploit triggered some form of timeout
|
||||
#
|
||||
TimeoutExpired = 'timeout-expired'
|
||||
|
||||
#
|
||||
# The exploit was interrupted by the user
|
||||
#
|
||||
UserInterrupt = 'user-interrupt'
|
||||
|
||||
#
|
||||
# The application replied indication we do not have access
|
||||
#
|
||||
NoAccess = 'no-access'
|
||||
|
||||
#
|
||||
# The target is not compatible with this exploit or settings
|
||||
#
|
||||
NoTarget = 'no-target'
|
||||
|
||||
#
|
||||
# The application response indicated it was not vulnerable
|
||||
#
|
||||
NotVulnerable = 'not-vulnerable'
|
||||
|
||||
#
|
||||
# The payload was delivered but no session was opened (AV, network, etc)
|
||||
#
|
||||
PayloadFailed = 'payload-failed'
|
||||
end
|
||||
|
||||
|
||||
##
|
||||
#
|
||||
# Just some handy quick checks
|
||||
#
|
||||
##
|
||||
|
||||
#
|
||||
# Returns true if this module is an exploit module.
|
||||
#
|
||||
def exploit?
|
||||
(type == MODULE_EXPLOIT)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is a payload module.
|
||||
#
|
||||
def payload?
|
||||
(type == MODULE_PAYLOAD)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is an encoder module.
|
||||
#
|
||||
def encoder?
|
||||
(type == MODULE_ENCODER)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is a nop module.
|
||||
#
|
||||
def nop?
|
||||
(type == MODULE_NOP)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is an auxiliary module.
|
||||
#
|
||||
def auxiliary?
|
||||
(type == MODULE_AUX)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is an post-exploitation module.
|
||||
#
|
||||
def post?
|
||||
(type == MODULE_POST)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns false since this is the real module
|
||||
#
|
||||
@@ -858,28 +263,6 @@ class Module
|
||||
false
|
||||
end
|
||||
|
||||
#
|
||||
# Read a value from the module store
|
||||
#
|
||||
def [](k)
|
||||
self.module_store[k]
|
||||
end
|
||||
|
||||
#
|
||||
# Store a value into the module
|
||||
#
|
||||
def []=(k,v)
|
||||
self.module_store[k] = v
|
||||
end
|
||||
|
||||
#
|
||||
# The array of zero or more authors.
|
||||
#
|
||||
attr_reader :author
|
||||
#
|
||||
# The array of zero or more architectures.
|
||||
#
|
||||
attr_reader :arch
|
||||
#
|
||||
# The array of zero or more platforms.
|
||||
#
|
||||
@@ -888,18 +271,7 @@ class Module
|
||||
# The reference count for the module.
|
||||
#
|
||||
attr_reader :references
|
||||
#
|
||||
# The module-specific datastore instance.
|
||||
#
|
||||
attr_reader :datastore
|
||||
#
|
||||
# The module-specific options.
|
||||
#
|
||||
attr_reader :options
|
||||
#
|
||||
# Whether or not this module requires privileged access.
|
||||
#
|
||||
attr_reader :privileged
|
||||
|
||||
#
|
||||
# The license under which this module is provided.
|
||||
#
|
||||
@@ -910,30 +282,12 @@ class Module
|
||||
#
|
||||
attr_accessor :job_id
|
||||
|
||||
#
|
||||
# A generic hash used for passing additional information to modules
|
||||
#
|
||||
attr_accessor :module_store
|
||||
|
||||
#
|
||||
# The last exception to occur using this module
|
||||
#
|
||||
attr_accessor :error
|
||||
|
||||
#
|
||||
# A unique identifier for this module instance
|
||||
#
|
||||
attr_reader :uuid
|
||||
|
||||
protected
|
||||
attr_writer :uuid
|
||||
def generate_uuid
|
||||
self.uuid = Rex::Text.rand_text_alphanumeric(8).downcase
|
||||
end
|
||||
#
|
||||
# The list of options that support merging in an information hash.
|
||||
#
|
||||
UpdateableOptions = [ "Name", "Description", "Alias", "PayloadCompat" ]
|
||||
protected
|
||||
|
||||
#
|
||||
# Sets the modules unsupplied info fields to their default values.
|
||||
@@ -953,94 +307,6 @@ protected
|
||||
self.module_store = {}
|
||||
end
|
||||
|
||||
#
|
||||
# This method initializes the module's compatibility hashes by normalizing
|
||||
# them into one single hash. As it stands, modules can define
|
||||
# compatibility in their supplied info hash through:
|
||||
#
|
||||
# Compat:: direct compat definitions
|
||||
# PayloadCompat:: payload compatibilities
|
||||
# EncoderCompat:: encoder compatibilities
|
||||
# NopCompat:: nop compatibilities
|
||||
#
|
||||
# In the end, the module specific compatibilities are merged as sub-hashes
|
||||
# of the primary Compat hash key to make checks more uniform.
|
||||
#
|
||||
def init_compat
|
||||
c = module_info['Compat']
|
||||
|
||||
if (c == nil)
|
||||
c = module_info['Compat'] = Hash.new
|
||||
end
|
||||
|
||||
# Initialize the module sub compatibilities
|
||||
c['Payload'] = Hash.new if (c['Payload'] == nil)
|
||||
c['Encoder'] = Hash.new if (c['Encoder'] == nil)
|
||||
c['Nop'] = Hash.new if (c['Nop'] == nil)
|
||||
|
||||
# Update the compat-derived module specific compatibilities from
|
||||
# the specific ones to make a uniform view of compatibilities
|
||||
c['Payload'].update(module_info['PayloadCompat'] || {})
|
||||
c['Encoder'].update(module_info['EncoderCompat'] || {})
|
||||
c['Nop'].update(module_info['NopCompat'] || {})
|
||||
end
|
||||
|
||||
#
|
||||
# Register options with a specific owning class.
|
||||
#
|
||||
def info_fixups
|
||||
# Each reference should be an array consisting of two elements
|
||||
refs = module_info['References']
|
||||
if(refs and not refs.empty?)
|
||||
refs.each_index do |i|
|
||||
if !(refs[i].respond_to?('[]') and refs[i].length == 2)
|
||||
refs[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
# Purge invalid references
|
||||
refs.delete(nil)
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Register options with a specific owning class.
|
||||
#
|
||||
def register_options(options, owner = self.class)
|
||||
self.options.add_options(options, owner)
|
||||
self.datastore.import_options(self.options, 'self', true)
|
||||
import_defaults(false)
|
||||
end
|
||||
|
||||
#
|
||||
# Register advanced options with a specific owning class.
|
||||
#
|
||||
def register_advanced_options(options, owner = self.class)
|
||||
self.options.add_advanced_options(options, owner)
|
||||
self.datastore.import_options(self.options, 'self', true)
|
||||
import_defaults(false)
|
||||
end
|
||||
|
||||
#
|
||||
# Register evasion options with a specific owning class.
|
||||
#
|
||||
def register_evasion_options(options, owner = self.class)
|
||||
self.options.add_evasion_options(options, owner)
|
||||
self.datastore.import_options(self.options, 'self', true)
|
||||
import_defaults(false)
|
||||
end
|
||||
|
||||
#
|
||||
# Removes the supplied options from the module's option container
|
||||
# and data store.
|
||||
#
|
||||
def deregister_options(*names)
|
||||
names.each { |name|
|
||||
self.options.remove_option(name)
|
||||
self.datastore.delete(name)
|
||||
}
|
||||
end
|
||||
|
||||
#
|
||||
# Checks to see if a derived instance of a given module implements a method
|
||||
# beyond the one that is provided by a base class. This is a pretty lame
|
||||
@@ -1050,170 +316,9 @@ protected
|
||||
(self.method(method_name).to_s.match(/#{parent}[^:]/)) ? false : true
|
||||
end
|
||||
|
||||
#
|
||||
# Merges options in the info hash in a sane fashion, as some options
|
||||
# require special attention.
|
||||
#
|
||||
def merge_info(info, opts)
|
||||
opts.each_pair { |name, val|
|
||||
merge_check_key(info, name, val)
|
||||
}
|
||||
|
||||
info
|
||||
end
|
||||
|
||||
#
|
||||
# Updates information in the supplied info hash and merges other
|
||||
# information. This method is used to override things like Name, Version,
|
||||
# and Description without losing the ability to merge architectures,
|
||||
# platforms, and options.
|
||||
#
|
||||
def update_info(info, opts)
|
||||
opts.each_pair { |name, val|
|
||||
# If the supplied option name is one of the ones that we should
|
||||
# override by default
|
||||
if (UpdateableOptions.include?(name) == true)
|
||||
# Only if the entry is currently nil do we use our value
|
||||
if (info[name] == nil)
|
||||
info[name] = val
|
||||
end
|
||||
# Otherwise, perform the merge operation like normal
|
||||
else
|
||||
merge_check_key(info, name, val)
|
||||
end
|
||||
}
|
||||
|
||||
return info
|
||||
end
|
||||
|
||||
#
|
||||
# Checks and merges the supplied key/value pair in the supplied hash.
|
||||
#
|
||||
def merge_check_key(info, name, val)
|
||||
if (self.respond_to?("merge_info_#{name.downcase}"))
|
||||
eval("merge_info_#{name.downcase}(info, val)")
|
||||
else
|
||||
# If the info hash already has an entry for this name
|
||||
if (info[name])
|
||||
# If it's not an array, convert it to an array and merge the
|
||||
# two
|
||||
if (info[name].kind_of?(Array) == false)
|
||||
curr = info[name]
|
||||
info[name] = [ curr ]
|
||||
end
|
||||
|
||||
# If the value being merged is an array, add each one
|
||||
if (val.kind_of?(Array) == true)
|
||||
val.each { |v|
|
||||
if (info[name].include?(v) == false)
|
||||
info[name] << v
|
||||
end
|
||||
}
|
||||
# Otherwise just add the value
|
||||
elsif (info[name].include?(val) == false)
|
||||
info[name] << val
|
||||
end
|
||||
# Otherwise, just set the value equal if no current value
|
||||
# exists
|
||||
else
|
||||
info[name] = val
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Merge aliases with an underscore delimiter.
|
||||
#
|
||||
def merge_info_alias(info, val)
|
||||
merge_info_string(info, 'Alias', val, '_')
|
||||
end
|
||||
|
||||
#
|
||||
# Merges the module name.
|
||||
#
|
||||
def merge_info_name(info, val)
|
||||
merge_info_string(info, 'Name', val, ', ', true)
|
||||
end
|
||||
|
||||
#
|
||||
# Merges the module description.
|
||||
#
|
||||
def merge_info_description(info, val)
|
||||
merge_info_string(info, 'Description', val, ". ", true)
|
||||
end
|
||||
|
||||
#
|
||||
# Merge the module version.
|
||||
#
|
||||
def merge_info_version(info, val)
|
||||
merge_info_string(info, 'Version', val)
|
||||
end
|
||||
|
||||
#
|
||||
# Merges a given key in the info hash with a delimiter.
|
||||
#
|
||||
def merge_info_string(info, key, val, delim = ', ', inverse = false)
|
||||
if (info[key])
|
||||
if (inverse == true)
|
||||
info[key] = info[key] + delim + val
|
||||
else
|
||||
info[key] = val + delim + info[key]
|
||||
end
|
||||
else
|
||||
info[key] = val
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Merges options.
|
||||
#
|
||||
def merge_info_options(info, val, advanced = false, evasion = false)
|
||||
|
||||
key_name = ((advanced) ? 'Advanced' : (evasion) ? 'Evasion' : '') + 'Options'
|
||||
|
||||
new_cont = OptionContainer.new
|
||||
new_cont.add_options(val, advanced, evasion)
|
||||
cur_cont = OptionContainer.new
|
||||
cur_cont.add_options(info[key_name] || [], advanced, evasion)
|
||||
|
||||
new_cont.each_option { |name, option|
|
||||
next if (cur_cont.get(name))
|
||||
|
||||
info[key_name] = [] if (!info[key_name])
|
||||
info[key_name] << option
|
||||
}
|
||||
end
|
||||
|
||||
#
|
||||
# Merges advanced options.
|
||||
#
|
||||
def merge_info_advanced_options(info, val)
|
||||
merge_info_options(info, val, true, false)
|
||||
end
|
||||
|
||||
#
|
||||
# Merges advanced options.
|
||||
#
|
||||
def merge_info_evasion_options(info, val)
|
||||
merge_info_options(info, val, false, true)
|
||||
end
|
||||
|
||||
attr_accessor :module_info # :nodoc:
|
||||
attr_writer :author, :arch, :platform, :references, :datastore, :options # :nodoc:
|
||||
attr_writer :platform, :references # :nodoc:
|
||||
attr_writer :privileged # :nodoc:
|
||||
attr_writer :license # :nodoc:
|
||||
|
||||
end
|
||||
|
||||
#
|
||||
# Alias the data types so people can reference them just by Msf:: and not
|
||||
# Msf::Module::
|
||||
#
|
||||
Author = Msf::Module::Author
|
||||
Reference = Msf::Module::Reference
|
||||
SiteReference = Msf::Module::SiteReference
|
||||
Platform = Msf::Module::Platform
|
||||
Target = Msf::Module::Target
|
||||
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
module Msf::Module::Arch
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
# @!attribute arch
|
||||
# The array of zero or more architectures.
|
||||
attr_reader :arch
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# Return whether or not the module supports the supplied architecture.
|
||||
#
|
||||
def arch?(what)
|
||||
if (what == ARCH_ANY)
|
||||
true
|
||||
else
|
||||
arch.index(what) != nil
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Return a comma separated list of supported architectures, if any.
|
||||
#
|
||||
def arch_to_s
|
||||
arch.join(", ")
|
||||
end
|
||||
|
||||
#
|
||||
# Enumerate each architecture.
|
||||
#
|
||||
def each_arch(&block)
|
||||
arch.each(&block)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
attr_writer :arch
|
||||
end
|
||||
+20
-133
@@ -1,149 +1,36 @@
|
||||
# -*- coding: binary -*-
|
||||
require 'msf/core'
|
||||
module Msf::Module::Author
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
###
|
||||
#
|
||||
# This data type represents an author of a piece of code in either
|
||||
# the framework, a module, a script, or something entirely unrelated.
|
||||
#
|
||||
###
|
||||
class Msf::Module::Author
|
||||
|
||||
# A hash of known author names
|
||||
Known =
|
||||
{
|
||||
'amaloteaux' => 'alex_maloteaux' + 0x40.chr + 'metasploit.com',
|
||||
'anonymous' => 'Unknown',
|
||||
'bannedit' => 'bannedit' + 0x40.chr + 'metasploit.com',
|
||||
'Carlos Perez' => 'carlos_perez' + 0x40.chr + 'darkoperator.com',
|
||||
'cazz' => 'bmc' + 0x40.chr + 'shmoo.com',
|
||||
'CG' => 'cg' + 0x40.chr + 'carnal0wnage.com',
|
||||
'ddz' => 'ddz' + 0x40.chr + 'theta44.org',
|
||||
'egypt' => 'egypt' + 0x40.chr + 'metasploit.com',
|
||||
'et' => 'et' + 0x40.chr + 'metasploit.com',
|
||||
'Christian Mehlmauer' => 'FireFart' + 0x40.chr + 'gmail.com',
|
||||
'hdm' => 'hdm' + 0x40.chr + 'metasploit.com',
|
||||
'I)ruid' => 'druid' + 0x40.chr + 'caughq.org',
|
||||
'jcran' => 'jcran' + 0x40.chr + 'metasploit.com',
|
||||
'jduck' => 'jduck' + 0x40.chr + 'metasploit.com',
|
||||
'joev' => 'joev' + 0x40.chr + 'metasploit.com',
|
||||
'juan vazquez' => 'juan.vazquez' + 0x40.chr + 'metasploit.com',
|
||||
'kf' => 'kf_list' + 0x40.chr + 'digitalmunition.com',
|
||||
'kris katterjohn' => 'katterjohn' + 0x40.chr + 'gmail.com',
|
||||
'MC' => 'mc' + 0x40.chr + 'metasploit.com',
|
||||
'Ben Campbell' => 'eat_meatballs' + 0x40.chr + 'hotmail.co.uk',
|
||||
'msmith' => 'msmith' + 0x40.chr + 'metasploit.com',
|
||||
'mubix' => 'mubix' + 0x40.chr + 'hak5.org',
|
||||
'natron' => 'natron' + 0x40.chr + 'metasploit.com',
|
||||
'optyx' => 'optyx' + 0x40.chr + 'no$email.com',
|
||||
'patrick' => 'patrick' + 0x40.chr + 'osisecurity.com.au',
|
||||
'pusscat' => 'pusscat' + 0x40.chr + 'metasploit.com',
|
||||
'Ramon de C Valle' => 'rcvalle' + 0x40.chr + 'metasploit.com',
|
||||
'sf' => 'stephen_fewer' + 0x40.chr + 'harmonysecurity.com',
|
||||
'sinn3r' => 'sinn3r' + 0x40.chr + 'metasploit.com',
|
||||
'skape' => 'mmiller' + 0x40.chr + 'hick.org',
|
||||
'skylined' => 'skylined' + 0x40.chr + 'edup.tudelft.nl',
|
||||
'spoonm' => 'spoonm' + 0x40.chr + 'no$email.com',
|
||||
'stinko' => 'vinnie' + 0x40.chr + 'metasploit.com',
|
||||
'theLightCosine' => 'theLightCosine' + 0x40.chr + 'metasploit.com',
|
||||
'todb' => 'todb' + 0x40.chr + 'metasploit.com',
|
||||
'vlad902' => 'vlad902' + 0x40.chr + 'gmail.com',
|
||||
'wvu' => 'wvu' + 0x40.chr + 'metasploit.com'
|
||||
}
|
||||
# @!attribute author
|
||||
# The array of zero or more authors.
|
||||
attr_reader :author
|
||||
|
||||
#
|
||||
# Class method that translates a string to an instance of the Author class,
|
||||
# if it's of the right format, and returns the Author class instance
|
||||
# Instance Methods
|
||||
#
|
||||
def self.from_s(str)
|
||||
instance = self.new
|
||||
|
||||
# If the serialization fails...
|
||||
if (instance.from_s(str) == false)
|
||||
return nil
|
||||
end
|
||||
|
||||
return instance
|
||||
#
|
||||
# Return a comma separated list of author for this module.
|
||||
#
|
||||
def author_to_s
|
||||
author.collect { |author| author.to_s }.join(", ")
|
||||
end
|
||||
|
||||
#
|
||||
# Transforms the supplied source into an array of authors
|
||||
# Enumerate each author.
|
||||
#
|
||||
def self.transform(src)
|
||||
Rex::Transformer.transform(src, Array, [ self ], 'Author')
|
||||
def each_author(&block)
|
||||
author.each(&block)
|
||||
end
|
||||
|
||||
def initialize(name = nil, email = nil)
|
||||
self.name = name
|
||||
self.email = email || Known[name]
|
||||
end
|
||||
protected
|
||||
|
||||
#
|
||||
# Compares authors
|
||||
# Attributes
|
||||
#
|
||||
def ==(tgt)
|
||||
return (tgt.to_s == to_s)
|
||||
end
|
||||
|
||||
#
|
||||
# Serialize the author object to a string in form:
|
||||
#
|
||||
# name <email>
|
||||
#
|
||||
def to_s
|
||||
str = "#{name}"
|
||||
|
||||
if (email and not email.empty?)
|
||||
str += " <#{email}>"
|
||||
end
|
||||
|
||||
return str
|
||||
end
|
||||
|
||||
#
|
||||
# Translate the author from the supplied string which may
|
||||
# have either just a name or also an email address
|
||||
#
|
||||
def from_s(str)
|
||||
|
||||
|
||||
# Supported formats:
|
||||
# known_name
|
||||
# user [at/@] host [dot/.] tld
|
||||
# Name <user [at/@] host [dot/.] tld>
|
||||
|
||||
|
||||
if ((m = str.match(/^\s*([^<]+)<([^>]+)>\s*$/)))
|
||||
self.name = m[1].sub(/<.*/, '')
|
||||
self.email = m[2].sub(/\s*\[at\]\s*/, '@').sub(/\s*\[dot\]\s*/, '.')
|
||||
else
|
||||
if (Known[str])
|
||||
self.email = Known[str]
|
||||
self.name = str
|
||||
else
|
||||
self.email = str.sub(/\s*\[at\]\s*/, '@').sub(/\s*\[dot\]\s*/, '.').gsub(/^<|>$/, '')
|
||||
m = self.email.match(/([^@]+)@/)
|
||||
self.name = m ? m[1] : nil
|
||||
if !(self.email and self.email.index('@'))
|
||||
self.name = self.email
|
||||
self.email = ''
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
self.name.strip! if self.name
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
#
|
||||
# Sets the name of the author and updates the email if it's a known author.
|
||||
#
|
||||
def name=(name)
|
||||
self.email = Known[name] if (Known[name])
|
||||
@name = name
|
||||
end
|
||||
|
||||
attr_accessor :email
|
||||
attr_reader :name
|
||||
# @!attribute [w] author
|
||||
attr_writer :author
|
||||
end
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
module Msf::Module::Compatibility
|
||||
#
|
||||
# Returns the hash that describes this module's compatibilities.
|
||||
#
|
||||
def compat
|
||||
module_info['Compat'] || {}
|
||||
end
|
||||
|
||||
#
|
||||
# Returns whether or not this module is compatible with the supplied
|
||||
# module.
|
||||
#
|
||||
def compatible?(mod)
|
||||
ch = nil
|
||||
|
||||
# Invalid module? Shoot, we can't compare that.
|
||||
return true if (mod == nil)
|
||||
|
||||
# Determine which hash to used based on the supplied module type
|
||||
if (mod.type == Msf::MODULE_ENCODER)
|
||||
ch = self.compat['Encoder']
|
||||
elsif (mod.type == Msf::MODULE_NOP)
|
||||
ch = self.compat['Nop']
|
||||
elsif (mod.type == Msf::MODULE_PAYLOAD)
|
||||
ch = self.compat['Payload']
|
||||
if self.respond_to?("target") and self.target and self.target['Payload'] and self.target['Payload']['Compat']
|
||||
ch = ch.merge(self.target['Payload']['Compat'])
|
||||
end
|
||||
else
|
||||
return true
|
||||
end
|
||||
|
||||
# Enumerate each compatibility item in our hash to find out
|
||||
# if we're compatible with this sucker.
|
||||
ch.each_pair do |k,v|
|
||||
|
||||
# Get the value of the current key from the module, such as
|
||||
# the ConnectionType for a stager (ws2ord, for instance).
|
||||
mval = mod.module_info[k]
|
||||
|
||||
# Reject a filled compat item on one side, but not the other
|
||||
if (v and not mval)
|
||||
dlog("Module #{mod.refname} is incompatible with #{self.refname} for #{k}: limiter was #{v}")
|
||||
return false
|
||||
end
|
||||
|
||||
# Track how many of our values matched the module
|
||||
mcnt = 0
|
||||
|
||||
# Values are whitespace separated
|
||||
sv = v.split(/\s+/)
|
||||
mv = mval.split(/\s+/)
|
||||
|
||||
sv.each do |x|
|
||||
|
||||
dlog("Checking compat [#{mod.refname} with #{self.refname}]: #{x} to #{mv.join(", ")}", 'core', LEV_3)
|
||||
|
||||
# Verify that any negate values are not matched
|
||||
if (x[0,1] == '-' and mv.include?(x[1, x.length-1]))
|
||||
dlog("Module #{mod.refname} is incompatible with #{self.refname} for #{k}: limiter was #{x}, value was #{mval}", 'core', LEV_1)
|
||||
return false
|
||||
end
|
||||
|
||||
mcnt += 1 if mv.include?(x)
|
||||
end
|
||||
|
||||
# No values matched, reject this module
|
||||
if (mcnt == 0)
|
||||
dlog("Module #{mod.refname} is incompatible with #{self.refname} for #{k}: limiter was #{v}, value was #{mval}", 'core', LEV_1)
|
||||
return false
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
dlog("Module #{mod.refname} is compatible with #{self.refname}", "core", LEV_1)
|
||||
|
||||
|
||||
# If we get here, we're compatible.
|
||||
return true
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
#
|
||||
# This method initializes the module's compatibility hashes by normalizing
|
||||
# them into one single hash. As it stands, modules can define
|
||||
# compatibility in their supplied info hash through:
|
||||
#
|
||||
# Compat:: direct compat definitions
|
||||
# PayloadCompat:: payload compatibilities
|
||||
# EncoderCompat:: encoder compatibilities
|
||||
# NopCompat:: nop compatibilities
|
||||
#
|
||||
# In the end, the module specific compatibilities are merged as sub-hashes
|
||||
# of the primary Compat hash key to make checks more uniform.
|
||||
#
|
||||
def init_compat
|
||||
c = module_info['Compat']
|
||||
|
||||
if (c == nil)
|
||||
c = module_info['Compat'] = Hash.new
|
||||
end
|
||||
|
||||
# Initialize the module sub compatibilities
|
||||
c['Payload'] = Hash.new if (c['Payload'] == nil)
|
||||
c['Encoder'] = Hash.new if (c['Encoder'] == nil)
|
||||
c['Nop'] = Hash.new if (c['Nop'] == nil)
|
||||
|
||||
# Update the compat-derived module specific compatibilities from
|
||||
# the specific ones to make a uniform view of compatibilities
|
||||
c['Payload'].update(module_info['PayloadCompat'] || {})
|
||||
c['Encoder'].update(module_info['EncoderCompat'] || {})
|
||||
c['Nop'].update(module_info['NopCompat'] || {})
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,41 @@
|
||||
module Msf::Module::DataStore
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
# @attribute [r] datastore
|
||||
# The module-specific datastore instance.
|
||||
#
|
||||
# @return [Hash{String => String}]
|
||||
attr_reader :datastore
|
||||
|
||||
#
|
||||
# Imports default options into the module's datastore, optionally clearing
|
||||
# all of the values currently set in the datastore.
|
||||
#
|
||||
def import_defaults(clear_datastore = true)
|
||||
# Clear the datastore if the caller asked us to
|
||||
self.datastore.clear if clear_datastore
|
||||
|
||||
self.datastore.import_options(self.options, 'self', true)
|
||||
|
||||
# If there are default options, import their values into the datastore
|
||||
if (module_info['DefaultOptions'])
|
||||
self.datastore.import_options_from_hash(module_info['DefaultOptions'], true, 'self')
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Overrides the class' own datastore with the one supplied. This is used
|
||||
# to allow modules to share datastores, such as a payload sharing an
|
||||
# exploit module's datastore.
|
||||
#
|
||||
def share_datastore(ds)
|
||||
self.datastore = ds
|
||||
self.datastore.import_options(self.options)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
attr_writer :datastore
|
||||
end
|
||||
@@ -0,0 +1,41 @@
|
||||
# Constants indicating the reason for an unsuccessful module attempt
|
||||
module Msf::Module::Failure
|
||||
# The exploit settings were incorrect
|
||||
BadConfig = 'bad-config'
|
||||
|
||||
# The network service disconnected us mid-attempt
|
||||
Disconnected = 'disconnected'
|
||||
|
||||
# The application replied indication we do not have access
|
||||
NoAccess = 'no-access'
|
||||
|
||||
# No confidence in success or failure
|
||||
None = 'none'
|
||||
|
||||
# The target is not compatible with this exploit or settings
|
||||
NoTarget = 'no-target'
|
||||
|
||||
# The application endpoint or specific service was not found
|
||||
NotFound = 'not-found'
|
||||
|
||||
# The application response indicated it was not vulnerable
|
||||
NotVulnerable = 'not-vulnerable'
|
||||
|
||||
# The payload was delivered but no session was opened (AV, network, etc)
|
||||
PayloadFailed = 'payload-failed'
|
||||
|
||||
# The exploit triggered some form of timeout
|
||||
TimeoutExpired = 'timeout-expired'
|
||||
|
||||
# The application replied in an unexpected fashion
|
||||
UnexpectedReply = 'unexpected-reply'
|
||||
|
||||
# No confidence in success or failure
|
||||
Unknown = 'unknown'
|
||||
|
||||
# The network service was unreachable (connection refused, etc)
|
||||
Unreachable = 'unreachable'
|
||||
|
||||
# The exploit was interrupted by the user
|
||||
UserInterrupt = 'user-interrupt'
|
||||
end
|
||||
@@ -0,0 +1,67 @@
|
||||
# @note {Msf::Module::ModuleInfo#name} is unrelated to {#fullname} and should instead be thought of as the title or
|
||||
# summary of the module.
|
||||
#
|
||||
# Names related to {#fullname}, such as {#fullname}, {#refname}, and {#shortname}.
|
||||
module Msf::Module::FullName
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
module ClassMethods
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
|
||||
# @attribute refname
|
||||
# The module's name that is assigned it it by the framework
|
||||
# or derived from the path that the module is loaded from.
|
||||
attr_accessor :refname
|
||||
|
||||
#
|
||||
# Class Methods
|
||||
#
|
||||
|
||||
def fullname
|
||||
type + '/' + refname
|
||||
end
|
||||
|
||||
def shortname
|
||||
refname.split('/').last
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# Returns the module's framework full reference name. This is the
|
||||
# short name that end-users work with (refname) plus the type
|
||||
# of module prepended. Ex:
|
||||
#
|
||||
# payloads/windows/shell/reverse_tcp
|
||||
#
|
||||
def fullname
|
||||
self.class.fullname
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's framework reference name. This is the
|
||||
# short name that end-users work with. Ex:
|
||||
#
|
||||
# windows/shell/reverse_tcp
|
||||
#
|
||||
def refname
|
||||
self.class.refname
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's framework short name. This is a
|
||||
# possibly conflicting name used for things like console
|
||||
# prompts.
|
||||
#
|
||||
# reverse_tcp
|
||||
#
|
||||
def shortname
|
||||
self.class.shortname
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,220 @@
|
||||
module Msf::Module::ModuleInfo
|
||||
#
|
||||
# CONSTANTS
|
||||
#
|
||||
|
||||
# The list of options that support merging in an information hash.
|
||||
UpdateableOptions = [ "Name", "Description", "Alias", "PayloadCompat" ]
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# Returns the module's alias, if it has one. Otherwise, the module's
|
||||
# name is returned.
|
||||
#
|
||||
def alias
|
||||
module_info['Alias']
|
||||
end
|
||||
|
||||
#
|
||||
# Return the module's description.
|
||||
#
|
||||
def description
|
||||
module_info['Description']
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the disclosure date, if known.
|
||||
#
|
||||
def disclosure_date
|
||||
date_str = Date.parse(module_info['DisclosureDate'].to_s) rescue nil
|
||||
end
|
||||
|
||||
#
|
||||
# Return the module's name from the module information hash.
|
||||
#
|
||||
def name
|
||||
module_info['Name']
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
# @!attribute module_info
|
||||
attr_accessor :module_info
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# Register options with a specific owning class.
|
||||
#
|
||||
def info_fixups
|
||||
# Each reference should be an array consisting of two elements
|
||||
refs = module_info['References']
|
||||
if(refs and not refs.empty?)
|
||||
refs.each_index do |i|
|
||||
if !(refs[i].respond_to?('[]') and refs[i].length == 2)
|
||||
refs[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
# Purge invalid references
|
||||
refs.delete(nil)
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Checks and merges the supplied key/value pair in the supplied hash.
|
||||
#
|
||||
def merge_check_key(info, name, val)
|
||||
if (self.respond_to?("merge_info_#{name.downcase}", true))
|
||||
eval("merge_info_#{name.downcase}(info, val)")
|
||||
else
|
||||
# If the info hash already has an entry for this name
|
||||
if (info[name])
|
||||
# If it's not an array, convert it to an array and merge the
|
||||
# two
|
||||
if (info[name].kind_of?(Array) == false)
|
||||
curr = info[name]
|
||||
info[name] = [ curr ]
|
||||
end
|
||||
|
||||
# If the value being merged is an array, add each one
|
||||
if (val.kind_of?(Array) == true)
|
||||
val.each { |v|
|
||||
if (info[name].include?(v) == false)
|
||||
info[name] << v
|
||||
end
|
||||
}
|
||||
# Otherwise just add the value
|
||||
elsif (info[name].include?(val) == false)
|
||||
info[name] << val
|
||||
end
|
||||
# Otherwise, just set the value equal if no current value
|
||||
# exists
|
||||
else
|
||||
info[name] = val
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Merges options in the info hash in a sane fashion, as some options
|
||||
# require special attention.
|
||||
#
|
||||
def merge_info(info, opts)
|
||||
opts.each_pair { |name, val|
|
||||
merge_check_key(info, name, val)
|
||||
}
|
||||
|
||||
info
|
||||
end
|
||||
|
||||
#
|
||||
# Merges advanced options.
|
||||
#
|
||||
def merge_info_advanced_options(info, val)
|
||||
merge_info_options(info, val, true, false)
|
||||
end
|
||||
|
||||
#
|
||||
# Merge aliases with an underscore delimiter.
|
||||
#
|
||||
def merge_info_alias(info, val)
|
||||
merge_info_string(info, 'Alias', val, '_')
|
||||
end
|
||||
|
||||
#
|
||||
# Merges the module description.
|
||||
#
|
||||
def merge_info_description(info, val)
|
||||
merge_info_string(info, 'Description', val, ". ", true)
|
||||
end
|
||||
|
||||
#
|
||||
# Merges advanced options.
|
||||
#
|
||||
def merge_info_evasion_options(info, val)
|
||||
merge_info_options(info, val, false, true)
|
||||
end
|
||||
|
||||
#
|
||||
# Merges the module name.
|
||||
#
|
||||
def merge_info_name(info, val)
|
||||
merge_info_string(info, 'Name', val, ', ', true)
|
||||
end
|
||||
|
||||
#
|
||||
# Merges options.
|
||||
#
|
||||
def merge_info_options(info, val, advanced = false, evasion = false)
|
||||
|
||||
key_name = ((advanced) ? 'Advanced' : (evasion) ? 'Evasion' : '') + 'Options'
|
||||
|
||||
new_cont = Msf::OptionContainer.new
|
||||
new_cont.add_options(val, advanced, evasion)
|
||||
cur_cont = Msf::OptionContainer.new
|
||||
cur_cont.add_options(info[key_name] || [], advanced, evasion)
|
||||
|
||||
new_cont.each_option { |name, option|
|
||||
next if (cur_cont.get(name))
|
||||
|
||||
info[key_name] = [] if (!info[key_name])
|
||||
info[key_name] << option
|
||||
}
|
||||
end
|
||||
|
||||
#
|
||||
# Merges a given key in the info hash with a delimiter.
|
||||
#
|
||||
def merge_info_string(info, key, val, delim = ', ', inverse = false)
|
||||
if (info[key])
|
||||
if (inverse == true)
|
||||
info[key] = info[key] + delim + val
|
||||
else
|
||||
info[key] = val + delim + info[key]
|
||||
end
|
||||
else
|
||||
info[key] = val
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Merge the module version.
|
||||
#
|
||||
def merge_info_version(info, val)
|
||||
merge_info_string(info, 'Version', val)
|
||||
end
|
||||
|
||||
#
|
||||
# Updates information in the supplied info hash and merges other
|
||||
# information. This method is used to override things like Name, Version,
|
||||
# and Description without losing the ability to merge architectures,
|
||||
# platforms, and options.
|
||||
#
|
||||
def update_info(info, opts)
|
||||
opts.each_pair { |name, val|
|
||||
# If the supplied option name is one of the ones that we should
|
||||
# override by default
|
||||
if (UpdateableOptions.include?(name) == true)
|
||||
# Only if the entry is currently nil do we use our value
|
||||
if (info[name] == nil)
|
||||
info[name] = val
|
||||
end
|
||||
# Otherwise, perform the merge operation like normal
|
||||
else
|
||||
merge_check_key(info, name, val)
|
||||
end
|
||||
}
|
||||
|
||||
return info
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,28 @@
|
||||
module Msf::Module::ModuleStore
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
#
|
||||
# A generic hash used for passing additional information to modules
|
||||
#
|
||||
attr_accessor :module_store
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# Read a value from the module store
|
||||
#
|
||||
def [](k)
|
||||
self.module_store[k]
|
||||
end
|
||||
|
||||
#
|
||||
# Store a value into the module
|
||||
#
|
||||
def []=(k,v)
|
||||
self.module_store[k] = v
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,32 @@
|
||||
module Msf::Module::Network
|
||||
#
|
||||
# The default communication subsystem for this module. We may need to move
|
||||
# this somewhere else.
|
||||
#
|
||||
def comm
|
||||
Rex::Socket::Comm::Local
|
||||
end
|
||||
|
||||
#
|
||||
# Indicates whether the module supports IPv6. This is true by default,
|
||||
# but certain modules require additional work to be compatible or are
|
||||
# hardcoded in terms of application support and should be skipped.
|
||||
#
|
||||
def support_ipv6?
|
||||
true
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the address of the last target host (rough estimate)
|
||||
#
|
||||
def target_host
|
||||
self.respond_to?('rhost') ? rhost : self.datastore['RHOST']
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the address of the last target port (rough estimate)
|
||||
#
|
||||
def target_port
|
||||
self.respond_to?('rport') ? rport : self.datastore['RPORT']
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,65 @@
|
||||
# Register, deregister, and validate {#options}.
|
||||
module Msf::Module::Options
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
# @attribute [r] options
|
||||
# The module-specific options.
|
||||
attr_reader :options
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# This method ensures that the options associated with this module all
|
||||
# have valid values according to each required option in the option
|
||||
# container.
|
||||
#
|
||||
def validate
|
||||
self.options.validate(self.datastore)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
#
|
||||
# Removes the supplied options from the module's option container
|
||||
# and data store.
|
||||
#
|
||||
def deregister_options(*names)
|
||||
names.each { |name|
|
||||
self.options.remove_option(name)
|
||||
self.datastore.delete(name)
|
||||
}
|
||||
end
|
||||
|
||||
attr_writer :options
|
||||
|
||||
#
|
||||
# Register advanced options with a specific owning class.
|
||||
#
|
||||
def register_advanced_options(options, owner = self.class)
|
||||
self.options.add_advanced_options(options, owner)
|
||||
self.datastore.import_options(self.options, 'self', true)
|
||||
import_defaults(false)
|
||||
end
|
||||
|
||||
#
|
||||
# Register evasion options with a specific owning class.
|
||||
#
|
||||
def register_evasion_options(options, owner = self.class)
|
||||
self.options.add_evasion_options(options, owner)
|
||||
self.datastore.import_options(self.options, 'self', true)
|
||||
import_defaults(false)
|
||||
end
|
||||
|
||||
#
|
||||
# Register options with a specific owning class.
|
||||
#
|
||||
def register_options(options, owner = self.class)
|
||||
self.options.add_options(options, owner)
|
||||
self.datastore.import_options(self.options, 'self', true)
|
||||
import_defaults(false)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,29 @@
|
||||
module Msf::Module::Privileged
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
# @!attribute [r] privileged
|
||||
# Whether or not this module requires privileged access.
|
||||
attr_reader :privileged
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# Returns whether or not the module requires or grants high privileges.
|
||||
#
|
||||
def privileged?
|
||||
privileged == true
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
# @!attribute [w] privileged
|
||||
attr_writer :priveli
|
||||
end
|
||||
@@ -0,0 +1,51 @@
|
||||
module Msf::Module::Ranking
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
module ClassMethods
|
||||
#
|
||||
# Returns this module's ranking.
|
||||
#
|
||||
def rank
|
||||
(const_defined?('Rank')) ? const_get('Rank') : Msf::NormalRanking
|
||||
end
|
||||
|
||||
#
|
||||
# Returns this module's ranking as a string for display.
|
||||
#
|
||||
def rank_to_h
|
||||
rank_to_s.gsub('Rank', '').downcase
|
||||
end
|
||||
|
||||
#
|
||||
# Returns this module's ranking as a string representation.
|
||||
#
|
||||
def rank_to_s
|
||||
Msf::RankingName[rank]
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# Returns the module's rank.
|
||||
#
|
||||
def rank
|
||||
self.class.rank
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's rank in display format.
|
||||
#
|
||||
def rank_to_h
|
||||
self.class.rank_to_h
|
||||
end
|
||||
|
||||
#
|
||||
# Returns the module's rank in string format.
|
||||
#
|
||||
def rank_to_s
|
||||
self.class.rank_to_s
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,109 @@
|
||||
module Msf::Module::Search
|
||||
#
|
||||
# This provides a standard set of search filters for every module.
|
||||
# The search terms are in the form of:
|
||||
# {
|
||||
# "text" => [ [ "include_term1", "include_term2", ...], [ "exclude_term1", "exclude_term2"], ... ],
|
||||
# "cve" => [ [ "include_term1", "include_term2", ...], [ "exclude_term1", "exclude_term2"], ... ]
|
||||
# }
|
||||
#
|
||||
# Returns true on no match, false on match
|
||||
#
|
||||
def search_filter(search_string)
|
||||
return false if not search_string
|
||||
|
||||
search_string += " "
|
||||
|
||||
# Split search terms by space, but allow quoted strings
|
||||
terms = search_string.split(/\"/).collect{|t| t.strip==t ? t : t.split(' ')}.flatten
|
||||
terms.delete('')
|
||||
|
||||
# All terms are either included or excluded
|
||||
res = {}
|
||||
|
||||
terms.each do |t|
|
||||
f,v = t.split(":", 2)
|
||||
if not v
|
||||
v = f
|
||||
f = 'text'
|
||||
end
|
||||
next if v.length == 0
|
||||
f.downcase!
|
||||
v.downcase!
|
||||
res[f] ||=[ [], [] ]
|
||||
if v[0,1] == "-"
|
||||
next if v.length == 1
|
||||
res[f][1] << v[1,v.length-1]
|
||||
else
|
||||
res[f][0] << v
|
||||
end
|
||||
end
|
||||
|
||||
k = res
|
||||
|
||||
refs = self.references.map{|x| [x.ctx_id, x.ctx_val].join("-") }
|
||||
is_server = (self.respond_to?(:stance) and self.stance == "aggressive")
|
||||
is_client = (self.respond_to?(:stance) and self.stance == "passive")
|
||||
|
||||
[0,1].each do |mode|
|
||||
match = false
|
||||
k.keys.each do |t|
|
||||
next if k[t][mode].length == 0
|
||||
|
||||
k[t][mode].each do |w|
|
||||
# Reset the match flag for each keyword for inclusive search
|
||||
match = false if mode == 0
|
||||
|
||||
# Convert into a case-insensitive regex
|
||||
r = Regexp.new(Regexp.escape(w), true)
|
||||
|
||||
case t
|
||||
when 'text'
|
||||
terms = [self.name, self.fullname, self.description] + refs + self.author.map{|x| x.to_s}
|
||||
if self.respond_to?(:targets) and self.targets
|
||||
terms = terms + self.targets.map{|x| x.name}
|
||||
end
|
||||
match = [t,w] if terms.any? { |x| x =~ r }
|
||||
when 'name'
|
||||
match = [t,w] if self.name =~ r
|
||||
when 'path'
|
||||
match = [t,w] if self.fullname =~ r
|
||||
when 'author'
|
||||
match = [t,w] if self.author.map{|x| x.to_s}.any? { |a| a =~ r }
|
||||
when 'os', 'platform'
|
||||
match = [t,w] if self.platform_to_s =~ r or self.arch_to_s =~ r
|
||||
if not match and self.respond_to?(:targets) and self.targets
|
||||
match = [t,w] if self.targets.map{|x| x.name}.any? { |t| t =~ r }
|
||||
end
|
||||
when 'port'
|
||||
match = [t,w] if self.datastore['RPORT'].to_s =~ r
|
||||
when 'type'
|
||||
match = [t,w] if Msf::MODULE_TYPES.any? { |modt| w == modt and self.type == modt }
|
||||
when 'app'
|
||||
match = [t,w] if (w == "server" and is_server)
|
||||
match = [t,w] if (w == "client" and is_client)
|
||||
when 'cve'
|
||||
match = [t,w] if refs.any? { |ref| ref =~ /^cve\-/i and ref =~ r }
|
||||
when 'bid'
|
||||
match = [t,w] if refs.any? { |ref| ref =~ /^bid\-/i and ref =~ r }
|
||||
when 'osvdb'
|
||||
match = [t,w] if refs.any? { |ref| ref =~ /^osvdb\-/i and ref =~ r }
|
||||
when 'edb'
|
||||
match = [t,w] if refs.any? { |ref| ref =~ /^edb\-/i and ref =~ r }
|
||||
end
|
||||
break if match
|
||||
end
|
||||
# Filter this module if no matches for a given keyword type
|
||||
if mode == 0 and not match
|
||||
return true
|
||||
end
|
||||
end
|
||||
# Filter this module if we matched an exclusion keyword (-value)
|
||||
if mode == 1 and match
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,65 @@
|
||||
module Msf::Module::Type
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
module ClassMethods
|
||||
#
|
||||
# Class method to figure out what type of module this is
|
||||
#
|
||||
def type
|
||||
raise NotImplementedError
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
#
|
||||
# Returns true if this module is an auxiliary module.
|
||||
#
|
||||
def auxiliary?
|
||||
(type == Msf::MODULE_AUX)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is an encoder module.
|
||||
#
|
||||
def encoder?
|
||||
(type == Msf::MODULE_ENCODER)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is an exploit module.
|
||||
#
|
||||
def exploit?
|
||||
(type == Msf::MODULE_EXPLOIT)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is a nop module.
|
||||
#
|
||||
def nop?
|
||||
(type == Msf::MODULE_NOP)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is a payload module.
|
||||
#
|
||||
def payload?
|
||||
(type == Msf::MODULE_PAYLOAD)
|
||||
end
|
||||
|
||||
#
|
||||
# Returns true if this module is an post-exploitation module.
|
||||
#
|
||||
def post?
|
||||
(type == Msf::MODULE_POST)
|
||||
end
|
||||
|
||||
#
|
||||
# Return the module's abstract type.
|
||||
#
|
||||
def type
|
||||
raise NotImplementedError
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,16 @@
|
||||
module Msf::Module::UI
|
||||
autoload :Line, 'msf/core/module/ui/line'
|
||||
autoload :Message, 'msf/core/module/ui/message'
|
||||
|
||||
# Modules can subscribe to a user-interface, and as such they include the
|
||||
# UI subscriber module. This provides methods like print, print_line, etc.
|
||||
# User interfaces are designed to be medium independent, and as such the
|
||||
# user interface subscribes are designed to provide a flexible way of
|
||||
# interacting with the user, n stuff.
|
||||
include Rex::Ui::Subscriber
|
||||
|
||||
# Overwrite the {Rex::UI::Subscriber#print_line} to do custom prefixes
|
||||
include Msf::Module::UI::Line
|
||||
# Overwrite the {Rex::Ui::Subscriber} print_(status|error|good) to do time stamps
|
||||
include Msf::Module::UI::Message
|
||||
end
|
||||
@@ -0,0 +1,13 @@
|
||||
module Msf::Module::UI::Line
|
||||
autoload :Verbose, 'msf/core/module/ui/line/verbose'
|
||||
|
||||
include Msf::Module::UI::Line::Verbose
|
||||
|
||||
def print_line(msg='')
|
||||
super(print_line_prefix + msg)
|
||||
end
|
||||
|
||||
def print_line_prefix
|
||||
datastore['CustomPrintPrefix'] || framework.datastore['CustomPrintPrefix'] || ''
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,6 @@
|
||||
module Msf::Module::UI::Line::Verbose
|
||||
# Verbose version of #print_line
|
||||
def vprint_line(msg)
|
||||
print_line(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,40 @@
|
||||
# Methods for print messages with status indicators
|
||||
module Msf::Module::UI::Message
|
||||
autoload :Verbose, 'msf/core/module/ui/message/verbose'
|
||||
|
||||
include Msf::Module::UI::Message::Verbose
|
||||
|
||||
def print_error(msg='')
|
||||
super(print_prefix + msg)
|
||||
end
|
||||
|
||||
def print_good(msg='')
|
||||
super(print_prefix + msg)
|
||||
end
|
||||
|
||||
def print_prefix
|
||||
ret = ''
|
||||
if (datastore['TimestampOutput'] =~ /^(t|y|1)/i) || (
|
||||
framework && framework.datastore['TimestampOutput'] =~ /^(t|y|1)/i
|
||||
)
|
||||
prefix = "[#{Time.now.strftime("%Y.%m.%d-%H:%M:%S")}] "
|
||||
|
||||
xn ||= datastore['ExploitNumber']
|
||||
xn ||= framework.datastore['ExploitNumber']
|
||||
if xn.is_a?(Fixnum)
|
||||
prefix << "[%04d] " % xn
|
||||
end
|
||||
|
||||
ret = prefix
|
||||
end
|
||||
ret
|
||||
end
|
||||
|
||||
def print_status(msg='')
|
||||
super(print_prefix + msg)
|
||||
end
|
||||
|
||||
def print_warning(msg='')
|
||||
super(print_prefix + msg)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,26 @@
|
||||
module Msf::Module::UI::Message::Verbose
|
||||
# Verbose version of #print_debug
|
||||
def vprint_debug(msg)
|
||||
print_debug(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
|
||||
# Verbose version of #print_error
|
||||
def vprint_error(msg)
|
||||
print_error(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
|
||||
# Verbose version of #print_good
|
||||
def vprint_good(msg)
|
||||
print_good(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
|
||||
# Verbose version of #print_status
|
||||
def vprint_status(msg)
|
||||
print_status(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
|
||||
# Verbose version of #print_warning
|
||||
def vprint_warning(msg)
|
||||
print_warning(msg) if datastore['VERBOSE'] || framework.datastore['VERBOSE']
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,27 @@
|
||||
module Msf::Module::UUID
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
# @!attribute [r] uuid
|
||||
# A unique identifier for this module instance
|
||||
attr_reader :uuid
|
||||
|
||||
protected
|
||||
|
||||
#
|
||||
# Attributes
|
||||
#
|
||||
|
||||
# @!attribute [w] uuid
|
||||
attr_writer :uuid
|
||||
|
||||
|
||||
#
|
||||
# Instance Methods
|
||||
#
|
||||
|
||||
def generate_uuid
|
||||
self.uuid = Rex::Text.rand_text_alphanumeric(8).downcase
|
||||
end
|
||||
end
|
||||
+2
-2
@@ -14,14 +14,14 @@ class Nop < Msf::Module
|
||||
# Returns MODULE_NOP to indicate that this is a NOP module.
|
||||
#
|
||||
def self.type
|
||||
return MODULE_NOP
|
||||
return Msf::MODULE_NOP
|
||||
end
|
||||
|
||||
#
|
||||
# Returns MODULE_NOP to indicate that this is a NOP module.
|
||||
#
|
||||
def type
|
||||
return MODULE_NOP
|
||||
return Msf::MODULE_NOP
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
@@ -102,14 +102,14 @@ class Payload < Msf::Module
|
||||
# Returns MODULE_PAYLOAD to indicate that this is a payload module.
|
||||
#
|
||||
def self.type
|
||||
return MODULE_PAYLOAD
|
||||
return Msf::MODULE_PAYLOAD
|
||||
end
|
||||
|
||||
#
|
||||
# Returns MODULE_PAYLOAD to indicate that this is a payload module.
|
||||
#
|
||||
def type
|
||||
return MODULE_PAYLOAD
|
||||
return Msf::MODULE_PAYLOAD
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
@@ -60,6 +60,10 @@ module Msf::Payload::Dalvik
|
||||
# with a key whose validity expires before that date.
|
||||
# """
|
||||
cert.not_after = cert.not_before + 3600*24*365*20 # 20 years
|
||||
|
||||
# If this line is left out, signature verification fails on OSX.
|
||||
cert.sign(key, OpenSSL::Digest::SHA1.new)
|
||||
|
||||
return cert, key
|
||||
end
|
||||
end
|
||||
|
||||
@@ -308,12 +308,14 @@ module Msf
|
||||
if encoder.present?
|
||||
# Allow comma seperated list of encoders so users can choose several
|
||||
encoder.split(',').each do |chosen_encoder|
|
||||
encoders << framework.encoders.create(chosen_encoder)
|
||||
e = framework.encoders.create(chosen_encoder)
|
||||
encoders << e if e
|
||||
end
|
||||
encoders.sort_by { |my_encoder| my_encoder.rank }.reverse
|
||||
elsif badchars.present?
|
||||
framework.encoders.each_module_ranked('Arch' => [arch], 'Platform' => platform_list) do |name, mod|
|
||||
encoders << framework.encoders.create(name)
|
||||
e = framework.encoders.create(name)
|
||||
encoders << e if e
|
||||
end
|
||||
encoders.sort_by { |my_encoder| my_encoder.rank }.reverse
|
||||
else
|
||||
|
||||
@@ -21,7 +21,7 @@ class PayloadSet < ModuleSet
|
||||
# set class that has custom handling for payloads.
|
||||
#
|
||||
def initialize
|
||||
super(MODULE_PAYLOAD)
|
||||
super(Msf::MODULE_PAYLOAD)
|
||||
|
||||
# A hash of each of the payload types that holds an array
|
||||
# for all of the associated modules
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Msf::Platform = Msf::Module::Platform
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user