🏈Laboratorio: Exploiting Ruby deserialization using a documented gadget chain

  • Se pone interesante este lab, primero que todo, sabemos que el lab contendrá un framework de ruby on rails, mi tarea será investigar y encontrar el Gadget Chain que pueda ejecutar código remoto y nos sirva para eliminar el archivo morale.txt que está en el directorio /home/carlos/morale.txt

La pista… :)

Lo segundo importante será buscar cual es la versión del framework de ruby en el laboratorio.

  • No la encontré, sin embargo creo que el ataque no va por una versión especifica de ruby sino más bien por el gadget chain RCE, encontré un repo documentado, se ve interesante:

Quick Recap

  • Marshal.dump means serialize

  • Marshal.load means unserialize

  • When an object of a class is serialized, marshal_dump method (if defined in class) is called.

  • When an object of a class is unserialized, marshal_load method (if defined in class) is called.

  • When a undefined method is called on an object, method_missing method (if defined in class) is called.

Importante saber esos datos, para el exploit que encontré:

De ese repo este fue el código que pude encontrar para el RCE:

Ahora bien aqui vemos que crea un archivo en tmp que se llama pwned.txt realmente vamos por más, en este caso debemos eliminar el archivo morale.txt del directorio home de carlos.

Instalemos Ruby en mi macOS M1, con brew y luego instalamos las gemas que implementa este codigo, gemas parece que son como paquetes a importar en python.

Ahora si:

Actualicé las cookies y me arrojó esto:

Encontré otra pagina que está la veo como más real que sea la apropiada ya que es de portswigger, del año 2018:

Y tienen un codigo que se habla en el blog: (Lo modifiqué para la ejecución del sistema para eliminar el morale.txt)

Y me tiro un error en especifico:

La versión parece ser: Ruby 2.7.0

Encontré otro site que me menciona otro code para la ejecución de RCE →

Código Original pero modificado para el Laboratorio borrando el archivo morale.txt:

Efectivamente tampoco me funcionó, así que con ello presente, tomaré esta última pagina que toma las versiones de Ruby 2.x - 3.x:

Que habla sobre la deserialization RCE Universal en todas las versiones de Ruby de 2.x-3.x donde menciona que la forma de invocar varios métodos magicos para crear el gadget chain y lograr la ejecución remota de código es así:

[**ActiveModel::AttributeMethods::ClassMethods::CodeGenerator**](<https://github.com/rails/rails/blob/v6.1.0.rc1/activemodel/lib/active_model/attribute_methods.rb#L369>) to achieve code execution.

Después de echarle una ojeada al blog de eje man, el codigo resultante para poder ejecutar el RCE es haciendo la llamada el KernelSystem(Commands) module propio de Ruby:

Vamos a recrearlo tirandolo en mi vs code a ver:

Así tal cual es como lo dejamos.

Lo ejecutamos en mycompiler.io

Actualizamos la cookie de wiener:peter en base64:

Last updated