The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Уязвимость BatBadBut, затрагивающая стандартные библиотеки различных языков программирования"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Уязвимость BatBadBut, затрагивающая стандартные библиотеки различных языков программирования"  +/
Сообщение от opennews (ok), 10-Апр-24, 11:05 
Приложения, запускающие сценарии в формате bat и cmd на платформе Windows при помощи штатных функций запуска процессов, подвержены уязвимости, позволяющей добиться выполнения своего кода в случае передачи при запуске аргументов без отдельного экранирования спецсимволов. Уязвимость получила кодовое имя BatBadBut и проявляется в приложениях, использующих стандартные библиотеки таких языков, как Rust, PHP, Node.js, Python, Ruby, Go, Erlang и Haskell...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=60964

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Шарп (ok), 10-Апр-24, 11:05   +17 +/
А ещё остались люди, кто серваки на винде держит?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2, #3, #12, #58, #83

2. Сообщение от Аноним (2), 10-Апр-24, 11:12   +4 +/
Это будет использоваться не на серваках, совсем не на серваках.
Вернее, подозреваю, давно используется не на серваках.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

3. Сообщение от Анон666 (?), 10-Апр-24, 11:12   –3 +/
В mission critical сегменте куча винды.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #6, #66, #67

4. Сообщение от Аноним (4), 10-Апр-24, 11:13   +16 +/
> Уязвимость BatBadBut, затрагивающая стандартные библиотеки различных языков программирования

Правильный заголовок будет "Уязвимость BatBadBut, затрагивающая стандартные библиотеки различных языков программирования в Windows"

Дело не в языках, а в супер надежной проприетарной системе (как нам завещал товарищ birdie)

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #14

5. Сообщение от Аноним (6), 10-Апр-24, 11:18   –4 +/
>В Rust 1.77.2 в стандартную библиотеку добавлена дополнительная проверка, возвращающая ошибку при наличии в аргументе запускаемого сценария спецсимволов, которое невозможно гарантированно безопасно экранировать.

Не понял, а что Rust ещё и в качестве интерпретатора используется?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #44

6. Сообщение от Аноним (6), 10-Апр-24, 11:24   +/
Прям настолько жёстком?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #65

7. Сообщение от Аноним (-), 10-Апр-24, 11:28   +/
Что, Fabric уже посчитали одной большой уязвимостью?
Ответить | Правка | Наверх | Cообщить модератору

8. Сообщение от bOOster (ok), 10-Апр-24, 11:42    Скрыто ботом-модератором–1 +/
Ответить | Правка | Наверх | Cообщить модератору

9. Сообщение от Аноним (-), 10-Апр-24, 11:43   +3 +/
> Проекты Python, Ruby, Go, Erlang и Haskell пока ограничились внесением в документацию предупреждения о проявлении уязвимости при отсутствии должного экранирования спецсимволов.

Не, ну это не серьезно...
И вообще, какое отношение виндопроблемы имеют к этому сайту?

А уязвимость нужно переименовать в BatBadButt.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #17, #82

10. Сообщение от Аноним (-), 10-Апр-24, 11:48   +/
Для хаскеля уже есть патч.

В списке еще забыли жабу. Они оригинально решили проблему
Java     Won’t fix

Appendix B: Status of the affected programming languages
flatt.tech/research/posts/batbadbut-you-cant-securely-execute-commands-on-windows/

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #24

11. Сообщение от Аноним (11), 10-Апр-24, 11:52   +2 +/
Это же не баг, а фича.
Ответить | Правка | Наверх | Cообщить модератору

12. Сообщение от Аноним (12), 10-Апр-24, 11:53   –4 +/
Apache c PHP 5 под 98 виндой гоняю на ретропк, наполняю базу данных через Web-морду. Одновремено захожу с IE5 и смартфона. Если система тянет, пусть живет. Уникод поддерживается, через JSON-файлы можно осуществлять экспорт на продакшен под Linux.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

14. Сообщение от Аноним (-), 10-Апр-24, 12:00   –6 +/
> Дело не в языках, а в супер надежной проприетарной системе (как нам
> завещал товарищ birdie)

