Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
inquisitor — Meinungsstarke organisationszentrierte OSINT-Fußabdruckermittlung, inspiriert von recon-ng und Maltego | Kitploit
Tools/GitHubGitHub/penafieljlm/inquisitor
OSINT (Open-Source-Intelligence)AufklärungDNS- und Subdomain-EnumerationInformationsbeschaffungBedrohungsanalyseE-Mail-Sammlung
GitHubpenafieljlm/inquisitor

inquisitor

Meinungsstarke organisationszentrierte OSINT-Fußabdruckermittlung, inspiriert von recon-ng und Maltego

Repository anzeigen
18057vor 9 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Inquisitor

Hinweis

Dieses Projekt ist nur teilweise abgeschlossen und ich habe noch viele der Funktionen, die in dem folgenden Blogbeitrag beschrieben sind, nicht implementiert: https://penafieljlm.com/2017/07/14/inquisitor/.

Inquisitor ist ein einfaches Werkzeug, um Informationen über Unternehmen und Organisationen mithilfe von Open-Source-Intelligence-Quellen (OSINT) zu sammeln. Es ist stark inspiriert von der Funktionsweise von Maltego und recon-ng, und das Tool implementiert einige der Funktionen dieser Tools neu, fügt aber eine zusätzliche Schicht von meinungsbasierter Semantik auf Asset-Typen hinzu, um einen einfach zu bedienenden Workflow zu schaffen.

Die wichtigsten Funktionen von Inquisitor sind:

  1. Die Möglichkeit, das Eigentumslabel eines Assets zu kaskadieren (z.B. wenn ein Registrantenname bekanntermaßen zur Zielorganisation gehört, dann werden die unter diesem Namen registrierten Hosts und Netzwerke als zur Zielorganisation gehörend markiert)
  2. Die Möglichkeit, Assets durch Abfragen von offenen Quellen wie Google und Shodan in andere potenziell verwandte Assets umzuwandeln
  3. Die Möglichkeit, die Beziehungen dieser Assets durch ein zoomfähiges Pack-Layout zu visualisieren

Konzept

Das gesamte Konzept von Inquisitor dreht sich um die Idee, Informationen aus offenen Quellen zu extrahieren, basierend auf dem, was bereits über eine Zielorganisation bekannt ist. Im Kontext von Inquisitor werden diese als „Transforms“ bezeichnet. Verwandte Informationen können auch sofort von einem bekannten Asset abgerufen werden, basierend auf Metadaten, die ebenfalls aus offenen Quellen wie Whois und Internetregistern abrufbar sind.

Die Konzepte werden in diesem Blogartikel ausführlicher erläutert: https://penafieljlm.com/2017/07/14/inquisitor/

Installation

Um Inquisitor zu installieren, klone einfach das Repository, wechsle in das Verzeichnis und führe das Installationsskript aus.``` pip install Cython click git clone [email protected]:penafieljlm/inquisitor.git cd inquisitor python setup.py install

root@kitploit:~
## Verwendung

Inquisitor hat fünf grundlegende Befehle, die `scan`, `status`, `classify`, `dump` und `visualize` umfassen.```
usage: inq [-h] {scan,status,classify,dump,visualize} ...

optional arguments:
  -h, --help            show this help message and exit

command:
  {scan,status,classify,dump,visualize}
                        The action to perform.
    scan                Search OSINT sources for intelligence based on known
                        assets belonging to the target.
    status              Prints out the current status of the specified
                        intelligence database.
    classify            Classifies an existing asset as either belonging or
                        not belonging to the target. Adds a new asset with the
                        specified classification if none is present.
    dump                Dumps the contents of the database into a JSON file
    visualize           Create a D3.js visualization based on the contents of
                        the specified intelligence database.

Scan

