Zu überprüfen, ob eine Subdomain übernommen werden kann, weil sie hat:
einen verwaisten CNAME-Eintrag, der auf einen CMS-Anbieter (Heroku, Github, Shopify, Amazon S3, Amazon CloudFront, etc.) zeigt, der übernommen werden kann.
einen verwaisten CNAME-Eintrag, der auf einen nicht existierenden Domainnamen zeigt
einen oder mehrere falsche/vertippte NS-Einträge, die auf einen Nameserver zeigen, der von einem Angreifer übernommen werden kann, um die Kontrolle über die DNS-Einträge der Subdomain zu erlangen
Diese Subdomains tatsächlich zu übernehmen, indem ein Flag -takeover bereitgestellt wird. Derzeit wird die Übernahme nur für Github Pages und Heroku Apps unterstützt, und standardmäßig ist die Übernahmefunktion deaktiviert.
Eigene CMS-Anbieter anzugeben und über die Datei providers-data.csv zu überprüfen. In dieser Datei geben Sie den CMS-Namen, den CNAME-Wert, die Zeichenfolge, nach der Sie suchen möchten, und an, ob es nur über HTTP funktioniert oder nicht. Schauen Sie sich einige Beispiele an.
Haftungsausschluss: SEI KEIN JERK!
Selbstverständlich, bitte verwenden Sie dieses Tool sehr, sehr vorsichtig. Die Autoren übernehmen keine Verantwortung für etwaige Konsequenzen.
Standardmäßig erlaubt dieses Tool keine Übernahme von Subdomains. Wenn Sie dies tun möchten, geben Sie einfach das Flag -takeover an.
Voraussetzungen
Wir benötigen eine installierte GO-Umgebung. Sobald Sie GO haben, geben Sie einfach go get github.com/anshumanbh/tko-subs ein, um das Tool herunterzuladen.
Sobald das Tool heruntergeladen ist, geben Sie tko-subs -h ein.
Als nächstes müssen wir die folgenden Informationen besorgen:
Github-Personal-Access-Token – Stellen Sie sicher, dass dieses Token die Berechtigung zum Erstellen von Repositories, Referenzen, Inhalten usw. hat. Sie können dieses Token hier erstellen – https://github.com/settings/tokens
Heroku-Benutzername und API-Schlüssel
Heroku-App-Name – Sie können eine statische App auf Heroku erstellen, die auf ihrer Startseite anzeigt, was Sie möchten, indem Sie den Anweisungen hier folgen – https://gist.github.com/wh1tney/2ad13aa5fbdd83f6a489. Sobald Sie diese App erstellt haben, verwenden Sie diesen App-Namen im Flag (siehe unten). Wir werden diese App verwenden, um die Domain (mit dem verwaisten CNAME auf eine andere Heroku-App) zu übernehmen.
HINWEIS – Diese Werte werden nur benötigt, wenn Sie Subdomains übernehmen möchten. Standardmäßig ist das nicht erforderlich.
Erforderliche Go-Pakete zum Bauen.
root@kitploit:~
go get github.com/bgentry/heroku-go
go get github.com/gocarina/gocsv
go get github.com/google/go-github/github
go get github.com/olekukonko/tablewriter
go get golang.org/x/net/publicsuffix
go get golang.org/x/oauth2
go get github.com/miekg/dns
Wie führe ich es aus?
Sobald alles installiert ist, wechseln Sie mit cd in das Verzeichnis und geben Sie ein:
tko-subs -domains=domains.txt -data=providers-data.csv -output=output.csv
Wenn Sie auch übernehmen möchten, lautet der Befehl:
tko-subs -domains=domains.txt -data=providers-data.csv -output=output.csv -takeover -githubtoken=<github-token> -herokuusername=<heroku-username> -herokuapikey=<heroku-api-key> -herokuappname=<heroku-app-name>
Wenn Sie nur eine einzelne Domain überprüfen möchten, geben Sie ein:
tko-subs -domain <domain-name>
Wenn Sie mehrere Domains überprüfen möchten, geben Sie ein:
tko-subs -domain <domain-name-1>,<domain-name-2>
Standardmäßig:
das domains-Flag ist auf domains.txt gesetzt
das data-Flag ist auf providers-data.csv gesetzt
das output-Flag ist auf output.csv gesetzt
das takeover-Flag ist nicht gesetzt, daher standardmäßig keine Übernahme
das domain-Flag ist NICHT gesetzt, daher wird immer nach allen in der domains.txt-Datei genannten Domains gesucht. Wenn das domain-Flag angegeben ist, wird nur diese Domain überprüft und die domains.txt-Datei ignoriert, selbst wenn sie vorhanden ist.
das threads-Flag ist auf 5 gesetzt
Wenn Sie also einfach tko-subs ausführen, wird es mit den oben genannten Standardwerten ausgeführt.
Wie ist providers-data.csv formatiert?
name,cname,string,http
name: Der Name des Anbieters (z.B. github)
cname: Der CNAME, der verwendet wird, um eine Website auf den Inhalt des Anbieters abzubilden (z.B. github.io)
string: Die Fehlermeldung, die für eine nicht beanspruchte Subdomain zurückgegeben wird (z.B. "There isn't a GitHub Pages site here")
http: Ob http (nicht https, was der Standard ist) zur Verbindung mit der Website verwendet werden soll (true/false)
IsVulnerable: Ob die Domain als verwundbar befunden wurde oder nicht (true/false)
IsTakenOver: Ob die Domain übernommen wurde oder nicht (true/false)
Response: Die Nachricht, gegen die die Subdomain geprüft wurde
Wenn ein verwaister DNS-Eintrag gefunden wird, bleibt Provider leer.
Wenn ein fehlerhafter Nameserver gefunden wird, bleiben Provider und CNAME leer
Was passiert unter der Haube?
Dies wird über alle Domains (gleichzeitig mittels GoRoutines) in der Datei subdomains.txt iterieren und:
Prüfen, ob sie einen fehlerhaften autoritativen Nameserver haben; wenn ja, markieren wir diese Domain als verwundbar.
Prüfen, ob sie verwaiste CNAME-Einträge (auch tote DNS-Einträge) haben; wenn ja, markieren wir diese Domain als verwundbar.
Wenn eine Subdomain diese beiden Tests besteht, versucht sie, diese zu cURLen und eine Antwort zu erhalten, und prüft dann, ob diese Antwort mit einer der im providers-data.csv genannten Datenanbieter-Zeichenfolgen übereinstimmt.
Wenn die Antwort übereinstimmt, markieren wir diese Domain als verwundbar.
Als nächstes, abhängig davon, ob das takeover-Flag angegeben ist oder nicht, wird versucht, diese verwundbare Subdomain zu übernehmen.
Zum Beispiel, um eine Github Page zu übernehmen, wird der Code:
Ein Repository erstellen
Einen Branch gh-pages in diesem Repository erstellen
CNAME und index.html in den gh-pages-Branch dieses Repositories hochladen. Hier enthält CNAME die zu übernehmende Domain. index.html enthält den Text This domain is temporarily suspended, der angezeigt wird, sobald die Domain übernommen wurde.
Ähnlich für Heroku-Apps wird der Code:
Die verwaiste Domain zu Ihrer Heroku-App hinzufügen (deren Namen Sie in der .env-Datei angeben werden)
Und das war's!
Zukünftige Arbeiten
CMS-Name und Regex vom Benutzer oder aus der .env-Datei übernehmen und dann automatisch in das Tool einhängen, um sie finden zu können. ERLEDIGT
Übernahmen für weitere CMS hinzufügen
Weitere CMS-Anbieter hinzufügen
Danksagungen
Danke an Luke Young (@TheBoredEng) für die Hilfe mit der go-github-Bibliothek.
Danke an Frans Rosen (@fransrosen) für das Verständnis der technischen Details, die für einige der Übernahmen erforderlich sind.
Danke an Mohammed Diaa (@mhmdiaa) für die Zeit, die er in die Implementierung der Providerdaten-Funktionalität und das Laufen des Codes investiert hat.
Danke an high-stakes für eine dringend benötigte Code-Auffrischung.
Änderungsprotokoll
5/27
Neues Dockerfile hinzugefügt, um die Größe des Images zu reduzieren
Beispieldatei domains.txt zum Testen hinzugefügt
mhmdiaa hat die Logik für tote DNS-Übernahmen hinzugefügt. Dokumentation aktualisiert. Vielen Dank!
11/6
high-stakes hat einen PR mit einer Menge neuem Code erstellt, der einige Fehler behebt und den Code sauberer macht
9/22
Optionales Flag zur Überprüfung einer einzelnen Domain hinzugefügt
Installation und Ausführung erleichtert
6/25
Code durch Implementierung von Goroutinen viel schneller gemacht
Anstatt mit der LookupCNAME-Funktion von Golangs net-Paketen zu prüfen, wurde es so geändert, dass nur Dig verwendet wird, da dies auch tote DNS-Einträge liefert. Mehr Angriffsfläche!!