Comments 21
declare @date datetime
,@tableHTML NVARCHAR(MAX)
,@emails NVARCHAR(MAX)
set @emails='nov@m'
SET @tableHTML =
N'<H1></H1>' +
N'<table bordercolor="green" border="2">' +
N'<tr bgcolor="#F7FF47"><th>Îòäåë</th><th>ÔÈÎ</th>
<th>Ïåðâûé ïðîõîä</th>
<th>Ïîñëåäíèé ïðîõîä</th>
<th>Âðåìÿ ðàáîòû</th>
</tr>'
select @tableHTML =@tableHTML +CAST(
(---------------
select
td=t.[dep]
,'' ,td=t.[name]
,'' ,td=t.[starttime]
,'' ,td=t.[endtime]
,'' ,td=t.[work]
,''
from (
-----------------
SELECT
dep
,name
,convert(varchar(20),starttime,120) as starttime
,convert(varchar(20),endtime,120) as endtime
,convert(varchar(20),(endtime -starttime),108) as work
FROM table
---------------
) as t
order by t.dep
for XML PATH('tr'), TYPE
)
as nvarchar(max))
select @tableHTML=@tableHTML+
N'</table>' +
N'<HR>'+
N'<b>Regards</b>';
--select @tableHTML
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'm',
@recipients=@emails,
@subject = 'Report',
@body = @tableHTML,
@body_format = 'HTML' ;
Причём данный способ вообще почти официальный
docs.microsoft.com/ru-ru/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql?view=sql-server-ver15#examples
У меня с одной работы остался расчудесный скрипт, который из MySQL базы, настроенной как linked server, из СКУД через MSSQL отправляет в екселе часы отработанные работниками за месяц. Тянет на целую статью в разделе abnormal programming.
Собственно вот они
Не там экономия, ох не там.
Можете обозначить как предлагается эксплуатировать теоретическую дыру в либе в данном случае?
Как вы будете инъекции производить?
Можете схематично прояснить, например, как начиная с формы на веб-странице вы выполните произвольный код из-за бага в XML библиотеке внутри рассылки почты из MS SQL?
Спасибо заранее.
А какая из уязвимостей XML либы микрософта может здесь что-то поломать?
XXE-инъекция требует, чтобы XML-документ был получен из ненадёжного источника, а тут он формируется полностью локально, средствами SQL Server.
Большая часть XXE-инъекций небольшая и вполне может поместится в 256 символов, которые, например, выделили для имени пользователя.
Вы забываете, что все XXE работают через DTD, а DTD надо ставить сразу после декларации XML, а не внутри случайного тэга или атрибута.
Плюс все попадающие в XML данные по-нормальному должны экранироваться, что так же исключает любые XXE.
Плюс все попадающие в XML данные по-нормальному должны экранироваться, что так же исключает любые XXE.
Должны, но в данном случае никакого экранирования не наблюдается.
Но не в этом дело. Изначальный комментарий был о том, что очередная обнаруженная уязвимость в подсистеме xml, запросто скомпроментирует все приложение. Такие уязвимости существуют и гарантии, что нашли все из них — нет. Т.е. практически не получив выгоды, была добавлена дополнительная точка отказа.
Где это экранирования не наблюдается-то?
Должны, но в данном случае никакого экранирования не наблюдается.
Волшебный ответ. Диалог похож на разговор физика и домохозяйки, которая считает, что электрический радиатор отопления в отличие от паровых батарей «сжигает кислород», но при этом привести аргумент, отличный от «ну греется, значит сжигает же» не в состоянии.
Извините.
Респект автору за такле, ведь OLE это же небезопасно, может утекать память, стабильность сервера под вопросом. Также включать функционал для выполнения таких нестандартных функций это значит поощрять ичпользование sql server не по назначению.
лучше уж оффлоадить такие задачи на SSRS/SSIS, а не хардкодить простыню кода которую никто не разберет потом
XSL-трансформация на MS SQL без CLR