Как хорошо что в линуксе нет башскиптов, которые могут и рут подарить, и обфуцировать код для бекдора и даже нафиг удалить все файлы юзеров!
Или есть?


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #36, #43, #61, #72

17. Сообщение от Аноним (17), 10-Апр-24, 12:05   +2 +/
> И вообще, какое отношение виндопроблемы имеют к этому сайту?

Rust, node.js,  Python, Ruby, Go, Erlang и Haskell уже перестали быть открытыми проектами?
Ах да, давайте тогда прекратим публиковать новости о ядре Linux, ведь оно запускается на оборудовании с проприетарными прошивками.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #21

21. Сообщение от Аноним (-), 10-Апр-24, 12:16   +1 +/
> уже перестали быть открытыми проектами

Не перестали. И?

Проблема из новости характерна исключительно для винды.
И это виндопроблемы мало кого интересуют.

> тогда прекратим публиковать новости о ядре Linux, ведь оно запускается на оборудовании с проприетарными прошивками.

Не нужно пытаться натянуть сову на глобус.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #54

24. Сообщение от Массоны Рептилоиды (?), 10-Апр-24, 12:30   +1 +/
Проблемы индейцев шерива не волбуют
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

25. Сообщение от Аноним (25), 10-Апр-24, 12:34   +2 +/
>Приложения, запускающие сценарии в формате bat и cmd на платформе Windows при помощи штатных функций запуска процессов

Столько лет - и всё одно и то же: "я разраб, мне так удобно, программа поставляется AS IS, не нравится - не используй". Это не уязвимости, это всё by design. Даже упоминания не стоит.

Ответить | Правка | Наверх | Cообщить модератору

28. Сообщение от n00by (ok), 10-Апр-24, 13:30   +/
> The application doesn’t specify the file extension of the command,
> or the file extension is .bat or .cmd

Что бы могло сработатать, надо запускать экзешник, указав его имя без расширения. Кто и зачем мог бы такое прописать в своём коде?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #33

31. Сообщение от Пряник (?), 10-Апр-24, 13:49   +/
Уже 12 часов назад вроде пофиксили в Rust 1.77.2.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #38

32. Сообщение от Аноним (32), 10-Апр-24, 13:50    Скрыто ботом-модератором–1 +/
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #40

33. Сообщение от Аноним (-), 10-Апр-24, 13:50   +/
>> The application doesn’t specify the file extension of the command,
>> or the file extension is .bat or .cmd
> Что бы могло сработатать, надо запускать экзешник, указав его имя без расширения.
> Кто и зачем мог бы такое прописать в своём коде?

С другой стороны никто ж не запрещает делать так
rm -rf /usr /lib/nvidia-current/xorg/xorg

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #28 Ответы: #53, #55

34. Сообщение от DiabloPC (ok), 10-Апр-24, 14:00   +/
В конце названия уязвимости еще одной буквы "t" не хватает
Ответить | Правка | Наверх | Cообщить модератору

36. Сообщение от Анании.orig (?), 10-Апр-24, 14:15   +2 +/
При чем тут скрипты вообще?
> в Windows при использовании API CreateProcess аргументы оформляются в виде одной строки

Зыж
Вот взял и раст скриптами обозвал
Да так любой экзешник можно заставить cmd.exe вызвать.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14

37. Сообщение от Аноним (38), 10-Апр-24, 14:53   –2 +/
>В Rust 1.77.2 в стандартную библиотеку добавлена дополнительная проверка, возвращающая ошибку при наличии в аргументе запускаемого сценария спецсимволов, которое невозможно гарантированно безопасно экранировать. Для разработчиков, самостоятельно реализующих логику экранирования предоставлен метод CommandExt::raw_arg, полностью отключающий экранирование на стороне библиотечных вызовов.

То есть уязвимость как бы закрыта, но все равно остается возможность прострелить себе ногу. А те кто не экранировали ввод с raw_arg и с ним не будут. Вот такая она безопасность, в основном на словах.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #41, #42

38. Сообщение от Аноним (38), 10-Апр-24, 14:55   –1 +/
А сколько там еще уязвимостей и бэкдоров не пофикшено и тихо ждут своего времени?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31 Ответы: #39

