58 lines
1.9 KiB
Ruby
58 lines
1.9 KiB
Ruby
# -*- coding: binary -*-
|
|
require 'msf/core'
|
|
|
|
###
|
|
# This class is here to implement advanced features for mainframe based
|
|
# payloads. Mainframe payloads are expected to include this module if
|
|
# they want to support these features.
|
|
###
|
|
module Msf::Payload::Mainframe
|
|
def initialize(info = {})
|
|
super(info)
|
|
end
|
|
|
|
##
|
|
# Returns a list of compatible encoders based on mainframe architecture
|
|
# most will not work because of the different architecture
|
|
# an XOR-based encoder will be defined soon
|
|
##
|
|
def compatible_encoders
|
|
encoders2 = ['/generic\/none/', 'none']
|
|
encoders2
|
|
end
|
|
|
|
###
|
|
# This method is here to implement advanced features for cmd:jcl based
|
|
# payloads. Common to all are the JCL Job Card, and its options which
|
|
# are defined here. It is optional for other mainframe payloads.
|
|
###
|
|
def jcl_jobcard
|
|
# format paramaters with basic constraints
|
|
# see http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/
|
|
# com.ibm.zos.v2r1.ieab600/iea3b6_Parameter_field8.htm
|
|
#
|
|
jobname = format('%1.8s', datastore['JOBNAME']).strip.upcase
|
|
actnum = format('%1.60s', datastore['ACTNUM']).strip.upcase
|
|
pgmname = format('%1.20s', datastore['PGMNAME']).strip
|
|
jclass = format('%1.1s', datastore['JCLASS']).strip.upcase
|
|
notify = format('%1.8s', datastore['NOTIFY']).strip.upcase
|
|
notify = if !notify.empty? && datastore['NTFYUSR']
|
|
"// NOTIFY=#{notify}, \n"
|
|
else
|
|
""
|
|
end
|
|
msgclass = format('%1.1s', datastore['MSGCLASS']).strip.upcase
|
|
msglevel = format('%5.5s', datastore['MSGLEVEL']).strip
|
|
|
|
# build payload
|
|
"//#{jobname} JOB " \
|
|
"(#{actnum}),\n" \
|
|
"// '#{pgmname}',\n" \
|
|
"// CLASS=#{jclass},\n" \
|
|
"#{notify}" \
|
|
"// MSGCLASS=#{msgclass},\n" \
|
|
"// MSGLEVEL=#{msglevel},\n" \
|
|
"// REGION=0M \n"
|
|
end
|
|
end
|