The OpenNET Project / Index page

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



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

"Уязвимость в Dropbear SSH, допускающая подстановку команд в dbclient"  +/
Сообщение от opennews (??), 12-Май-25, 10:58 
Опубликован выпуск проекта Dropbear 2025.88, развивающего  сервер и клиент SSH, получивший распространение в  беспроводных маршрутизаторах и компактных дистрибутивах, подобных OpenWrt. В новой версии устранена уязвимость (CVE-2025-47203) в реализации SSH-клиента (программа dbclient), позволяющая выполнить shell-команды при обработке специально оформленного имени хоста. Уязвимость вызвана отсутсвием экранирования спецсимволов в имени хоста и использованием командного интерпретатора при запуске команд в режиме multihop (несколько хостов, разделённых запятой). Уязвимость представляет опасность для систем, запускающих dbclient с непроверенным именем хоста...

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

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

Оглавление

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

1. Сообщение от Аноним (1), 12-Май-25, 10:58    Скрыто ботом-модератором–2 +/
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2, #3

2. Сообщение от Аноним (2), 12-Май-25, 11:05   +13 +/
Удивительно. Уязвимости находят в кодовых базах одного из самого распространённого из системных языков. Вот это да!
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #11, #15, #18

3. Сообщение от Аноним (3), 12-Май-25, 11:08   +6 +/
Причем тут си, если проблемы в неверном экранировании символов для шела? Точно такие же проблемы будут если переписать и на расте, и на js и на java.

Си головного мозга

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

4. Сообщение от Аноним (4), 12-Май-25, 11:08   +/
>использованием командного интерпретатора при запуске команд

Сколько раз твердили миру: за использование `exec` для чего-либо кроме запуска команд, которые пользователь приказал запустить, нужно к стенке ставить.

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

5. Сообщение от Аноним (5), 12-Май-25, 11:09   +/
Так уязвимость получается не для серверов (маршрутизаторов), а для клиента.
Ответить | Правка | Наверх | Cообщить модератору

6. Сообщение от Смузихлеб забывший пароль (?), 12-Май-25, 11:25   +1 +/
> Уязвимость вызвана отсутсвием экранирования спецсимволов в имени хоста

Как же это замечательно. Зато, наверняка, и по типам всё проверяется и всё норм и всевозможные интеграции-тестирования успешно проходит и разработчики всевозможные КоК'и соблюдают да кодят "согласно регламентам и требованиям к оформлению"

Только, дыра есть. Точнее, дырища прямо на месте парадного входа, через которую и авианосец пролезет. Но это - мелочи. Главное - всё по регламентам. А остальное - мелочи

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

7. Сообщение от Аноним (7), 12-Май-25, 11:39   –1 +/
> Уязвимость вызвана отсутсвием экранирования спецсимволов в имени хоста

Подозреваю, что надо сказать спасибо дидам, которые накалякали невнятные RFC с взаимоисключающими определениями, какие символы допустимы, а какие нет.

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

9. Сообщение от Аноним (11), 12-Май-25, 11:46   +/
> Причем тут си, если проблемы в неверном экранировании символов для шела?

Если вместо традицинно опеннетного "да как он посмел катить бочку на любимую (и в последний раз использованную в laba3.c) сишечку!!1" глянуть в патч, то можно увидеть традиционно-сишное переизобретении лисапедов, не?

> Точно такие же проблемы будут если переписать и на расте, и на js и на java.

Я тебя сильно удивлю, но ... "готовые" (и массово используемые) либы намного менее проблематичны. Тупо потому что даже если авторы изначально тоже "не очень шарили" в предмете, то все же грабли всей толпой пользователей - выловливаются намного быстрее, чем в 100500й реализации "сугубо для внутреннего пользования".


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

10. Сообщение от aname (?), 12-Май-25, 11:48   +/
А как надо?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

11. Сообщение от Аноним (11), 12-Май-25, 11:48   +3 +/
> Удивительно. Уязвимости находят в 100500ом переизобретении лисапеда

Поправил, не благодари.

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

13. Сообщение от aname (?), 12-Май-25, 11:54   +/
> "готовые" (и массово используемые) либы намного менее проблематичны.

На C или расте?

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

14. Сообщение от aname (?), 12-Май-25, 11:55   +1 +/
Кстати, да, это существенно выправляет смысл
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11

15. Сообщение от Аноним (15), 12-Май-25, 12:08   –1 +/
А так в этом и проблема, родной! Про "системный" язык - это такая придумка, чтобы наделить сишку новыми полномочиями и в этих рамках разматывать аргументы. По факту Си - это никакой не "системный" (что вообще значит это определение?), а ЯП для написания ядер ОС. Для написания прикладного софта (а ssh это прикладной софт) есть языки гораздо более подходящие. Так что вопрос именно в этом - что взяли неподходящий инструмент.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #20, #35

16. Сообщение от Аноним (16), 12-Май-25, 12:28   +/
Главное что контроль за софтом - кого надо. От вредоносной функцио-анальности внесённой самим автором не защитит ничего. И у автора есть железобетонная отмазка: "проект делался исключительно для себя, я вас не заставлял его юзать"
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

17. Сообщение от Аноним (-), 12-Май-25, 12:34   +/
> На C или расте?

Разумеется не на си. В сишке нормальных либ для такого нет, а стандартная либа убогая до нельзя. Поэтому каждый пишет свой велосипед, вплоть до сплита строки. А потом оказывается что в нем дырень дарящая рут.

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

18. Сообщение от Аноним (20), 12-Май-25, 12:34   +1 +/
> Удивительно.

А чего тут удивительного, если мне нужен софт с бекдором и я буду писать на Си, так как его (Си) мало кто "знает" :)

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

20. Сообщение от Аноним (20), 12-Май-25, 12:39   +1 +/
> Так что вопрос именно в этом - что взяли неподходящий инструмент.

не подходящий для бекдоров? именно для этого и его в штатах форсили, а ведь эпоху начинали европейские языки. А сейчас такая же история с растом, это мнимая обманка безопасТности.

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

22. Сообщение от Аноним (22), 12-Май-25, 12:50   +2 +/
Opennet, это такой большой багтреккер.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #24

24. Сообщение от Аноним (24), 12-Май-25, 13:44   +8 +/
Баттхерт-треккер, я бы сказал)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #22 Ответы: #50

25. Сообщение от Аноним (24), 12-Май-25, 13:46   +/
Мда, всегда лично смотрел с подозрением на сабж, а после новости, тем более нафиг. Лучше уж что то стандарное, но протестированное.
Ответить | Правка | Наверх | Cообщить модератору

26. Сообщение от Аноним (26), 12-Май-25, 13:49   +/
Правильная система типов, с введением типа наподобие ExecArgumentString, который можно получить только как результат экранирования (function escapeExecArgument(string): ExecArgumentString), и который требуется сигнатурой exec(), проблему как раз решает.

Но про типы в этом контексте почему-то редко думают.

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

27. Сообщение от Аноним (26), 12-Май-25, 13:49   +/
Правильная система типов, с введением типа наподобие ExecArgumentString, который можно получить только как результат экранирования (function escapeExecArgument(string): ExecArgumentString), и который требуется сигнатурой exec(), проблему как раз решает.

Но про типы в этом контексте почему-то редко думают.

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

28. Сообщение от 12yoexpert (ok), 12-Май-25, 14:03   +/
раст это торговая марка, а не язык
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20

29. Сообщение от Аноним (-), 12-Май-25, 14:04   –1 +/
Пффф... О каких типах может идти речь,
если в том коде они вручную считали длину с magic numbers

- len += 4 + strlen(key->filename);

С другой стороны, что от сишки можно ожидать. Какие-то типы? Они даже строки нормальные не осилили.

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

30. Сообщение от Аноним (11), 12-Май-25, 14:17   +/
>> "готовые" (и массово используемые) либы намного менее проблематичны.
> На C или расте?

Э-э, и много ты знаешь много готовых (и используемых массово) сишных либ для экранирования символов?

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

31. Сообщение от Аноним (11), 12-Май-25, 14:52   +/
> Правильная система типов, с введением типа наподобие ExecArgumentString, который можно
> получить только как результат экранирования (function escapeExecArgument(string): ExecArgumentString),
> и который требуется сигнатурой exec(), проблему как раз решает.
> Но про типы в этом контексте почему-то редко думают.

Во-первых, в си - слабая типизация, с неявными приведениями и прочим (как и куча легаси)
Во-вторых -- ошибка там как раз в (самопальной) функции экранирования.


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

35. Сообщение от Аноним (-), 12-Май-25, 15:06   +3 +/
> А так в этом и проблема, родной! Про "системный" язык - это такая придумка,
> чтобы наделить сишку новыми полномочиями и в этих рамках разматывать аргументы.
> По факту Си - это никакой не "системный"

По факту на си написана почти вся реально исползуемая системщина, от фирмварей в самых мелких MCU до эвон каких операционок и core-софта для них. Без си вы просто пискнуть на этот форум - не сможете. На самом базовом уровне, от кучи фирмварей без которых у вас не будет ни винча/ssd, ни видяхи, ни даже клавы и монитора - до BIOS/UEFI и далее - ОС.

> Для написания прикладного софта (а ssh это прикладной софт) есть языки гораздо более подходящие.

Вот конкретно тому ssh надо быть - мелким и с минимумом зависимостей. Чтобы даже в мелкий роутер с 32 мегами оперативы на все лезть. Если этого не будет - этот проект просто никому даром не сдастся тогда.

А вы с вашими супер яп можете прийти и показать вон тем мастеркласс. Делом. Если вы тоже сможете жрать менее мега RSS - может и у вас будет какая-то ниша. Все познается в сравнении.

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

36. Сообщение от Аноним (-), 12-Май-25, 15:12   +/
>>использованием командного интерпретатора при запуске команд
> Сколько раз твердили миру: за использование `exec` для чего-либо кроме запуска команд,
> которые пользователь приказал запустить, нужно к стенке ставить.

Скорее за system(). Exec значительно безопаснее. Но ssh с его юниксвеем так работает что вот именно ssh сделать именно безопасно - и не встав на грабли - не очень просто. Допушения неудобные, и от клиента и от сервера требуется жесткая валидация все и вся, иначе те два самосвала грабель в полях - заедут ручкой по лбу, и еще скажите спасибо если оптимизаторы топор не насадили.

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

37. Сообщение от Аноним (26), 12-Май-25, 15:22   +1 +/
Я специально псевдокодом, синтаксически далёким от C, написал, чтобы было понятно, что я не про конкретный язык, а про то, что в типизации важна не только техническая, но и смысловая сторона. 10 долларов и 10 яблок - это разные вещи. Так же как и строка, несмотря на то, что это просто массив байт технически, может нести совершенно разную смысловую нагрузку.

Я такой подход называю "типизация вместо валидации". Провалидировать строку можно забыть. А если у меня тип Email, то я уверен, что этот массив байт прошёл валидацию и содержит валидный Email. А если окажется невалидный, то единственное проблемное место - это конструктор типа (emailFromString).

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

41. Сообщение от Аноним (11), 12-Май-25, 16:28   +/
> Я специально псевдокодом, синтаксически далёким от C, написал, чтобы было понятно, что
> я не про конкретный язык, а про то, что в типизации
> важна не только техническая, но и смысловая сторона.

...
> А если у меня тип Email, то я уверен, что этот
> массив байт прошёл валидацию и содержит валидный Email. А если окажется
> невалидный, то единственное проблемное место - это конструктор типа (emailFromString).

Это-то понятно, но как раз без "технической стороны" (т.е. поддержки ЯП/компилятором) привычку к такому подходу выработать довольно сложно, как и следовать ему (если только ты не единственный разработчик или не начнешь костылять с помощью struct и прочего, потому что сишный typedef - просто алиас).

Т.е. пишущие в основном на Си (в лучших традициях "Настоящий Погроммист может писать программы на Фортране^W Си на любом языке!") зачастую просто не в курсе, что "так тоже можно было" ...

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

43. Сообщение от aname (?), 12-Май-25, 16:59   +/
Это с учётом использования гугла или нет?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30

44. Сообщение от Аноним (44), 12-Май-25, 17:08   +1 +/
Поднимите руки те, кто использовал их клиентскую реализацию
Серверная в том же OpenWRT и всех прошивках на нем базирующихся(в том числе у Сяоми, у Тенды и прочих бюджетных роутерах), а вот где и кто использует их клиент вместо нормального из OpenSSH я не знаю и не встречал, если честно
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #46, #54

45. Сообщение от Аноним (45), 12-Май-25, 17:29   +/
Shell-out — самый обычный unix-way, в TAoUP это описано и именно в этом ключе. Ты сейчас фактически предложил поставить к стенке тех самыд дидов, которые юниксы сваяли и их ортодоксию^Wфилософию заложили.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #52

46. Сообщение от Аноним (45), 12-Май-25, 17:36   +/
Никогда не приходилось заходить по ssh прямо с роутера по link-local IP на полуживой хост? Хотя, глядя на OpenWRT, понимаю, что быстрее под кровать залезть и моник с клавой подключить, чем что-то там реанимировать как будто бы это unmanned pop за тридевять земель. Пожалуй ты прав, клиентом мало кто пользуется за пределами локалхоста, так что проблема несущественная. Поправили, и на том спасибо. Удивительно, что вообще заметил кто-то.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44 Ответы: #47, #53

47. Сообщение от Аноним (44), 12-Май-25, 17:42   +/
Знаешь, у меня у всех роутеров с ОпенВРТ достаточный объем накопителя и я всегда просто его собираю с клиентом от OpenSSH, вот и вообще не видел клиент от dropbear

Не, я помню как пару лет назад зачем-то пытался вспомнить как этот клиент вообще зовут, сидел и минут пять тупил, без гуглежа так и не мог вспомнить

Но по факту клиент вообще не используют же. Сервер да, много где и все такое, а клиент вообще по нулям. Так что и правда хорошо, что нашелся единственный пользователь и он нашел ошибку.

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

49. Сообщение от Аноним (-), 12-Май-25, 17:56   –1 +/
> Во-первых, в си - слабая типизация, с неявными приведениями и прочим (как
> и куча легаси)

Можно и не очень слабую сделать.
1) -Werror в хороших проектах так то норма.
2) typedef struct ... something_t - и теперь вообще попробуйте вместо something_t или такого указателя что-то другое дать вообще.
3) Со строками 2) кстати прекрасно катит и можно завести строки с .len.

> Во-вторых -- ошибка там как раз в (самопальной) функции экранирования.

#define "самопальный" :)


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

50. Сообщение от Аноним (-), 12-Май-25, 17:57   +/
> Баттхерт-треккер, я бы сказал)

Или просто батт-трекер, я бы сказал. Даже индекс топа a$$h0l3z интернета запросто может быть.

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

52. Сообщение от Аноним (52), 12-Май-25, 18:38   +/
Знаешь, unix-way - это вообще не об использовании баша. Он о декомпозиции. Более того, под "программами" "диды" понимали в том числе библиотеки. Это винда приучила всех делить на "приложение" и "компонент приложения" (dynamic-link-library). Академия, откуда родом "диды" - называла библиотеки библиотеками подПРОГРАММ, то есть "библиотека" - это на самом деле жаргон, ставший нормой. Unix-way не говорит нам завязываться на баш. Шелл вообще может быть полностью объектно-ориентированным, где вообще никаких пайпов, да и вообще никаких программ, а одни библиотеки, которые можно комбинировать любым способом. Причём безопасно (если без бэкдоров, но есть способы сделать так, что безопасно будет даже с бэкдорами ... и всё равно в рамках одного процесса!).

А использование шелла везде где попало - это просто тараканы в головах некоторых.

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

53. Сообщение от Аноним (53), 12-Май-25, 18:43   +/
Дорогой, если ты клиент вручную можешь запустить, то и ту команду, которую ты в имя хоста зачем-то воткнул, можешь и так запустить. Не понимаю чего все так возбудились.   Уязвимость скорее из категории когда клиента невозможно запускать вручную (нет шелла, только вэбморда какая нибудь которая дергает клиент для заданного хоста). Вот тогда приплетаешь хитрым образом шелл к имени хоста - и вуаля.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46

54. Сообщение от Аноним (54), 12-Май-25, 18:46   +2 +/
Набирать dbclient для ssh клиента... ШТА ?
Какой гений выбирал имя команды ?
Я если бы даже захотел - в жизнь бы не догадался.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44 Ответы: #63, #67

55. Сообщение от Аноним (55), 12-Май-25, 18:56   –1 +/
Dropbear в реальных системах вроде облаков популярен. Ну, в целом его любят за то, что он минималистичный и стабильный, чего про openssh никак не скажешь. Кто любит? Разные серьёзные дяди с датацентрами.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47 Ответы: #62

58. Сообщение от Аноним (-), 12-Май-25, 20:14   +/
> Шелл вообще может быть полностью объектно-ориентированным

Вообще-то McIlroy прямо требует:
"Write programs to handle text streams"

Так что объектно-ориентированный уже будет нарушением unix-way.

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

60. Сообщение от Аноним (45), 12-Май-25, 20:37   +/
Обмен сериализованнымт в текстовое представление объектами — это всё ещё unix-way, определение которого если и существует, то только вот в этих самых свидетельствах апостолов и толкованиях муллы, или уже нет?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #58 Ответы: #66

61. Сообщение от Аноним (45), 12-Май-25, 20:40   +/
Ты крайне плохо представляешь о чём ты говоришь. Когда концепцию назвали shell out, баш ещё не начали даже писать. Но мой тезис про ортодоксию ты таки подтвердил, молодец.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #52

62. Сообщение от Аноним (44), 12-Май-25, 21:25   –1 +/
Фантазер, мы тебя называли фантазер
dropbear это игрушка чисто для SOHO-роутеров, нет его нигде больше
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55 Ответы: #64

63. Сообщение от Аноним (44), 12-Май-25, 21:26   +/
Вот! Ты меня понимаешь, вот и я как-то даже захотев не мог вспомнить как его зовут
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54

64. Сообщение от Аноним (55), 12-Май-25, 21:39   –1 +/
Майкрософт для тебя роутеры?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #62

65. Сообщение от Аноним (-), 13-Май-25, 00:15   +/
>> Удивительно. Уязвимости находят в 100500ом переизобретении лисапеда
> Поправил, не благодари.

1) OpenSSH для мелких роутеров - слишком жирный.
2) И в нем кстати тоже находят CVE.

Вообще-то людям свойственно ошибаться. Откуда следует что CVE будут находить во всем что сделано людьми.

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

66. Сообщение от Аноним (-), 13-Май-25, 01:41   –1 +/
> Обмен сериализованнымт в текстовое представление объектами — это всё ещё unix-way,
> определение которого если и существует, то только вот в этих самых
> свидетельствах апостолов и толкованиях муллы, или уже нет?

Зачем в glue code для интерконекта нескольких простых шустрых программ - вообще заниматься вон тем? Чтобы вместо пяти минут на решение задачи - отношаться с ней полдня?

Это кусок бреда и гимрра на манер powershell. Извратить можно любую идею, и это отличный пример на эту тему.

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

67. Сообщение от Аноним (-), 13-Май-25, 01:43   +1 +/
> Набирать dbclient для ssh клиента... ШТА ?
> Какой гений выбирал имя команды ?

Если учесть что чам демон называется dropbear... "какой гений выбирал название сервака",  да? :)

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

68. Сообщение от Аноним (-), 13-Май-25, 01:55   +/
> Это-то понятно, но как раз без "технической стороны" (т.е. поддержки ЯП/компилятором) привычку
> к такому подходу выработать довольно сложно, как и следовать ему (если
> только ты не единственный разработчик или не начнешь костылять с помощью
> struct и прочего, потому что сишный typedef - просто алиас).

А в чем собссно костылирование с помощью struct? Как раз сложный тип, для валидации и в паре с typedef - самое то. Может передаваться весьма эффективно - по указателю - при том левый тип указателя в этом случае хрен так с наскока вообще скормишь. Билд свалится нахрен по "incompatible pointer type" при первом же поползновении.

Это конечно не сделает из си плюсы, оверлоад операторов от этого не отрастет, но оно и к лучшему порой - ибо помощью таких вещей порой делают очень неожиданные фокусы и майнтайнить такие программы потом вдолгую становится сущим кошмаром.

Прелесть сишки в том что это - минимальное, just enough языковое core достаточное для системных задач - и даже изрядного расширения себя. У всех остальных что-то сравнимое требует на порядки более сложных подходов.

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

69. Сообщение от Аноним (69), 13-Май-25, 14:54   +/
Вот и я спрашиваю - зачем геморроиться с вводом-выводом, сериализацией и парсингом вместо прямого использования библиотечных функций?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #66


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

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




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

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