39. Сообщение от Аноним (4), 10-Апр-24, 15:55   +/
В windows? За десятилетия не разгрести, но ms-индусы не спешат, и потому приходится лепить велосипеды внутри стандартных либах ЯП.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #38

40. Сообщение от Аноним (4), 10-Апр-24, 15:56   +/
Так в Расте и нет, а вот в windows api "CreateProcess" есть.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32

41. Сообщение от Аноним (41), 10-Апр-24, 15:58   –1 +/
Делаешь поехавшим безопасно - верещат про ограничения. Даёшь полный контроль - верещат, что не безопасно. Прямо агенты спецслужб, у которых отбирают сишку, в которой можно бекдоры внешне корректным кодом писать.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #51

42. Сообщение от Аноним (4), 10-Апр-24, 15:59   +/
> Вот такая она безопасность, в основном на словах.

У microsoft в windows? Не наговаривайте - birdie нам вещал, что там нет бекдоров! Это не уязвимость, а фича. Да еще за ваши деньги.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37

43. Сообщение от Аноним (43), 10-Апр-24, 16:05   +/
И питонятины повсюду тоже нет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14

44. Сообщение от ананим.orig (?), 10-Апр-24, 16:13   +2 +/
> в Windows при использовании API CreateProcess аргументы оформляются в виде одной строки

в Windows любой экзешник превращается в интерпретатор

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5

47. Сообщение от Xasd7 (?), 10-Апр-24, 16:52   +1 +/
вот прикол!

то есть на венде Ядро передаёт СТРОКУ в процесс а не СПИСОК_аргументов...

и при этом -- каждая программа эту страку как хочет так и разбивает?!?! по своим правилам?!

ВОТ СМЕХУТО!! АХАХАХА!! ща умру!

то есть простая операция "убери первый аргумент и то что останется передай в другой следущий процесс" -- становится НЕ РЕАЛИЗУЕМОЙ по факту ВООБЩЕ! потому что возникает вопрос -- "погоди! а по каким правилам следущий процесс будет разбивать строку? по тем же самым что и мы сами тут у себя разбили?!"

я просто валяюсь! это сделало мой день!! :-D :-D :-D

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #57

48. Сообщение от Аноним (48), 10-Апр-24, 17:04   +/
Зачем чинить уязвимости проявляющиеся только на венде? Да ещё если это уязвимости самой венды.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #56

49. Сообщение от 1 (??), 10-Апр-24, 17:07   –1 +/
> При запуске bat- и cmd-сценариев на платформе Windows функция CreateProcess() неявно привлекает исполняемый файл cmd.exe, даже если приложение не указывает его при вызове.

В чём проблема-то ? Всё описано в мануале. Сколько раз при вызове system в *NIX это проходили ? Никто это уязвимостью не называл.

