• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Zaxvat - Захвачиваем домены / субдомены

admin

#root
Администратор
Регистрация
20.01.2011
Сообщения
7,665
Розыгрыши
0
Реакции
135


Zaxvat (Захват)​

Zaxvat (Захват) - это инструмент командной строки, написанный на Go, предназначенный для захвата доменов / субдоменов.

Посмотреть вложение 69820

На какой платформе/фреймворке это написано?​

Эта программа написана на языке программирования Go. Он использует стандартную библиотеку для различных операций.

Для чего он используется и как он работает?​

Значит если вы знакомы с захватом доменов / субдоменов, то вы должны знать что в основном это работает через запись CNAME - для тех кто не знакомы, скоро выйдет статья на эту тему. Так вот этот скрипт проверяет, является ли CNAME домена уязвимым для захвата или нет.

Что делает этот инструмент лучше других (отличия)?​

  • Он берёт список CNAME которых можно захватить, из этого списка - Для просмотра ссылки Войди или Зарегистрируйся - который постоянно обновляется. Таким образом, вам не нужно беспокоиться о том, обновлен ли список для проверки или нет.
  • Он написан на Go, как и другие мои инструменты. Я использую Go, потому что я сторонник качества и скорости.
  • Предоставляет подробную информацию, не только текст "Это уязвимо", но также извлекает сервис и документацию, если она существует. (Очевидно, из списка, который я привел выше)

Примеры использования в реальной жизни​

Я хочу напомнить вам, что данное программное обеспечение предназначено только для легального использования.

Для просмотра ссылки Войди или Зарегистрируйся - яркий пример с новостей. Да, я напишу что через наш софт это легко, но не только. Например тут был захват субдомена - Для просмотра ссылки Войди или Зарегистрируйся - эта была уязвимость сервиса которую потом исправили, наш скрипт т.к. каждый раз берёт данные с уже обновлённого списка, не пологаясь на старый, будет показывать что этот сервис в списке имеется, но не уязвим. Как в скриншоте выше. Также вы сможете прочитать "Discussion" в котором люди которые сталкивались с этим сервисом обсуждают то что уязвим он или нет и пишут свой опыт. Вы можете спросить а зачем показывать субдомены которые не уязвимы? Как в примере с hackerone, возможно вы найдёте уязвимость в самом сервисе, так что лучше знать.

Сорс Код​

Код:
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net"
    "net/http"
    "os"
    "strings"
)

type Fingerprint struct {
    CICDPass       bool     `json:"cicd_pass"`
    CNAME          []string `json:"cname"`
    Discussion     string   `json:"discussion"`
    Documentation string   `json:"documentation"`
    Fingerprint    string   `json:"fingerprint"`
    HTTPStatus     int      `json:"http_status"`
    NXDomain       bool     `json:"nxdomain"`
    Service        string   `json:"service"`
    Status         string   `json:"status"`
    Vulnerable     bool     `json:"vulnerable"`
}

func main() {
    fmt.Println("Made with lyubofff by GrozdniyAndy of XSS.is")
    if len(os.Args) != 2 {
        fmt.Println("Usage: go run main.go <domain>")
        os.Exit(1)
    }

    domain := os.Args[1]

    //fmt.Println("Fetching fingerprints...")
    fingerprints, err := getFingerprints()
    if err != nil {
        fmt.Println("Error fetching fingerprints:", err)
        os.Exit(1)
    }

    //fmt.Println("Fingerprints fetched successfully.")

    // Print the list of fetched fingerprints
    //fmt.Println("List of fetched fingerprints:")
    //for i, fp := range fingerprints {
        //fmt.Printf("%d. Service: %s, CNAME: %v\n", i+1, fp.Service, fp.CNAME)
    //}

    fmt.Printf("Checking vulnerability for domain: %s\n", domain)
    checkVulnerability(domain, fingerprints)
}

func getFingerprints() ([]Fingerprint, error) {
    url := "https://raw.githubusercontent.com/EdOverflow/can-i-take-over-xyz/master/fingerprints.json"

    // log.Printf("Fetching fingerprints from %s\n", url)
    response, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer response.Body.Close()

    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return nil, err
    }

    var fingerprints []Fingerprint
    err = json.Unmarshal(body, &fingerprints)
    if err != nil {
        return nil, err
    }

    // log.Printf("Fingerprints fetched successfully\n")
    return fingerprints, nil
}

func checkVulnerability(domain string, fingerprints []Fingerprint) {
    cname, err := getCNAME(domain)
    if err != nil {
        log.Fatalf("Error fetching CNAME for %s: %v\n", domain, err)
    }

    fmt.Printf("CNAME for %s: %s\n", domain, cname)

    for _, fp := range fingerprints {
        for _, fpCname := range fp.CNAME {
            if strings.Contains(cname, fpCname) {
                fmt.Printf("CNAME for %s matches with a service in the list:\n", domain)
                fmt.Printf("Service: %s\n", fp.Service)
                fmt.Printf("Status: %s\n", fp.Status)
                fmt.Printf("Discussion: %s\n", fp.Discussion)
                fmt.Printf("Documentation: %s\n", fp.Documentation)
                return
            }
        }
    }

    fmt.Printf("CNAME for %s is not found in the vulnerable fingerprints.\n", domain)
}

func getCNAME(domain string) (string, error) {
    cname, err := net.LookupCNAME(domain)
    if err != nil {
        return "", err
    }
    return cname, nil
}
Комменты оставил для дебаггинга, мало ли что)

Релизы​

Релизы внизу, пользуйтесь на здоровье (скачиваете и всё) , но особо советую компилировать самому. Если дефендер кричать будет, я не при чем

by: grozdniyandy
 
Activity
So far there's no one here