Im Scan-Modus führt das Tool alle verfügbaren Transformationen für alle Assets aus, die Sie in Ihrer Intelligence Database haben. Stellen Sie sicher, dass Sie API-Schlüssel für die unten angegebenen verschiedenen OSINT-Quellen erstellen und diese dem Skript zur Verfügung stellen, damit die Transformationen, die diese Quellen verwenden, nicht übersprungen werden. Stellen Sie außerdem sicher, dass Sie Ihre Intelligence Database mit einigen bekannten eigenen Ziel-Assets seeden, indem Sie zuerst den Befehl classify verwenden, denn wenn die Datenbank keine eigenen Assets enthält, gibt es nichts zu transformieren.``` usage: inq scan [-h] [--google-dev-key GOOGLE_DEV_KEY] [--google-cse-id GOOGLE_CSE_ID] [--google-limit GOOGLE_LIMIT] [--shodan-api-key SHODAN_API_KEY] [--shodan-limit SHODAN_LIMIT] DATABASE

positional arguments: DATABASE The path to the intelligence database to use. If specified file does not exist, a new one will be created.

optional arguments: -h, --help show this help message and exit --google-dev-key GOOGLE_DEV_KEY Specifies the developer key to use to query Google Custom Search. Visit the Google APIs Console (http://code.google.com/apis/console) to get an API key. If notspecified, the script will simply skip asset transforms that involve Google Search. --google-cse-id GOOGLE_CSE_ID Specifies the custom search engine to query. Visit the Google Custom Search Console (https://cse.google.com/cse/all) to create your own Google Custom Search Engine. If not specified, the script will simply skip asset transforms that involve Google Search. --google-limit GOOGLE_LIMIT The number of pages to limit Google Search to. This is to avoid exhausting your daily quota. --shodan-api-key SHODAN_API_KEY Specifies the API key to use to query Shodan. Log into your Shodan account (https://www.shodan.io/) and look at the top right corner of the page in order to view your API key. If not specified, the script will simply skip asset transforms that involve Shodan. --shodan-limit SHODAN_LIMIT The number of pages to limit Shodan Search to. This is to avoid exhausting your daily quota.

root@kitploit:~
### Status

Im Statusmodus gibt das Tool einfach eine kurze Zusammenfassung des Status Ihrer Scandatenbank aus.```
usage: inq status [-h] [-s] DATABASE

positional arguments:
  DATABASE      The path to the intelligence database to use. If specified
                file does not exist, a new one will be created.

optional arguments:
  -h, --help    show this help message and exit
  -s, --strong  Indicates if the status will be based on the strong ownership
                classification.

Klassifizieren

Im Klassifizierungsmodus können Sie manuell Assets hinzufügen und bereits vorhandene Assets in der Intelligence-Datenbank neu klassifizieren. Sie sollten diesen Befehl verwenden, um Ihre Intelligence-Datenbank mit bekannten, im Besitz befindlichen Ziel-Assets zu befüllen.``` usage: inq classify [-h] [-ar REGISTRANT [REGISTRANT ...]] [-ur REGISTRANT [REGISTRANT ...]] [-rr REGISTRANT [REGISTRANT ...]] [-ab BLOCK [BLOCK ...]] [-ub BLOCK [BLOCK ...]] [-rb BLOCK [BLOCK ...]] [-ah HOST [HOST ...]] [-uh HOST [HOST ...]] [-rh HOST [HOST ...]] [-ae EMAIL [EMAIL ...]] [-ue EMAIL [EMAIL ...]] [-re EMAIL [EMAIL ...]] [-al LINKEDIN [LINKEDIN ...]] [-ul LINKEDIN [LINKEDIN ...]] [-rl LINKEDIN [LINKEDIN ...]] DATABASE

positional arguments: DATABASE The path to the intelligence database to use. If specified file does not exist, a new one will be created.

optional arguments: -h, --help show this help message and exit -ar REGISTRANT [REGISTRANT ...], --accept-registrant REGISTRANT [REGISTRANT ...] Specifies a registrant to classify as accepted. -ur REGISTRANT [REGISTRANT ...], --unmark-registrant REGISTRANT [REGISTRANT ...] Specifies a registrant to classify as unmarked. -rr REGISTRANT [REGISTRANT ...], --reject-registrant REGISTRANT [REGISTRANT ...] Specifies a registrant to classify as rejected. -ab BLOCK [BLOCK ...], --accept-block BLOCK [BLOCK ...] Specifies a block to classify as accepted. -ub BLOCK [BLOCK ...], --unmark-block BLOCK [BLOCK ...] Specifies a block to classify as unmarked. -rb BLOCK [BLOCK ...], --reject-block BLOCK [BLOCK ...] Specifies a block to classify as rejected. -ah HOST [HOST ...], --accept-host HOST [HOST ...] Specifies a host to classify as accepted. -uh HOST [HOST ...], --unmark-host HOST [HOST ...] Specifies a host to classify as unmarked. -rh HOST [HOST ...], --reject-host HOST [HOST ...] Specifies a host to classify as rejected. -ae EMAIL [EMAIL ...], --accept-email EMAIL [EMAIL ...] Specifies a email to classify as accepted. -ue EMAIL [EMAIL ...], --unmark-email EMAIL [EMAIL ...] Specifies a email to classify as unmarked. -re EMAIL [EMAIL ...], --reject-email EMAIL [EMAIL ...] Specifies a email to classify as rejected. -al LINKEDIN [LINKEDIN ...], --accept-linkedin LINKEDIN [LINKEDIN ...] Specifies a LinkedIn Account to classify as accepted. -ul LINKEDIN [LINKEDIN ...], --unmark-linkedin LINKEDIN [LINKEDIN ...] Specifies a LinkedIn Account to classify as unmarked. -rl LINKEDIN [LINKEDIN ...], --reject-linkedin LINKEDIN [LINKEDIN ...] Specifies a LinkedIn Account to classify as rejected.

root@kitploit:~
### Dump

Im Dump-Modus können Sie die Inhalte der Intelligence-Datenbank in eine menschenlesbare JSON-Datei exportieren.```
usage: inq dump [-h] [-j FILE] [-a] DATABASE

positional arguments:
  DATABASE              The path to the intelligence database to use. If
                        specified file does not exist, a new one will be
                        created.

optional arguments:
  -h, --help            show this help message and exit
  -j FILE, --json FILE  The path to dump the JSON file to. Overwrites existing
                        files.
  -a, --all             Include rejected assets in dump.

Visualisieren

Im Visualisierungsmodus können Sie eine hierarchische Visualisierung des Intelligence Repository abrufen.``` usage: inq visualize [-h] [-l] DATABASE

positional arguments: DATABASE The path to the intelligence database to use. If specified file does not exist, a new one will be created.

optional arguments: -h, --help show this help message and exit -l, --last Simply open the last visualization generated instead of creating a new one.

root@kitploit:~
## Arbeitsablauf

Jetzt, da Sie die grundlegenden Funktionen von Inquisitor kennen, ist es an der Zeit zu lernen, wie man es *tatsächlich* verwendet. Inquisitor wurde mit den folgenden Schritten entwickelt:

### Seeding (Initialbefüllung)

In diesem Schritt enthält Ihre Intelligence Database noch nichts. Wir müssen irgendwo anfangen, also befüllen Sie die Datenbank mit Assets, von denen Sie wissen, dass sie zu Ihrer Zielorganisation gehören. Dies können Sie mit dem Befehl `classify` tun.

### Scannen

Jetzt, da die Datenbank Assets enthält, die bekanntermaßen zu Ihrer Zielorganisation gehören. Sie können dann mit dem Scannen fortfahren. Dies können Sie mit dem Befehl `scan` tun.

Wenn Sie den Befehl `scan` in Ihrer Intelligence Database aufrufen, führt Inquisitor die `transform`-Methoden von Assets aus, die als `accepted` klassifiziert sind. Sobald das Scannen abgeschlossen ist, erhalten Sie möglicherweise weitere Assets, die potenziell zu Ihrer Zielorganisation gehören.

Wenn Sie keine neuen Assets erhalten, können Sie entweder Ihre Intelligence Database mit neuen Informationen befüllen oder einfach zum Abschluss des Prozesses übergehen, indem Sie zum Schritt 'Berichterstattung' gelangen.

### Klassifizieren

Während Inquisitor für Sie eine automatische Asset-Klassifizierung durchführt, könnte es einige Assets übersehen, die tatsächlich zu Ihrer Zielorganisation gehören.

Wenn dies geschieht, müssen Sie den Datenbankinhalt überprüfen und die Assets manuell klassifizieren. In der Regel sollten Sie besonders auf **Registrant**-Assets achten, da es keine Möglichkeit gibt, die Eigentümerschaft für diesen Asset-Typ automatisch zu bestimmen. Außerdem sind die meisten anderen Asset-Typen auf die Eigentümer-Klassifizierung von Registrant-Assets angewiesen, um zu bestimmen, ob sie zu Ihrem Ziel gehören oder nicht, daher ist es definitiv am besten, auf Ihre Registrant-Assets zu achten. Außerdem haben Sie von vornherein nicht viele Registrant-Assets, daher ist es nicht so schwer, sie zu durchsuchen.

### Berichterstattung

Sie können eine Visualisierung der Assets, die zu Ihrer Zielorganisation gehören, mit dem Befehl `visualize` oder dem Befehl `dump` erstellen.

## Demo

Ich habe Videodemonstrationen des Tools unter folgendem Link: https://drive.google.com/open?id=0B_O70BVu38TRclo5dWRBWkdTTWc

Ich konnte den Lauf des Befehls `scan` jedoch nicht vollständig aufzeichnen, da mein kostenloser Bildschirmrekorder nur bis zu 10 Minuten aufzeichnet.

## Entwicklung

Das Inquisitor-Projekt ist wie folgt aufgebaut:```
.
|-- README.md
|-- inquisitor
|   |-- __init__.py
|   |-- assets
|   |   |-- __init__.py
|   |   |-- block.py
|   |   |-- email.py
|   |   |-- host.py
|   |   |-- linkedin.py
|   |   `-- registrant.py
|   |-- extractors
|   |   |-- __init__.py
|   |   `-- emails.py
|   `-- sources
|       |-- __init__.py
|       |-- google_search.py
|       `-- shodan_search.py
|-- inq
|-- report
|   `-- index.html
|-- setup.py
`-- tests
    |-- __init__.py
    `-- test_inq.py

Es verfügt über drei Hauptmodule namens assets, extractors und sources. Das Hauptskript heißt inq.

Als Entwickler wirst du dich hauptsächlich für das Hinzufügen neuer Asset-Typen zum System interessieren, daher konzentriert sich das Entwicklerhandbuch hauptsächlich darauf.

Repository

Bevor wir uns mit der eigentlichen Implementierung von Asset-Klassen befassen, müssen wir zunächst verstehen, wie wir mit der Intelligence Database interagieren, da wir bei der Ableitung verwandter Assets aus unseren Asset-Klassen damit interagieren werden.

Der Quellcode der Intelligence Database befindet sich in der Datei inquisitor/__init__.py. Der tatsächliche Name für den logischen Wrapper der Intelligence Database lautet IntelligenceRepository.

Du musst in Asset-Klassen lediglich die Funktion IntelligenceRepository.get_asset_string aufrufen, denn das Anhängen neuer Assets an die Intelligence Database obliegt dem Modul scan im Skript inq. Du verwendest diese Funktion hauptsächlich, um Instanzen von Assets zu erstellen oder sie aus der Datenbank abzurufen, falls sie existieren. Diese Funktion ist wichtig, wenn du Assets aus den Funktionen related und transform deiner Asset-Klassen zurückgibst, da das Erstellen neuer Asset-Objekte teuer ist, da einige von ihnen während der Initialisierung Netzwerkressourcen nutzen.``` Function

