ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Веб-уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   Насколько безопасно использовать CP в bash-сценариях (cmd-injection) (https://forum.antichat.xyz/showthread.php?t=583103)

ASMi386 02.03.2024 19:17

Собственно сабж.
Чтобы не грузить лишним, интересует, насколько безопасен такой фрагмент в скрипте (теоретический кусочек):

Код:


Код:

#!/bin/bash
SUFFIX=$(date '+_%d_%m_%Y')
/usr/bin/cp ./from/*$SUFFIX.zip ./to/

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

f22 03.03.2024 10:48

Цитата:


ASMi386 сказал(а):

Интересует возможность command injection через имя файла.


А каким образом по вашему имя копируемого файла должно восприниматься shell'ом как команда?
Он получает строку и эту строку подставляет в путь.

Цитата:


ASMi386 сказал(а):

Если возможность существует, как правильно защититься? Кавычками?)


Если есть сомнения в этом плане, используйте условие
Можно проверить, является ли исходный/конечный путь файлом, или вообще существует ли

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 03.03.2024 10:54

Цитата:


f22 сказал(а):

А каким образом по вашему имя копируемого файла должно восприниматься shell'ом как команда?
Он получает строку и эту строку подставляет в путь.


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

Код:


Код:

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

Exited3n 03.03.2024 13:35

Цитата:


ASMi386 сказал(а):

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

Код:


Код:

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


У тебя нет eval'a или прочего, с чего вдруг cp начнет исполнять команды как sh ?

ASMi386 03.03.2024 14:30

Логично, но думал мало ли у негодяев каких фокусов в запасе - решил уточнить )

Спасибо!

larchik 03.03.2024 16:12

Цитата:


Exited3n сказал(а):

У тебя нет eval'a или прочего, с чего вдруг cp начнет исполнять команды как sh ?


вообще, на первый взгляд, тут возможна инъекция, но все зависит от конкретной реализации.
Там, где стоит символ '*' - это пользовательский ввод, который может быть любым.
Преположим, что в звездочку попадет конструкция типа test.zip ./to; id; #.
Тогда итоговая строка может быть такой:

Код:

/usr/bin/cp ./from/test.zip ./to; id; #$SUFFIX.zip ./to/
Теоретически команда id будет выполнена после копирования. В общем ТС задает правильный вопрос.

Exited3n 03.03.2024 17:10

Цитата:


larchik сказал(а):

вообще, на первый взгляд, тут возможна инъекция, но все зависит от конкретной реализации.
Там, где стоит символ '*' - это пользовательский ввод, который может быть любым.
Преположим, что в звездочку попадет конструкция типа test.zip ./to; id; #.
Тогда итоговая строка может быть такой:

Код:

/usr/bin/cp ./from/test.zip ./to; id; #$SUFFIX.zip ./to/
Теоретически команда id будет выполнена после копирования. В общем ТС задает правильный вопрос.


Проводите тесты! Если время позволяет.

ASMi386 03.03.2024 17:27

Цитата:


Exited3n сказал(а):

Проводите тесты! Если время позволяет.


Я очевидные варианты пофаззил локально - ничего не вышло. Решил у сообщества уточнить.

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 03.03.2024 18:29

Цитата:


ASMi386 сказал(а):

Я очевидные варианты пофаззил локально - ничего не вышло. Решил у сообщества уточнить.

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, еще поизвращаюсь))


Тут ты код скрипта правишь непосредственно, можно нагородить что угодно.
Я про другое.


Время: 01:10