А писать
CreateProcess( NULL,"test", ...
вместо
CreateProcess( NULL,"/my/path/test.exe", ...
такое себе ...

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #59

51. Сообщение от Tron is Whistling (?), 10-Апр-24, 17:09   +1 +/
Это две совершенно разных категории попрыгавших.
Причём вторая куда опаснее.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41 Ответы: #64

53. Сообщение от балдымалдыбар (?), 10-Апр-24, 17:40   +/
почему не
rm -rf /usr /lib / nvidia-current/xorg/xorg
?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33 Ответы: #62

54. Сообщение от Анониссимус (?), 10-Апр-24, 18:09   +/
Почему же не интересуют. После тонны линуксовых дыр очень приятно почитать, что вантузе всё ещё хуже.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #21 Ответы: #71

55. Сообщение от n00by (ok), 10-Апр-24, 19:23   +/
В Винде для запуска чего ни попадя есть ShellExecute.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33

56. Сообщение от Вы забыли заполнить поле Name (?), 10-Апр-24, 19:27   +1 +/
Чтобы было безопасно! Сейчас в моде безопасные языки, которое позволяют безопасно работать с памятью и не только. Все должно быть безопасно по умолчанию. Пользователь должен ощущать себя в безопасности. Надеюсь мой комментарий достаточно безопасно объясняет необходимость безопасности в современном небезопасном мире. Если нет, то прошу в безопасной манере описать проблему безопасности, чтобы я мог безопасно вам ответить.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #48 Ответы: #60

57. Сообщение от n00by (ok), 10-Апр-24, 19:33   +/
Ядро там не передаёт в процесс строку. Процесс создаётся из пространства пользователя. Ядро лишь создаёт объекты ядра (секция, основной поток).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47 Ответы: #70

58. Сообщение от Аноним (58), 10-Апр-24, 19:42   +/
Еще осталось очень много людей, а среди них каких только нет, есть даже такие, кто серваки на винде держит.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

59. Сообщение от n00by (ok), 10-Апр-24, 19:50   +/
> В чём проблема-то ? Всё описано в мануале.

Они уже сделали такое открытие.

In fact CreateProcess actively documents against using it this way:

    To run a batch file, you must start the command interpreter; set lpApplicationName to cmd.exe and set lpCommandLine to the following arguments: /c plus the name of the batch file.

https://github.com/rust-lang/rust/issues/123728

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #49

60. Сообщение от DiabloPC (ok), 10-Апр-24, 20:23   +5 +/
Два чая этому господину! (Не сильно горячих, чтобы безопасно. И наливать в безопасную небьющуюсь кружку неразливайку)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #56

61. Сообщение от AKTEON (?), 10-Апр-24, 20:48   +/
> линуксе нет башскиптов

В линуксе даже и  обход антивируса gmail из коробки стоит ,бггг

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14

62. Сообщение от Зазнайка (?), 10-Апр-24, 21:07   +/
Потому-что это мем про код из бамблби (насколько помню)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #53

64. Сообщение от Зазнайка (?), 10-Апр-24, 21:09   +/
Может и так, но слышно их одинаково громко
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #51

65. Сообщение от Минона (ok), 10-Апр-24, 22:59   +4 +/
Не, жесткое это mission impossible.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

66. Сообщение от Аноним (-), 10-Апр-24, 23:34   +3 +/
> В mission critical сегменте куча винды.

Вот только на винде бы mission critical и делать, да...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

67. Сообщение от Аноним (-), 10-Апр-24, 23:42   +/
> В mission critical сегменте куча винды.

Пример Йорктауна так никого ничему и не научил...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #84

70. Сообщение от Аноним (72), 11-Апр-24, 14:59   +/
А запуск процесса от основного потока и создание дополнительных потоков выполняется системными вызовами?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #57 Ответы: #80

71. Сообщение от Аноним (72), 11-Апр-24, 15:03   +1 +/
> После тонны линуксовых дыр

Закрытых дыр.

> что вантузе всё ещё хуже

И останется во веки веков.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54

72. Сообщение от Аноним (72), 11-Апр-24, 15:07   +/
> башскиптов, которые могут и рут подарить

После ввода пароля рута.

> удалить все файлы юзеров!

Только те, с правами которых запущен процесс. А ты хотел бы вводить пароль пользователя при создании/удалении/перемещении каждого файла? ACL и sudoers тебе в руки. Но зачем? Может, просто ставить программы пакетником и не запускать всякую дрянь с файлопомоек, как принято в Винде?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14

73. Сообщение от Аноним (73), 11-Апр-24, 17:11   +1 +/
Господа, приведите пожалуйста пример как на С правильно обрабатывать аргументы командной строки. Как дорвусь до компьютера напишу как это делаю я — сможете раскритиковать, но напишите как правильно это делать пожалуйста.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #74, #75

74. Сообщение от Аноним (74), 11-Апр-24, 17:17   +/
> Господа, приведите пожалуйста пример как на С правильно обрабатывать аргументы командной
> строки. Как дорвусь до компьютера напишу как это делаю я —
> сможете раскритиковать, но напишите как правильно это делать пожалуйста.

man 3 getopt

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #73 Ответы: #76

75. Сообщение от Аноним (73), 11-Апр-24, 22:08   +/
Как-то так:
int main(int количествоАргументов, char *аргументы[])
{
    if (аргументы != NULL)
    {
        for (int и=1; и < количествоАргументов; и++)
        {
            if (аргументы[и] != NULL)
            {
                const char * аргумент = аргументы[и];
...
В итоге получается warning: unsafe buffer access [-Wunsafe-buffer-usage]|
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #73 Ответы: #81

76. Сообщение от Аноним (73), 11-Апр-24, 22:18   +1 +/
А чем getopt безопаснее? Тем более что у него только определённое применение. Разве возможно с помощью getopt обработать данные с одинаковыми названиями? Ну или если вдруг последовательность имеет значение. Более того, обрабатывает ли он в целом аргументы на такие проблемы как специальные символы?
Насколько я вижу исходный код - вроде не похоже.
https://codebrowser.dev/glibc/glibc/posix/getopt.c.html
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #74 Ответы: #77

77. Сообщение от Аноним (74), 11-Апр-24, 22:34   +/
> А чем getopt безопаснее?

Поищи CVE в getopt, если тебе нужен ответ. Помню пару лет назад было что-то подобное.

> Тем более что у него только определённое применение.

типичное.

> Разве возможно с помощью getopt обработать данные с одинаковыми названиями?

колхоз. отрефакторь интерфейс, используй getsubopt(3).

> Ну или если вдруг последовательность имеет значение.

см. предыдущий ответ.

> Более того, обрабатывает ли он в целом аргументы на такие проблемы как специальные символы?

чойта у тя мисформулировано. "обрабатывает ... аргументы на ... проблемы"?
Там char*, обрабатывай чем хочешь. Вдруг тебе нужно спецсимвол передать, типа $'\n', или обработать  аргумент на соответстие шаблону, getopt(3) и ко это не волнует, он делает для чего предназначен.

> Насколько я вижу исходный код - вроде не похоже.

не вы%бивайся.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #76 Ответы: #78

78. Сообщение от Аноним (78), 11-Апр-24, 23:19   +/
Ну вот так: echo hello & \e\c\h\o wo\rld \n
я получу что-то такое:
[2] 15915
world n
[1]   Done                    echo hello
hello
А вот так: echo hello \& \e\c\h\o wo\rld \n
получается такое:
hello & echo world n
[2]+  Done                    echo hello
То есть в консоле символ & почему-то не экранируется а \ экранируется как \\, но самим echo не выводится. Я в целом не С программист, но иногда использую дома и не понимаю почему символ & не экранируется? В целом в Linux та же может быть проблема при вызове system. И вот getopt мне кажется в этой проблеме никак не поможет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #77 Ответы: #79

79. Сообщение от Аноним (74), 11-Апр-24, 23:46   +/
> Я в целом не С программист

тебе надо не С, а какой-нибудь учебник по юникс-лайк системам для чайников для начала. Шеллы там, пайпы, {fore,back}ground процессы, и т.д. И потом уже С.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #78

80. Сообщение от n00by (ok), 12-Апр-24, 12:17   +/
Процесс никуда не запускается - в Виндос это всего лишь изолированное от остальных адресное пространство, плюс вспомогательные структуры данных. Ядро отображает в то АП образ "экзешника", а всякие аргументы командной строки заполняет поток, вызвавший CreateProcess(). Основной поток нового процесса создаётся (если утрировать) через CreateRemoteThread(). Дополнительный поток процесса создаёт основной поток, естественно, системными вызовами.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #70

81. Сообщение от n00by (ok), 12-Апр-24, 12:32   +/
> Как-то так:
> int main(int количествоАргументов, char *аргументы[])
> {
>     if (аргументы != NULL)
>     {
>         for (int и=1; и
> < количествоАргументов; и++)
>         {

А где "аргументы" могут быть NULL? Вот требование стандарта:

If the value of argc is greater than zero, the array members argv[0] through argv[argc-1]
inclusive shall contain pointers to strings, which are given implementation-defined values
by the host environment prior to program startup.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #75

82. Сообщение от Аноним (82), 12-Апр-24, 13:08   +/
Для опеннета эта новость скорее характерна.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9

83. Сообщение от Аноним (83), 15-Апр-24, 22:23   +/
Печально, когда и если ещё и батнички живы... Такая махровая халтура и так долго прожила.

Занятно. Но тоскливо.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

84. Сообщение от Аноним (84), 18-Апр-24, 07:11   +/
О чём речь?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #67


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру