• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Насколько безопасно использовать CP в bash-сценариях (cmd-injection)

ASMi386

Green Team
27.04.2021
10
1
BIT
26
Собственно сабж.
Чтобы не грузить лишним, интересует, насколько безопасен такой фрагмент в скрипте (теоретический кусочек):
Код:
#!/bin/bash
SUFFIX=$(date '+_%d_%m_%Y')
/usr/bin/cp ./from/*$SUFFIX.zip ./to/

Интересует возможность command injection через имя файла.
Файловая система источника NTFS, назначения - ext4
Если возможность существует, как правильно защититься? Кавычками?)
 

f22

Codeby Academy
Gold Team
05.05.2019
1 909
226
BIT
1 537
Интересует возможность command injection через имя файла.
А каким образом по вашему имя копируемого файла должно восприниматься shell'ом как команда?
Он получает строку и эту строку подставляет в путь.

Если возможность существует, как правильно защититься? Кавычками?)
Если есть сомнения в этом плане, используйте условие
Можно проверить, является ли исходный/конечный путь файлом, или вообще существует ли
Bash:
if [[ -f /usr/bin/cp ]]; then echo 1; else echo 2; fi
Bash:
if [[ -e /usr/bin/cp ]]; then echo 1; else echo 2; fi
 

ASMi386

Green Team
27.04.2021
10
1
BIT
26
А каким образом по вашему имя копируемого файла должно восприниматься shell'ом как команда?
Он получает строку и эту строку подставляет в путь.
Может ли злоумышленник на файловой системе NTFS создать такое имя файла, которое позволило бы выполнить команду на бэкап-сервере?

Код:
1.txt /tmp;ls -la;.zip
Очень грубо) Насколько я знаю, NTFS терпимо относится к точкам с запятой в имени файла.
 
Последнее редактирование:

Exited3n

Red Team
10.05.2022
713
257
BIT
621
Может ли злоумышленник на файловой системе NTFS создать такое имя файла, которое позволило бы выполнить команду на бэкап-сервере?

Код:
1.txt /tmp;ls -la;.zip
Очень грубо) Насколько я знаю, NTFS терпимо относится к точкам с запятой в имени файла.
У тебя нет eval'a или прочего, с чего вдруг cp начнет исполнять команды как sh ?
 

ASMi386

Green Team
27.04.2021
10
1
BIT
26
Логично, но думал мало ли у негодяев каких фокусов в запасе - решил уточнить )

Спасибо!
 

larchik

Gold Team
07.06.2019
409
479
BIT
508
У тебя нет eval'a или прочего, с чего вдруг cp начнет исполнять команды как sh ?
вообще, на первый взгляд, тут возможна инъекция, но все зависит от конкретной реализации.
Там, где стоит символ '*' - это пользовательский ввод, который может быть любым.
Преположим, что в звездочку попадет конструкция типа test.zip ./to; id; #.
Тогда итоговая строка может быть такой:
/usr/bin/cp ./from/test.zip ./to; id; #$SUFFIX.zip ./to/
Теоретически команда id будет выполнена после копирования. В общем ТС задает правильный вопрос.
 

Exited3n

Red Team
10.05.2022
713
257
BIT
621
вообще, на первый взгляд, тут возможна инъекция, но все зависит от конкретной реализации.
Там, где стоит символ '*' - это пользовательский ввод, который может быть любым.
Преположим, что в звездочку попадет конструкция типа test.zip ./to; id; #.
Тогда итоговая строка может быть такой:
/usr/bin/cp ./from/test.zip ./to; id; #$SUFFIX.zip ./to/
Теоретически команда id будет выполнена после копирования. В общем ТС задает правильный вопрос.
Проводите тесты! Если время позволяет.
 

ASMi386

Green Team
27.04.2021
10
1
BIT
26
Проводите тесты! Если время позволяет.
Я очевидные варианты пофаззил локально - ничего не вышло. Решил у сообщества уточнить.

UPD: без файла, если явно подсунуть такую конструкцию, создается /tmp/cmd.flag
Код:
#!/bin/bash

rm ./to/*
SUFFIX=1.txt /tmp;touch /tmp/cmd.flag;echo

/usr/bin/cp ./from/$SUFFIX ./to/

Код:
-rw-r--r--  1 asm  asm      0 Mar  3 16:51  cmd.flag

Чуть позже примонтирую NTFS, еще поизвращаюсь))
 
Последнее редактирование:

Exited3n

Red Team
10.05.2022
713
257
BIT
621
Я очевидные варианты пофаззил локально - ничего не вышло. Решил у сообщества уточнить.

UPD: без файла, если явно подсунуть такую конструкцию, создается /tmp/cmd.flag
Код:
#!/bin/bash

rm ./to/*
SUFFIX=1.txt /tmp;touch /tmp/cmd.flag;echo

/usr/bin/cp ./from/$SUFFIX ./to/

Код:
-rw-r--r--  1 asm  asm      0 Mar  3 16:51  cmd.flag

Чуть позже примонтирую NTFS, еще поизвращаюсь))
Тут ты код скрипта правишь непосредственно, можно нагородить что угодно.
Я про другое.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!