@@ -22,6 +22,16 @@ permissions:
22
22
statuses : none
23
23
24
24
on :
25
+ workflow_dispatch :
26
+ inputs :
27
+ metasploitPayloadsCommit :
28
+ description : ' metasploit-payloads branch would like to test'
29
+ required : true
30
+ default : ' master'
31
+ mettleCommit :
32
+ description : ' mettle branch you would like to test'
33
+ required : true
34
+ default : ' master'
25
35
push :
26
36
branches-ignore :
27
37
- gh-pages
@@ -81,10 +91,12 @@ jobs:
81
91
82
92
runs-on : ${{ matrix.os }}
83
93
84
- timeout-minutes : 25
94
+ timeout-minutes : 50
85
95
86
96
env :
87
97
RAILS_ENV : test
98
+ metasploitPayloadsCommit : ${{ github.event.inputs.metasploitPayloadsCommit || 'master' }}
99
+ mettleCommit : ${{ github.event.inputs.mettleCommit|| 'master' }}
88
100
HOST_RUNNER_IMAGE : ${{ matrix.os }}
89
101
METERPRETER : ${{ matrix.meterpreter.name }}
90
102
METERPRETER_RUNTIME_VERSION : ${{ matrix.meterpreter.runtime_version }}
@@ -129,8 +141,58 @@ jobs:
129
141
dir %WINDIR%
130
142
type %WINDIR%\\system32\\drivers\\etc\\hosts
131
143
132
- - name : Checkout code
144
+ # The job checkout structure is:
145
+ # .
146
+ # ├── metasploit-framework
147
+ # └── metasploit-payloads (Only if the "payload-testing-branch" GitHub label is applied)
148
+ # └── mettle (Only if the "payload-testing-mettle-branch" GitHub label is applied)
149
+
150
+ - name : Install Docker - macOS
151
+ if : ${{ ( matrix.meterpreter.name == 'java') && (runner.os == 'macos' ) && (contains(github.event.issue.labels.*.name, 'payload-testing-mettle-branch')) }}
152
+ run : |
153
+ brew install docker
154
+ colima delete
155
+ colima start --arch x86_64
156
+
157
+ - name : Checkout mettle
158
+ if : ${{ matrix.meterpreter.name == 'mettle' && (contains(github.event.issue.labels.*.name, 'payload-testing-mettle-branch')) }}
159
+ uses : actions/checkout@v4
160
+ with :
161
+ repository : rapid7/mettle
162
+ path : mettle
163
+ ref : ${{ env.mettleCommit }}
164
+
165
+ - name : Get mettle version
166
+ if : ${{ matrix.meterpreter.name == 'mettle' && (contains(github.event.issue.labels.*.name, 'payload-testing-mettle-branch')) }}
167
+ run : |
168
+ echo "METTLE_VERSION=$(grep -oh '[0-9].[0-9].[0-9]*' lib/metasploit_payloads/mettle/version.rb)" | tee -a $GITHUB_ENV
169
+ working-directory : mettle
170
+
171
+ - name : Prerequisite mettle gem setup
172
+ if : ${{ matrix.meterpreter.name == 'mettle' && (contains(github.event.issue.labels.*.name, 'payload-testing-mettle-branch')) }}
173
+ run : |
174
+ set -x
175
+ ruby -pi.bak -e "gsub(/${{ env.METTLE_VERSION }}/, '${{ env.METTLE_VERSION }}-dev')" lib/metasploit_payloads/mettle/version.rb
176
+ working-directory : mettle
177
+
178
+ - name : Compile mettle payloads
179
+ if : ${{ matrix.meterpreter.name == 'mettle' && runner.os != 'macos' && (contains(github.event.issue.labels.*.name, 'payload-testing-mettle-branch')) }}
180
+ run : |
181
+ docker run --rm=true --tty --volume=$(pwd):/mettle --workdir=/mettle rapid7/build:mettle rake mettle:build mettle:check
182
+ rake build
183
+ working-directory : mettle
184
+
185
+ - name : Compile mettle payloads - macOS
186
+ if : ${{ matrix.meterpreter.name == 'mettle' && runner.os == 'macos' && (contains(github.event.issue.labels.*.name, 'payload-testing-mettle-branch')) }}
187
+ run : |
188
+ make TARGET=x86_64-apple-darwin
189
+ rake build
190
+ working-directory : mettle
191
+
192
+ - name : Checkout metasploit-framework code
133
193
uses : actions/checkout@v4
194
+ with :
195
+ path : metasploit-framework
134
196
135
197
- name : Setup Ruby
136
198
env :
@@ -140,11 +202,66 @@ jobs:
140
202
ruby-version : ${{ matrix.ruby }}
141
203
bundler-cache : true
142
204
cache-version : 4
205
+ working-directory : metasploit-framework
143
206
# Github actions with Ruby requires Bundler 2.2.18+
144
207
# https://github.com/ruby/setup-ruby/tree/d2b39ad0b52eca07d23f3aa14fdf2a3fcc1f411c#windows
145
208
bundler : 2.2.33
146
209
147
- - name : acceptance
210
+ - name : Move mettle gem into framework
211
+ if : ${{ matrix.meterpreter.name == 'mettle' && (contains(github.event.issue.labels.*.name, 'mettle-testing-branch')) }}
212
+ run : |
213
+ cp ./mettle/pkg/metasploit_payloads-mettle-${{ env.METTLE_VERSION }}.pre.dev.gem ./metasploit-framework
214
+ working-directory : metasploit-framework
215
+
216
+ - name : Install mettle gem
217
+ if : ${{ matrix.meterpreter.name == 'mettle' && (contains(github.event.issue.labels.*.name, 'payload-testing-mettle-branch')) }}
218
+ run : |
219
+ set -x
220
+ bundle exec gem install metasploit_payloads-mettle-${{ env.METTLE_VERSION }}.pre.dev.gem
221
+ ruby -pi.bak -e "gsub(/'metasploit_payloads-mettle', '${{ env.METTLE_VERSION }}'/, '\'metasploit_payloads-mettle\', \'${{ env.METTLE_VERSION }}.pre.dev\'')" metasploit-framework.gemspec
222
+ bundle config unset deployment
223
+ bundle update metasploit_payloads-mettle
224
+ bundle install
225
+ working-directory : metasploit-framework
226
+
227
+ - name : Checkout metasploit-payloads
228
+ if : contains(github.event.issue.labels.*.name, 'payload-testing-branch')
229
+ uses : actions/checkout@v4
230
+ with :
231
+ repository : rapid7/metasploit-payloads
232
+ path : metasploit-payloads
233
+ ref : ${{ env.metasploitPayloadsCommit }}
234
+
235
+ - name : Build Java and Android payloads
236
+ if : ${{ (matrix.meterpreter.name == 'java') && (runner.os != 'Windows') && (contains(github.event.issue.labels.*.name, 'payload-testing-branch')) }}
237
+ run : |
238
+ docker run --rm -w "$(pwd)" -v "$(pwd):$(pwd)" rapid7/msf-ubuntu-x64-meterpreter:latest /bin/bash -c "cd metasploit-payloads/java && make clean && make android && mvn -P deploy package"
239
+
240
+ - name : Build Windows payloads via Visual Studio 2019 Build (Windows)
241
+ shell : cmd
242
+ if : ${{ (runner.os == 'Windows') && (matrix.os == 'windows-2019') && (contains(github.event.issue.labels.*.name, 'payload-testing-branch')) }}
243
+ run : |
244
+ cd c/meterpreter
245
+ git submodule init && git submodule update
246
+ "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" && make.bat
247
+ working-directory : metasploit-payloads
248
+
249
+ - name : Build Windows payloads via Visual Studio 2022 Build (Windows)
250
+ shell : cmd
251
+ if : ${{ (runner.os == 'Windows') && (matrix.os == 'windows-2022') && (contains(github.event.issue.labels.*.name, 'payload-testing-branch'))}}
252
+ run : |
253
+ cd c/meterpreter
254
+ git submodule init && git submodule update
255
+ make.bat
256
+ working-directory : metasploit-payloads
257
+
258
+ - name : Build PHP, Python and Windows payloads
259
+ if : ${{ ((matrix.meterpreter.name == 'php') || (matrix.meterpreter.name == 'python') || (runner.os == 'Windows')) && (contains(github.event.issue.labels.*.name, 'payload-testing-branch'))}}
260
+ run : |
261
+ make install-php install-python install-windows
262
+ working-directory : metasploit-payloads
263
+
264
+ - name : Acceptance
148
265
env :
149
266
SPEC_HELPER_LOAD_METASPLOIT : false
150
267
SPEC_OPTS : " --tag acceptance --require acceptance_spec_helper.rb --color --format documentation --format AllureRspec::RSpecFormatter"
@@ -157,14 +274,15 @@ jobs:
157
274
# Additionally - flakey tests should be fixed or marked as flakey instead of silently retried
158
275
run : |
159
276
bundle exec rspec spec/acceptance/meterpreter_spec.rb
277
+ working-directory : metasploit-framework
160
278
161
279
- name : Archive results
162
280
if : always()
163
281
uses : actions/upload-artifact@v4
164
282
with :
165
283
# Provide a unique artifact for each matrix os, otherwise race conditions can lead to corrupt zips
166
284
name : raw-data-${{ matrix.meterpreter.name }}-${{ matrix.meterpreter.runtime_version }}-${{ matrix.os }}
167
- path : tmp/allure-raw-data
285
+ path : metasploit-framework/ tmp/allure-raw-data
168
286
169
287
# Generate a final report from the previous test results
170
288
report :
0 commit comments