IntelligenceRepository.get_asset_string(asset_type, identifier, create=False, store=False)

Description

root@kitploit:~
Retrieves the primary key and asset object for the asset with the provided 
type and identifier.

Parameters

root@kitploit:~
asset_type: class, required

    The type of the asset to retrieve from the Intelligence Database. You
    will actually have to pass the class object of the asset type you want
    to retrieve.

identifier: any, required

    The identifier of the asset to retrieve. Consider the identifier as the
    unique attribute of an asset object. As for which attribute is to be
    used to identify an asset, it depends on the contents of the OBJECT_ID
    variable in the asset module.

create: bool, optional, default=False

    When no matching asset object is found, a new one will be created and 
    returned if this parameter is set to True. The new asset will not
    necessarily be stored in the Intelligence Database unless specified
    using the "store" parameter. However, I suggest you do not do this as
    adding assets to the Intelligence Database is the responsibility of
    another module.

store: bool, optional, default=False

    When a new asset is created when none is found, the new one will be
    stored in the Intelligence Database. As said previously, I suggest that
    you do not do this as adding assets to the Intelligence Database is the
    responsibility of another module.

Returns

root@kitploit:~
A two-element tuple where the first element is the database primary key of 
the element returned, and the second element is the deserialized asset 
object retrieved from the database.

None if the asset was not found.

If the asset was not found and the create flag was set to True, the primary
key member of the tuple will be set to None.
root@kitploit:~
### Assets

Um einen neuen Asset-Typ zu erstellen, erstellen Sie eine neue Datei im Verzeichnis `inquisitor/assets` und fügen Sie den folgenden Skelettcode ein:```python
import inquisitor.assets

class ASSET_NAMEValidateException(Exception):
    pass

def canonicalize(ASSET_IDENTIFIER):
    return ASSET_IDENTIFIER

def main_classify_args(parser):
    parser.add_argument(
        '-aASSET_NAME_LETTER', '--accept-ASSET_NAME',
        metavar='ASSET_NAME',
        type=canonicalize,
        nargs='+',
        help='Specifies a ASSET_NAME to classify as accepted.',
        dest='ASSET_NAMEs_accepted',
        default=list(),
    )
    parser.add_argument(
        '-uASSET_NAME_LETTER', '--unmark-ASSET_NAME',
        metavar='ASSET_NAME',
        type=canonicalize,
        nargs='+',
        help='Specifies a ASSET_NAME to classify as unmarked.',
        dest='ASSET_NAMEs_unmarked',
        default=list(),
    )
    parser.add_argument(
        '-rASSET_NAME_LETTER', '--reject-ASSET_NAME',
        metavar='ASSET_NAME',
        type=canonicalize,
        nargs='+',
        help='Specifies a ASSET_NAME to classify as rejected.',
        dest='ASSET_NAME_rejected',
        default=list(),
    )

def main_classify_canonicalize(args):
    accepted = set(args.ASSET_NAMEs_accepted)
    unmarked = set(args.ASSET_NAMEs_unmarked)
    rejected = set(args.ASSET_NAME_rejected)
    redundant = set.intersection(accepted, unmarked, rejected)
    if redundant:
        raise ValueError(
            ('Conflicting classifications for ASSET_NAMEs '
            ': {}').format(list(redundant))
        )
    accepted = set([canonicalize(a) for a in accepted])
    unmarked = set([canonicalize(a) for a in unmarked])
    rejected = set([canonicalize(a) for a in rejected])
    return (accepted, unmarked, rejected)

class ASSET_NAME(inquisitor.assets.Asset):

    def __init__(self, ASSET_IDENTIFIER, owned=None):
        super(self.__class__, self).__init__(owned=owned)
        self.ASSET_IDENTIFIER = canonicalize(ASSET_IDENTIFIER)
        # TODO: Perform other initialization actions here

    def __eq__(self, other):
        if not isinstance(other, self.__class__):
            return False
        return self.ASSET_IDENTIFIER == other.ASSET_IDENTIFIER

    def related(self, repo):
        # Prepare the results
        results = set()
        # TODO: Create related assets here based on the attributes of this asset
        # Return the results
        return results

    def transform(self, repo, sources):
        # Prepare the results
        assets = set()
        # Google Transforms
        if sources.get('google'):
            subassets = self.cache_transform_get('google', repo)
            if not subassets:
                # Acquire API
                google = sources['google']
                # TODO: Perform Google queries here and the results to 'subassets'
                # Cache The Transform
                self.cache_transform_store('google', subassets)
            assets.update(subassets)
        # Shodan Transforms
        if sources.get('shodan'):
            subassets = self.cache_transform_get('shodan', repo)
            if not subassets:
                # Acquire API
                shodan = sources['shodan']
                # TODO: Perform Google queries here and the results to 'subassets'
                # Cache The Transform
                self.cache_transform_store('shodan', subassets)
            assets.update(subassets)
        # Return the results
        return assets

    def is_owned(self, repo):
        if self.owned:
            return True
        # TODO: Automatically determine ownership based on repo contents
        return False

    def parent_asset(self, repo):
        # TODO: Return parent asset based on repo contents
        return None

REPOSITORY = 'ASSET_REPOSITORY'
ASSET_CLASS = ASSET_NAME
OBJECT_ID = 'ASSET_IDENTIFIER'

Ersetzen Sie nun die folgenden Platzhalter durch die entsprechenden Werte

  • ASSET_NAME : Korrekter Name Ihres Assets (z.B. Registrant, Host, etc.)
  • ASSET_IDENTIFIER : Der Name des Identifikator-Attributs Ihres Assets
  • ASSET_NAME_LETTER : Der erste Buchstabe Ihres Assets in Kleinbuchstaben
  • ASSET_REPOSITORY : Die Kleinschreibung der Pluralform Ihres Asset-Namens

Abschließend registrieren Sie Ihr Asset in der ASSET_MODULES-Liste in inquisitor/__init__.py. Stellen Sie sicher, dass Sie Ihr neues Asset aus der betreffenden Datei importieren.

Herzlichen Glückwunsch! An diesem Punkt haben Sie nun einen neuen funktionierenden Asset-Typ erstellt!

Allerdings müssen Sie noch die folgenden Methoden implementieren, um sicherzustellen, dass Ihre Assets mit anderen Asset-Typen verknüpft werden:``` Function

root@kitploit:~
related

Description

root@kitploit:~
  Returns the set of assets directly related to the asset in question (i.e.
  those that can be derived without querying a search engine).

  When creating asset objects, make sure you use the 
  IntelligenceRepository.get_asset_string method instead of instatiating a 
  new one your self so the asset can be returned from the repository if it 
  exists.

  Set the create flag to True when calling the method in question in order
  to return a new object when one isn't found.

  Set the store flag to False as appending assets is the job of another
  module.

Parameters

root@kitploit:~
repo: IntelligenceRepository

    The Intelligence Repository that is being used in the current context.

Returns

root@kitploit:~
Set of assets directly related to the asset in question. 
root@kitploit:~
Stellen Sie sicher, dass Sie diese Gelegenheit nicht verpassen, etwas Farbe in Ihre```
Function

    transform

Description
  
      Returns the set of assets potentially related to the asset in question
      (i.e. those that can be derived by querying a search engine).

      You may access search engine objects through the provided sources
      parameter.

      Each search engine object has a transform method which automatically
      creates asset objects for you. You just need to provide it the repository
      and your query string, and then append the objects it returns to the set
      of assets to be returned by your asset's transform method.

Parameters

    repo: IntelligenceRepository

        The Intelligence Repository that is being used in the current context.

    sources: dict

        The list of search engine objects that are available for use.

Returns

    Set of assets potentially related to the asset in question.
    

Eigene Implementierungen:

  • KDF: Nur BIP39-Passphrase-Unterstützung (keine Passphrasen-Normalisierung, da BIP39 bereits normalisiert ist). PBKDF2-Schlüsselableitung aus Mnemonic + Passphrase. Ausgaben: seed(64), chainCode(32), privateKey(32), publicKey(33), fingerprint(4).
  • BIP32/44: Ableitung aus dem Seed. Unterstützt BIP32-Serialisierungsformate.
  • BIP39: Mnemonic-Erzeugung aus Entropie. Mnemonic-Validierung. Standard-Wortlisten (Englisch, Japanisch, Koreanisch, Spanisch, Chinesisch, Französisch, Italienisch, Tschechisch, Portugiesisch).
  • Keine externen Abhängigkeiten für die Kern-Kryptographie.
  • Optionale BIP32/BIP39-Unterstützung über Feature-Flags.

⚠️ Dies ist experimentelle Software, die für Forschungs- und Bildungszwecke gedacht ist. Die Sicherheit liegt in IHRER Verantwortung. Testen Sie jede Implementierung gründlich und prüfen Sie sie, bevor Sie einen Produktionseinsatz in Betracht ziehen.

Installation

root@kitploit:~
pip install twikit

Für optionale Funktionen und Tools:

root@kitploit:~
pip install twikit[all]

Schnellstart

Hier ist ein einfaches Beispiel unter Verwendung der Client-API:

root@kitploit:~
import asyncio
from twikit import Client

USERNAME = 'your-username'
EMAIL = 'email'
PASSWORD = 'password'

# Initialize client
client = Client('en-US')

async def main():
    # Login to Twitter
    await client.login(
        auth_info_1=USERNAME,
        auth_info_2=EMAIL,
        password=PASSWORD
    )

    # Get user information
    user = await client.get_user_by_screen_name('MyTwitter')
    print(f"User ID: {user.id}, Followers: {user.followers_count}")

    # Get user's tweets
    user_tweets = await user.get_tweets('Tweets')
    for tweet in user_tweets:
        print(f"Tweet ID: {tweet.id}, Text: {tweet.text}")

asyncio.run(main())

Verwenden des Twitter-Clients mit Nebenläufigkeitskontrolle

root@kitploit:~
import asyncio
from twikit import Client

async def main():
    client = Client('en-US')

    # Get trending topics
    trends = await client.get_trends('trending')
    for trend in trends:
        print(f"Trending: {trend}")

    # Search tweets with concurrent rate limiting
    # Max 10 concurrent operations, 2-second delay between batches
    tweets = await client.search_tweet(
        'query', 'Top',
        concurrent=True, max_concurrent=10, delay=2
    )

Function

root@kitploit:~
is_owned

Description

root@kitploit:~
 Determines if there is high confidence that this asset does indeed belong
 to the target. Usually checks for any "strong" classification tag first by
 looking at the contents of the "owned" variable, before performing
 automatic evaluation.

 Automatic evaluation depends on what type of asset you're writing. For
 example, for a Host asset, the secondary sources of determining ownership
 would include looking if its registrant is owned by the target, if it's
 parent domain is owned by the target. etc.

Parameters

root@kitploit:~
repo: IntelligenceRepository

    The Intelligence Repository that is being used in the current context.

Returns

root@kitploit:~
True it is determined with high confidence that this asset does indeed 
belong to the target.
root@kitploit:~
EINGABE:```
Function

    parent_asset

