Skip to main content

RelayConn

Struct RelayConn 

Source
pub struct RelayConn { /* private fields */ }
Expand description

One inbound SMB client being relayed: instead of answering the NTLM challenge with our own fixed value (capture), we hand the victim’s Type1 out to the caller, relay back the target’s Type2, and surrender the victim’s Type3 — so the caller can complete an authenticated session to a third-party target as the victim.

Implementations§

Source§

impl RelayConn

Source

pub fn new(stream: TcpStream) -> Self

Source

pub async fn recv_type1(&mut self) -> Result<Vec<u8>>

Handle NEGOTIATE and the first SESSION_SETUP; return the victim’s NTLM Type1.

Source

pub async fn send_challenge(&mut self, type2: &[u8]) -> Result<()>

Relay the target’s Type2 challenge back to the victim.

Source

pub async fn recv_type3(&mut self) -> Result<Vec<u8>>

Receive the victim’s Type3 (computed over the target’s challenge).

Source

pub async fn listen(addr: &str) -> Result<TcpListener>

Bind a listener for relaying; returns accepted RelayConns via the closure.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V