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
haptyc — Python-Bibliothek für Turbo Intruder, die Unterstützung für Payload-Positionen und die Angriffstypen Sniper/Clusterbomb/Pitchfork mit tag-basierter Testgenerierung für HTTP-Fuzzing hinzufügt. | Kitploit
Tools/GitHubGitHub/defparam/haptyc
Payload-GenerierungWebsicherheitFuzzingPenetrationstests
GitHubdefparam/haptyc

haptyc

Python-Bibliothek für Turbo Intruder, die Unterstützung für Payload-Positionen und die Angriffstypen Sniper/Clusterbomb/Pitchfork mit tag-basierter Testgenerierung für HTTP-Fuzzing hinzufügt.

Repository anzeigen
9415vor 4 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


Haptyc


Testgenerierungs-Framework

tag

Was ist Haptyc?

Haptyc ist eine Python-Bibliothek, die entwickelt wurde, um Payload-Positionsunterstützung und Sniper/Clusterbomb/Batteringram/Pitchfork-Angriffstypen zu Turbo Intruder hinzuzufügen. Während Haptyc diese Ziele recht gut erreicht, führt es auch eine einfachere Möglichkeit ein, Testsequenzen im Allgemeinen auszudrücken. Obwohl diese Bibliothek für Turbo Intruder gedacht ist, hat sie keine harten Abhängigkeiten von Turbo Intruder und kann überall dort verwendet werden, wo Testgenerierung in einem Python-Kontext benötigt wird. Leider unterstützt Haptyc, da es für einen Jython-Interpreter gebaut wurde, derzeit nur Python 2.7 (zukünftige Änderungen werden dies jedoch beheben).

Was sind Haptyc-Tags?

Haptyc-Tags sind Tags, mit denen ein Tester einen ursprünglichen Eingabe-Payload annotieren kann. Ein Tester kann mehrere Tags verwenden, um Schlüsseldaten in einer HTTP-Anfrage zu umschließen und sie als Positions-Payload zu kennzeichnen. Wenn Tests generiert werden, parst Haptyc alle Tags im ursprünglichen Payload und generiert Tests gemäß den Funktionen, die mit den Tag-Namen verbunden sind. Wenn Haptyc ein Haptyc-Tag auswertet, führt es die zugehörige Tag-Funktion (dies wird als Haptyc-Transform bezeichnet) für einen Test-Payload aus, um ihn an der Position des zugehörigen Tags in der Anfrage zu platzieren. Jede Tag-Funktion erhält ein data-Argument und ein state-Argument. Das data-Argument kann die inneren Daten des Tags oder eine andere Test-Payload-Sequenz enthalten. Das state-Argument ist ein Zustandsobjekt, das mit dem Tag verbunden ist, in dem Zustand zwischen Testiterationen gespeichert werden kann. Sehen wir uns ein Beispiel an.

Beispiel 1: Einfache Listeniteration

Ursprünglicher Payload:

root@kitploit:~
GET /animal/[+GuessAnimal]dog[+end] HTTP/1.1

Haptyc-Klasse & Haptyc-Transform:

root@kitploit:~
from haptyc import *

original = "GET /animal/[+GuessAnimal]dog[+end] HTTP/1.1"

class TestLogic(Transform):
	@ApplyList(["snake","cat","owl","lion"])
	def test_GuessAnimal(self, data, state):
		return data + "?original=" + self.inner() + "&attempt=" + str(state.iter)

TestFactory = TestLogic(original)
for test in TestFactory:
	print(test)

Generierte Tests:

root@kitploit:~
GET /animal/snake?original=dog&attempt=0 HTTP/1.1
GET /animal/cat?original=dog&attempt=1 HTTP/1.1
GET /animal/owl?original=dog&attempt=2 HTTP/1.1
GET /animal/lion?original=dog&attempt=3 HTTP/1.1