Description
  
     Returns the asset object that is considered the parent of this asset
     object.

Parameters

    repo: IntelligenceRepository

Returns

    The asset object that this asset falls under (e.g. a Block is under a 
    Registrant, a Host is under a Block, a Host is under another Host, an Email
    is under a Host, etc. This is primarily used for visualization.
    

Nach der Implementierung der oben genannten Methoden stellen Sie sicher, dass Sie die Variablen REPOSITORY, ASSET_CLASS und OBJECT_ID am Ende des Quellcodes Ihres Assets setzen.

Kontakt und Hinweise

Der Scan-Modus ist nicht vollständig getestet aufgrund von Quoten der beteiligten Suchmaschinen. Außerdem wurde dieses Projekt in Eile im Rahmen einer einwöchigen Hackathon-Herausforderung erstellt, daher könnte es viele Probleme geben. Bitte erstellen Sie ein Issue-Ticket oder kontaktieren Sie mich unter [email protected], wenn Sie einen Fehler finden oder Fragen haben.

Haftungsausschluss

Diese Arbeit leitet sich von den Ansätzen ab, die in den Open-Source-Intelligence-Tools Maltego und recon-ng implementiert wurden. Ich habe diese Ansätze durch Ideen ergänzt, die entweder bereits allgemein bekannt sind (z. B. whois zeigt, wer der Eigentümer einer Domain ist, Subdomains gehören derselben Organisation, die auch ihre übergeordnete Domain besitzt – wie durch Domain-Name-Brute-Force-Angriffe impliziert, Organisationen sind autoritativ für die Domainnamen, die sie besitzen, usw.) oder originell sind und von mir in meiner eigenen Freizeit als Teil meines Hobbys entwickelt wurden (z. B. Akzeptanzbewertungen, verschiedene Transformationen, Klassifikationsvererbung, usw.).

Kein Bestandteil dieser Arbeit wurde von einer Arbeit abgeleitet, die ich in der Vergangenheit für einen Arbeitgeber durchgeführt habe. Das gesamte Projekt, einschließlich des Proof-of-Concept, wurde von Grund auf neu geschrieben und mit Ideen aus der Informationssicherheits-Community erweitert.

Tool herunterladen