From 5b30355b885e6d41ffce4db3a8297fab6f2cb1e5 Mon Sep 17 00:00:00 2001 From: ts Date: Thu, 11 Oct 2018 12:47:08 +0100 Subject: [PATCH] encoder/generator long args via stdin WIP --- lib/objects/local_string_encoder.rb | 12 +++ lib/objects/local_string_generator.rb | 10 ++ lib/objects/system.rb | 19 ++-- lib/schemas/encoder_metadata_schema.xsd | 8 ++ lib/schemas/scenario_schema.xsd | 1 + modules/encoders/bases/base32/base32.pp | 0 .../bases/base32/manifests/.no_puppet | 0 .../bases/base32/secgen_local/local.rb | 22 ----- .../encoders/bases/base32/secgen_metadata.xml | 24 ----- .../cipher/braille/secgen_local/local.rb | 1 + .../compression/huffman/secgen_metadata.xml | 4 +- .../account/secgen_metadata.xml | 12 +-- scenarios/ctf/encoding_challenges.xml | 94 +++++++++++++++++++ 13 files changed, 147 insertions(+), 60 deletions(-) delete mode 100644 modules/encoders/bases/base32/base32.pp delete mode 100644 modules/encoders/bases/base32/manifests/.no_puppet delete mode 100644 modules/encoders/bases/base32/secgen_local/local.rb delete mode 100644 modules/encoders/bases/base32/secgen_metadata.xml create mode 100644 scenarios/ctf/encoding_challenges.xml diff --git a/lib/objects/local_string_encoder.rb b/lib/objects/local_string_encoder.rb index ed942e643..26a623610 100644 --- a/lib/objects/local_string_encoder.rb +++ b/lib/objects/local_string_encoder.rb @@ -40,6 +40,18 @@ class StringEncoder def read_arguments # Get command line arguments + begin + args_array = [] + ARGF.each do |arg| + arg.strip.split(' ').each do |split| + args_array << split + end + end + ARGV.unshift(*args_array) + rescue + # Do nothing... + end + opts = get_options # process option arguments diff --git a/lib/objects/local_string_generator.rb b/lib/objects/local_string_generator.rb index 554299ef9..e1312a4b8 100644 --- a/lib/objects/local_string_generator.rb +++ b/lib/objects/local_string_generator.rb @@ -30,6 +30,16 @@ class StringGenerator def read_arguments # Get command line arguments + begin + args_array = [] + ARGF.each_line do |arg| + args_array << arg.strip + end + ARGV.unshift(*args_array) + rescue + # Do nothing... + end + opts = get_options # process option arguments diff --git a/lib/objects/system.rb b/lib/objects/system.rb index e08dcdf2d..61f254be3 100644 --- a/lib/objects/system.rb +++ b/lib/objects/system.rb @@ -306,22 +306,29 @@ class System if selected.local_calc_file Print.verbose 'Module includes local calculation of output. Processing...' # build arguments - args_string = '--b64 ' # Sets the flag for decoding base64 + args_string = "--b64 " # Sets the flag for decoding base64 selected.received_inputs.each do |input_key, input_values| puts input_values.inspect input_values.each do |input_element| if input_key == '' Print.warn "Warning: output values not directed to module input" else - args_string += "'--#{input_key}=#{Base64.strict_encode64(input_element)}' " + args_string += "--#{input_key}=#{Base64.strict_encode64(input_element)} " end end end # execute calculation script and format output to an array of Base64 strings - command = "ruby #{selected.local_calc_file} #{args_string}" - Print.verbose "Running: #{command}" - outputs = `#{command}`.chomp - unless $?.success? + Print.verbose "Running: ruby #{selected.local_calc_file} #{args_string[0..200]} ..." + $stdout.sync = true + $stderr.sync = true + stdout, stderr, status = Open3.capture3("ruby #{selected.local_calc_file}", :stdin_data => args_string) + puts stderr + outputs = stdout.chomp + + # command = "ruby #{selected.local_calc_file} #{args_string}" + # Print.verbose "Running: #{command}" + # outputs = `#{command}`.chomp + unless status Print.err "Module failed to run (#{command})" # TODO: this works, but subsequent attempts at resolving the scenario always fail ("Error can't add no data...") raise 'failed' diff --git a/lib/schemas/encoder_metadata_schema.xsd b/lib/schemas/encoder_metadata_schema.xsd index 4bcaa06ec..e9acdb4d7 100644 --- a/lib/schemas/encoder_metadata_schema.xsd +++ b/lib/schemas/encoder_metadata_schema.xsd @@ -11,6 +11,13 @@ + + + + + + + @@ -32,6 +39,7 @@ + diff --git a/lib/schemas/scenario_schema.xsd b/lib/schemas/scenario_schema.xsd index 528cdc50d..e1038d354 100644 --- a/lib/schemas/scenario_schema.xsd +++ b/lib/schemas/scenario_schema.xsd @@ -125,6 +125,7 @@ + diff --git a/modules/encoders/bases/base32/base32.pp b/modules/encoders/bases/base32/base32.pp deleted file mode 100644 index e69de29bb..000000000 diff --git a/modules/encoders/bases/base32/manifests/.no_puppet b/modules/encoders/bases/base32/manifests/.no_puppet deleted file mode 100644 index e69de29bb..000000000 diff --git a/modules/encoders/bases/base32/secgen_local/local.rb b/modules/encoders/bases/base32/secgen_local/local.rb deleted file mode 100644 index ee0679e2c..000000000 --- a/modules/encoders/bases/base32/secgen_local/local.rb +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/ruby -require 'bases' -require_relative '../../../../../lib/objects/local_string_encoder.rb' -class BASE32Encoder < StringEncoder - def initialize - super - self.module_name = 'BASE32 Encoder' - self.strings_to_encode = ['test'] - end - - def encode(str) - byte_array = str.bytes - byte_array.each { |byte| - Bases.val(byte).in_hex.to_base(64) - } - test = Bases.val(binary).in_base(10).to_base(64) - - test - end -end - -BASE32Encoder.new.run diff --git a/modules/encoders/bases/base32/secgen_metadata.xml b/modules/encoders/bases/base32/secgen_metadata.xml deleted file mode 100644 index 7e86adb73..000000000 --- a/modules/encoders/bases/base32/secgen_metadata.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - BASE64 Encoder - Z. Cliffe Schreuders - MIT - Converts to BASE64 encoding. - - string_encoder - ascii_reversible - alpha_reversible - linux - windows - - Encoded using Base64. Decoding tools available online e.g. https://www.base64decode.org/ - - strings_to_encode - base64_options - - encoded_strings - - \ No newline at end of file diff --git a/modules/encoders/cipher/braille/secgen_local/local.rb b/modules/encoders/cipher/braille/secgen_local/local.rb index 59c20fffc..63afe4925 100644 --- a/modules/encoders/cipher/braille/secgen_local/local.rb +++ b/modules/encoders/cipher/braille/secgen_local/local.rb @@ -1,6 +1,7 @@ #!/usr/bin/ruby require_relative '../../../../../lib/objects/local_string_encoder.rb' require 'braille' +require 'braille/translator' class BrailleEncoder < StringEncoder diff --git a/modules/encoders/compression/huffman/secgen_metadata.xml b/modules/encoders/compression/huffman/secgen_metadata.xml index 6c7004b63..9b0c584fe 100644 --- a/modules/encoders/compression/huffman/secgen_metadata.xml +++ b/modules/encoders/compression/huffman/secgen_metadata.xml @@ -9,10 +9,10 @@ Encodes a string with Huffman compression. Outputs a huffman string and png. huffman_encoder - ascii_reversible - string_encoder + compression linux windows + high https://github.com/nicanor/braille diff --git a/modules/generators/structured_content/account/secgen_metadata.xml b/modules/generators/structured_content/account/secgen_metadata.xml index 37f9990f7..5b731c881 100644 --- a/modules/generators/structured_content/account/secgen_metadata.xml +++ b/modules/generators/structured_content/account/secgen_metadata.xml @@ -17,8 +17,8 @@ username password super_user - strings_to_leak - leaked_filenames + data_to_leak + @@ -29,12 +29,12 @@ false - + - - - + + + account diff --git a/scenarios/ctf/encoding_challenges.xml b/scenarios/ctf/encoding_challenges.xml new file mode 100644 index 000000000..3179be85a --- /dev/null +++ b/scenarios/ctf/encoding_challenges.xml @@ -0,0 +1,94 @@ + + + + + + Encoding Challenges + Thomas Shaw + Single system narrative-based CTF challenge. + + ctf + attack-ctf + web-hints + intermediate + + + + system + + + + + + + + + + + + + + + + challenger + + + tiaspbiqe2r + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +