
Go-Webanwendungs-Penetrationstest
GOWAPT ist der kleine Bruder von wfuzz, einem Schweizer Taschenmesser für WAPT. Es ermöglicht Pentestern, mühelos umfangreiche Aktivitäten durchzuführen – einfach konfigurieren und es ist nur eine Frage von Klicks.
Um gowapt zu installieren, geben Sie einfach ein:
make
sudo make install
Aus dem Menü -h
Usage of gowapt:
-H value
A list of additional headers
-a string
Basic authentication (user:password)
-c string
A list of cookies
-d string
POST data for request
-e string
A list of comma separated encoders (default "plain")
-f string
Filter the results
-from-proxy
Get the request via a proxy server
-fuzz
Use the built-in fuzzer
-p string
Use upstream proxy
-plugin-dir string
Directory containing all scanning module
-scanner
Run in scanning mode
-ssl
Use SSL
-t string
Template for request
-threads int
Number of threads (default 10)
-u string
URL to fuzz
-w string
Wordlist file
-x string
Extension file example.js
Beispiele
Scannen Sie http://www.example.com und filtern Sie alle 200 OK-Anfragen heraus
gowapt -u "http://www.example.com/FUZZ" -w wordlist/general/common.txt -f "code == 200"
Scannen Sie http://www.example.com, indem Sie den GET-Parameter vuln auf XSS fuzzen (angenommen, es hatte 200 Tags mit einer legitimen Anfrage)
gowapt -u "http://www.example.com/?vuln=FUZZ" -w wordlist/Injections/XSS.txt -f "tags > 200"
Scannen Sie http://www.example.com, indem Sie den POST-Parameter vuln auf XSS fuzzen (angenommen, es hatte 200 Tags mit einer legitimen Anfrage)
gowapt -u "http://www.example.com/" -d "vuln=FUZZ" -w wordlist/Injections/XSS.txt -f "tags > 200"
Scannen Sie die authentifizierungsgeschützte Seite http://www.example.com und filtern Sie alle 200 OK-Anfragen heraus
gowapt -u "http://www.example.com/FUZZ" -w wordlist/general/common.txt -f "code == 200" -a "user:password"
Scannen Sie http://www.example.com mit zusätzlichem Header Hello: world und filtern Sie alle 200 OK-Anfragen heraus
gowapt -u "http://www.example.com/FUZZ" -w wordlist/general/common.txt -f "code == 200" -H "Hello: world"
Scannen Sie http://www.example.com mit Basic-Auth mit Benutzer/Passwort guest:guest
gowapt -u "http://www.example.com/FUZZ" -w wordlist/general/common.txt -a "guest:guest"
Scannen Sie http://www.example.com mit einer Erweiterung
gowapt -u "http://www.example.com/FUZZ" -w wordlist/general/common.txt -x myextension.js
Scannen Sie http://www.example.com über einen Proxy (z.B. Burp):
gowapt -p "http://localhost:8080" -u "http://www.example.com/FUZZ" -w wordlist/general/common.txt
Scannen Sie http://www.example.com (vom Proxy empfangen) und filtern Sie alle 200 OK-Anfragen heraus
gowapt --from-proxy -w wordlist/general/common.txt
Führen Sie den Scanner-Modus auf http://www.example.com (vom Proxy empfangen) mit Standard-Plugins aus
gowapt --from-proxy --scanner --plugin-dir plugin/
Öffnen Sie dann BurpSuite, senden Sie die Anfrage, die Sie fuzzen möchten, an den Repeater und setzen Sie einen Upstream-Proxy auf 127.0.0.1:31337.
Wenn Sie bereit sind, klicken Sie auf Senden. Wenn alles richtig war, sollten Sie als Antwort Request received by GOWAPT sehen.
Erweiterungen sind ein einfacher Weg, die Funktionen von gowapt zu erweitern. Eine JavaScript-VM ist für das Laden und Ausführen von Erweiterungsdateien verantwortlich.
Nachfolgend eine Liste der derzeit implementierten API
* Hinweis: Bei Verwendung von setHTTPInterceptor empfängt die Callback-Methode 3 Parameter:
Da die Natur von sendRequestSync die Engine aufgrund von synchronen Anfragen verlangsamt, verwenden Sie sie mit Bedacht
Weitere Informationen im folgenden Beispiel für eine Erweiterung:
example.js
/*
* Create a custom encoder called helloworld
*
* This encore just add the string "_helloworld" to every payload
* coming from the wordlist
*/
addCustomEncoder("helloworld", myenc);
/*
* Define the callback method for the helloworld encoder
*/
function myenc(data) {
return data + "_helloword";
}
/*
* Create an HTTP interceptor
*
* The interceptor will hook every request / response
* is possible to modify request before send it, anyway the respose item
* it's just shadow copy of the one received from the server so no modification
* are possible
*
*
* request_response is an object which may contains both http.Request
* or http.Response , to know which on is contained check is_request flag
*
* REMEMBER! request_response is an http.* object so you must interact with
* this one just like you would do in golang!
*
* dumpResponse is a built-in function which dump full request-response to
* disk.
* result is an object filled with stats about the response it contains some fields
*
* result.tags => Number of tags in the response
* result.code => HTTP Response status
* result.words => Number of words in the response
* result.lines => Number of lines in the response
* result.chars => Number of chars in the response
* result.request => Full dump of the request
* result.response => Full dump of the response
* result.response => The injected payload
*
*/
setHTTPInterceptor(function(request_response, result, is_request){
if(is_request){
request_response.Header.Set("Hello", "world")
}else{
dumpResponse(request_response, "/tmp/dump.txt")
/*
* Send an HTTP request in a synchronous way
*
* This API accept 4 parameters:
* method => GET | POST | HEAD | PUT | PATCH | UPDATE
* url => The url of the HTTP service
* post_data => The content of request bodyBytes
* headers => A javascript dictionary {headerName => headerValue}
*
* The response object may be null or undefined or an http.Response from golang
*/
var response = sendRequestSync("GET", "http://example.com/", null, {"Fake": "Header"})
}
})
Ein neuer Modus namens Scanner wurde mit dem letzten Commit eingeführt. Er ermöglicht es Benutzern, vollständig anpassbare Plugins zu erstellen, um aktives Web-Scannen durchzuführen. Weitere Informationen finden Sie im Wiki!
Die Wortlisten stammen aus dem Projekt wfuzz! Vielen Dank an die Entwickler!
Nachfolgend die Liste der verfügbaren Encoder
Sie können Filter auf die folgenden Variablen anwenden
gowapt wird unter der GPL 3.0-Lizenz veröffentlicht und ist Copyleft von Daniele 'dzonerzy' Linguaglossa
| Method | Number of params | Description | Params |
|---|
| addCustomEncoder | 2 | Erstellt einen benutzerdefinierten Encoder zur Verwendung mit Wortlisten | Param1 -> EncoderName (string) Param2 -> EncoderLogic (function) |
| panic | 1 | Für Debugging-Zwecke: Absturz der Anwendung | Param1 -> PanicText (string) |
| dumpResponse | 2 | Speichert eine vollständige Anfrage/Antwort auf der Festplatte, nützlich zum Speichern von Testfällen | Param1 -> ResponseObject (http.Response) Param2 -> Path (string) |
| setHTTPInterceptor | 1 | Erstellt einen Interceptor für ausgehende HTTP-Anfragen und eingehende Antworten | Param1 -> HTTPCallback (function) * |
| sendRequestSync * | 4 | Sendet eine HTTP-Anfrage synchron | Param1 -> Method (string) Param2 -> Url (string) Param3 -> PostData (string) Param4 -> Headers (Object{Name:Value}) |