Im obigen Beispiel sehen wir, wie man Tests auf einfache Weise mit Haptyc ausdrücken kann. Zuerst wird die Haptyc-Bibliothek importiert. Zweitens haben wir die ursprünglichen Daten mit unseren Haptyc-Tag-Annotationen (GuessAnimal) definiert. Als nächstes wird die Klasse TestLogic definiert und als Transform-Klasse erweitert. Innerhalb dieser Klasse wird jede Methode, die mit test_ beginnt, als Haptyc-Tag zur Auswertung im ursprünglichen Payload registriert. Wir verwenden einen Logik-Dekorator, um die Zustandslogik für diesen Haptyc-Transform anzuwenden. In diesem Fall verwenden wir den @ApplyList(list)-Dekorator, um Haptyc anzuweisen, für jedes Element in der angegebenen Liste einen Test zu generieren und dieses Element als data-Argument in den Haptyc-Transform zu platzieren. Im Transform geben wir eine mutierte Version der Daten zurück, die wieder an die Position des Tags eingefügt wird. In diesem Fall ist die Mutation das Listenelement als data, verkettet mit den vom Tag umschlossenen Daten (dog) und dann verkettet mit dem iter-Wert im Zustandsobjekt. Der verbleibende Python-Code zeigt, wie das TestFactory-Objekt erstellt und alle Tests in einer for-Loop-Iteration generiert werden. Dies ist ein Beispiel für einen Standard-Sniper-Angriff, der eine einzelne Payload-Position anvisiert. Als nächstes sehen wir uns andere Angriffsarten an.

Beispiel 2: Clusterbomb

Ursprünglicher Payload:

root@kitploit:~
GET /animal?type=[%type]dog[%end]&name=[%name]fido[%end] HTTP/1.1

Haptyc-Klasse & Haptyc-Transform:

root@kitploit:~
from haptyc import *

original = "GET /animal?type=[%type]dog[%end]&name=[%name]fido[%end] HTTP/1.1"

class TestLogic(Transform):
	@ApplyList("snake","cat","owl","lion")
	def test_type(self, data, state):
		return data
		
	@ApplyList("Frank", "Lisa", "Jin", "Tooth")
	def test_name(self, data, state):
		return data

TestFactory = TestLogic(original)
for test in TestFactory:
	print(test)

Generierte Tests:

root@kitploit:~
GET /animal?type=snake&name=Frank HTTP/1.1
GET /animal?type=snake&name=Lisa HTTP/1.1
GET /animal?type=snake&name=Jin HTTP/1.1
GET /animal?type=snake&name=Tooth HTTP/1.1
GET /animal?type=cat&name=Frank HTTP/1.1
GET /animal?type=cat&name=Lisa HTTP/1.1
GET /animal?type=cat&name=Jin HTTP/1.1
GET /animal?type=cat&name=Tooth HTTP/1.1
GET /animal?type=owl&name=Frank HTTP/1.1
GET /animal?type=owl&name=Lisa HTTP/1.1
GET /animal?type=owl&name=Jin HTTP/1.1
GET /animal?type=owl&name=Tooth HTTP/1.1
GET /animal?type=lion&name=Frank HTTP/1.1
GET /animal?type=lion&name=Lisa HTTP/1.1
GET /animal?type=lion&name=Jin HTTP/1.1
GET /animal?type=lion&name=Tooth HTTP/1.1

Beispiel 1 hat gezeigt, wie man Transforms im Sniper-Stil auswertet, indem man das '+' Zeichen im Tag [+tag][+end] verwendet. Beispiel 2 zeigt, wie wir 2 Transforms/Positionen verwenden können, um einen Clusterbomb-Angriff durchzuführen. Wie zu sehen ist, verwenden wir zwei separate Transform-Tags namens [%type][%end] und [%name][%end]. Das '%' Zeichen weist Haptyc an, diese Transforms im Clusterbomb-Stil auszuwerten: Für jeden Payload im ersten Transform wird ein Test mit dem Payload aus dem zweiten Transform erstellt. Die Testanzahl ist die Anzahl der Tests jedes beteiligten Transforms multipliziert miteinander.

Beispiel 3: Pitchfork/BatteringRam

Mit demselben Python-Code können wir den Angriffsstil von Clusterbomb zu Pitchfork ändern, indem wir das '%' durch ein '#' ersetzen. Pitchfork-Angriffe platzieren die Positions-Payloads alle parallel. Die Testanzahl ist die niedrigste Anzahl von Tests aller beteiligten Transforms.

Ursprünglicher Payload:

root@kitploit:~
GET /animal?type=[#type]dog[#end]&name=[#name]fido[#end] HTTP/1.1

Generierte Tests:

root@kitploit:~
GET /animal?type=snake&name=Frank HTTP/1.1
GET /animal?type=cat&name=Lisa HTTP/1.1
GET /animal?type=owl&name=Jin HTTP/1.1
GET /animal?type=lion&name=Tooth HTTP/1.1

Beispiel 4: Persistente Transforms

Ursprünglicher Payload:

root@kitploit:~
GET /animal?type=dog&id=[+idor]0[+end]&process=[@randbool]False[@end] HTTP/1.1

Haptyc-Klasse & Haptyc-Transform:

root@kitploit:~
from haptyc import *
import random

original = "GET /animal?type=dog&id=[+idor]0[+end]&process=[@randbool]False[@end] HTTP/1.1"

class TestLogic(Transform):
        @ApplyIteration(10)
        def test_idor(self, data, state):
                return str(state.iter)

        def per_randbool(self, data):
                return random.choice(["True", "False"])

TestFactory = TestLogic(original)
for test in TestFactory:
        print(test)

Generierte Tests:

root@kitploit:~
GET /animal?type=dog&id=0&process=False HTTP/1.1
GET /animal?type=dog&id=1&process=True HTTP/1.1
GET /animal?type=dog&id=2&process=False HTTP/1.1
GET /animal?type=dog&id=3&process=True HTTP/1.1
GET /animal?type=dog&id=4&process=False HTTP/1.1
GET /animal?type=dog&id=5&process=True HTTP/1.1
GET /animal?type=dog&id=6&process=False HTTP/1.1
GET /animal?type=dog&id=7&process=True HTTP/1.1
GET /animal?type=dog&id=8&process=False HTTP/1.1
GET /animal?type=dog&id=9&process=False HTTP/1.1

Persistente Transforms werden mit dem '@' Zeichen gekennzeichnet, und die Transform-Funktionen beginnen immer mit per_, da diese Transforms nicht iterativ sind, sie erzeugen keine Tests oder behalten keinen Zustand. Diese Transforms sind lediglich naive Transformationen, die Sie überall im Payload für eine zustandslose Transformation anwenden können, ohne die zustandsbehafteten Transforms zu beeinflussen. Da sie keine Tests vorschreiben, können Sie mit persistenten Transforms allein keine Tests generieren; sie sind dafür gedacht, mit iterativen Transforms gemischt zu werden. Im obigen Beispiel haben wir einen 10-Test-Snipe-Transform, der eine inkrementierende ID platziert. Außerdem haben wir einen persistenten Transform, der einen zufälligen Boolean an seine Position setzt.

Beispiel 5: Verwendung von state und state.init

Es kann Fälle geben, in denen der Tester vor dem Start einer Testsequenz eine gewisse Verarbeitung/Initialisierung durchführen möchte. Um dies zu unterstützen, führt Haptyc alle beteiligten Transforms für eine Initialisierungsphase aus, bevor die Transforms für die Testgenerierung ausgeführt werden. Dieser Initialisierungsschritt kann verwendet werden, um beliebige Initialisierungen durchzuführen, die der Tester benötigt, und sie in das state-Objekt zu legen. Der Tester kann state.init als Boolean verwenden, um zu bestimmen, ob die Ausführung in der Initialisierung ist. Alle von der Initialisierung zurückgegebenen Daten werden ignoriert.

Ursprünglicher Payload:

root@kitploit:~
GET /animal?data=[+b64mutate]SGVsbG8gSGFja2VyIQ==[+end] HTTP/1.1

Haptyc-Klasse & Haptyc-Transform:

root@kitploit:~
from haptyc import *
import base64

original = "GET /animal?data=[+b64mutate]SGVsbG8gSGFja2VyIQ==[+end] HTTP/1.1"

class TestLogic(Transform):
        @ApplyIteration(10)
        def test_b64mutate(self, data, state):
                if state.init:
                        state.decoded = base64.b64decode(data)
                        return
                return base64.b64encode(random_insert(state.decoded, ["'"]))

TestFactory = TestLogic(original)
for test in TestFactory:
        print(test)

Generierte Tests:

root@kitploit:~
GET /animal?data=SGVsbG8gSCdhY2tlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFja2VyISc= HTTP/1.1
GET /animal?data=SGVsbG8gSGFjaydlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGEnY2tlciE= HTTP/1.1
GET /animal?data=SCdlbGxvIEhhY2tlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFjaydlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFja2VyISc= HTTP/1.1
GET /animal?data=SCdlbGxvIEhhY2tlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFjJ2tlciE= HTTP/1.1
GET /animal?data=SGVsbG8gSGFjJ2tlciE= HTTP/1.1

Im obigen Beispiel verwendet der Test state.init, um den umschlossenen inneren Payload nur einmal zu Beginn der Testsequenz base64 zu dekodieren und dieses Ergebnis in state.decoded zu speichern. Dann wird für alle normalen Testgenerierungsausführungen state.decoded als dekodierte innere Daten zur Verarbeitung verwendet. Diese Art von Muster ist nützlich, um die Leistung Ihres Transforms zu verbessern, da nur eine Dekodierung am Anfang erfolgt (im Gegensatz zum Dekodieren desselben Payloads bei der Generierung jedes Tests).

Dokumentation

Tag-Typen

  1. [+tag]inner[+end] - Sniper-Stil iterativer Transform
  2. [%tag]inner[%end] - Clusterbomb-Stil iterativer Transform
  3. [#tag]inner[#end] - Batteringram/Pitchfork-Stil iterativer Transform
  4. [@tag]inner[@end] - Zustandsloser persistenter Transform

Logik-Dekoratoren

Haptyc-Klassendekoratoren

NameArgumenteBeschreibung
@CloneTransform(srcname, destname)srcname=String eines Transform-Methodenkopie von, destname=String einer nicht existierenden Transform-Methode, in die kopiert wirdCloneTransform wird verwendet, um die Implementierung eines Transforms in einen anderen Namensraum zu kopieren, ohne Kopieren/Einfügen zu benötigen. Dies ist nützlich bei '%' und '#'-Angriffen, wenn Sie dieselbe Transform-Implementierung an mehreren Positionen wiederverwenden müssen

Hilfsmethoden der Transform-Klasse

NameBeschreibung
self.inner()Ruft den inneren Payload des Tags ab

Hilfsattribute des Transform-Zustands

NameBeschreibung
state.iterAktuelle Iterationsnummer des Transforms (0-basiert)
state.initBoolean, der angibt, ob in der Initialisierungsphase

Hilfsmutationsfunktionen

NameBeschreibung
radamsa(data)Diese Funktion führt radamsa auf den Eingabedaten aus und gibt das Ergebnis zurück (radamsa muss installiert sein)
index_insert(data, list, index)Diese Funktion fügt einen Payload aus der Liste in die bereitgestellten Daten an dem angegebenen Index ein
random_insert(data, list)Diese Funktion fügt einen Payload aus der Liste an einem zufälligen Index in die bereitgestellten Daten ein

Integrierte Wortlisten

  • @ApplyPayloads("0-9")
  • @ApplyPayloads("10 letter words")
  • @ApplyPayloads("11 letter words")
  • @ApplyPayloads("12 letter words")
  • @ApplyPayloads("3 letter words")
  • @ApplyPayloads("4 letter words")
  • @ApplyPayloads("5 letter words")
  • @ApplyPayloads("6 letter words")
  • @ApplyPayloads("7 letter words")
  • @ApplyPayloads("8 letter words")
  • @ApplyPayloads("9 letter words")
  • @ApplyPayloads("a-z")
  • @ApplyPayloads("CGI scripts")
  • @ApplyPayloads("Directories - long")
  • @ApplyPayloads("Directories - short")
  • @ApplyPayloads("dirsearch")
  • @ApplyPayloads("Extensions - long")
  • @ApplyPayloads("Extensions - short")
  • @ApplyPayloads("Filenames - long")
  • @ApplyPayloads("Filenames - short")
  • @ApplyPayloads("Format strings")
  • @ApplyPayloads("Form field names - long")
  • @ApplyPayloads("Form field names - short")
  • @ApplyPayloads("Form field values")
  • @ApplyPayloads("Fuzzing - full")
  • @ApplyPayloads("Fuzzing - JSON_XML injection")
  • @ApplyPayloads("Fuzzing - out-of-band")
  • @ApplyPayloads("Fuzzing - path traversal")
  • @ApplyPayloads("Fuzzing - path traversal (single file)")
  • @ApplyPayloads("Fuzzing - quick")
  • @ApplyPayloads("Fuzzing - SQL injection")
  • @ApplyPayloads("Fuzzing - template injection")
  • @ApplyPayloads("Fuzzing - XSS")
  • @ApplyPayloads("HTTP headers")
  • @ApplyPayloads("HTTP verbs")
  • @ApplyPayloads("IIS files and directories")
  • @ApplyPayloads("Interesting files and directories")
  • @ApplyPayloads("Local files - Java")
  • @ApplyPayloads("Local files - Linux")
  • @ApplyPayloads("Local files - Windows")
  • @ApplyPayloads("Passwords")
  • @ApplyPayloads("Server-side variable names")
  • @ApplyPayloads("Short words")
  • @ApplyPayloads("SSRF targets")
  • @ApplyPayloads("User agents - long")
  • @ApplyPayloads("User agents - short")
  • @ApplyPayloads("Usernames")

Wie installiert man

Es gibt 2 Möglichkeiten, Haptyc zu installieren

  1. Der einfache Weg mit der diesem Repository beigefügten Release turbo-intruder-all_w_haptyc.jar
  2. Der manuelle Weg

Unabhängig davon, für welchen Weg Sie sich entscheiden, enthalten diese Releases kein radamsa. Wenn Sie radamsa-Unterstützung wünschen, müssen Sie es von diesem Repository installieren: (Optional) Installieren Sie radamsa über https://gitlab.com/akihe/radamsa

Wie installiert man - Fertig verpackt (einfach)

  1. Klonen Sie dieses Repository und notieren Sie turbo-intruder-all_w_haptyc.jar im Release-Verzeichnis
  2. Öffnen Sie Burp
  3. Gehen Sie zum Reiter Extender
  4. Klicken Sie auf die Schaltfläche Add
  5. Klicken Sie auf die Schaltfläche Select File ... und wählen Sie turbo-intruder-all_w_haptyc.jar

Wie installiert man - Manuell (Patchen von turbo-intruder-all.jar)

  1. Klonen Sie dieses Repository
  2. Führen Sie in bash ./install.sh <absoluter Pfad zum Verzeichnis mit turbo-intruder-all.jar> aus
  3. Laden Sie Turbo Intruder in Burp neu
Tool herunterladen
NameArgumentedata-EingabeBeschreibung
@ApplyIteration(n)n = Anzahl der Iterationeninnerer Wert des Haptyc-TagsLogik, um N Tests mit inner als data zu generieren
@ApplyRange(b,e,s=1)b = Startwert, e = Endwert, s = Schrittgenerierter Wert des BereichsLogik, um einen Test für jeden schrittweise durchlaufenen Wert mit dem Wert als data zu generieren
@ApplyList(L)L = Python-ListeElement der ListeLogik, um einen Test für jeden Wert in der Liste als data zu generieren
@ApplyFilelist(path)path = DateisystempfadElement der ListeLogik, um einen Test für jeden Wert in der Dateiliste als data zu generieren
@ApplyPayloads(name)name = Name der integrierten ListeElement der ListeLogik, um einen Test für jeden Wert in der integrierten Liste als data zu generieren
self.stop()Stoppt sofort die Testgenerierung dieses Transforms
self.me()Gibt den Namen des aktuellen Transform-Kontexts zurück
self.set_label(label)Setzt die Beschriftung für diesen aktuellen Test
self.get_label(label)Ruft die Beschriftung für diesen aktuellen Test ab