我知道我需要逃避@cmd var才能运行:
declare @cmd 'xp_cmdshell ''echo Mary|Warrior > c:\test.txt'''
exec (@cmd)
因为字符'|'运行命令时会失败。
所以,之前的运行我设置:
set @cmd = replace(@cmd, '|', '^|')
由于@cmd var可以是任何字符串(由用户发送)......我还需要担心哪些其他字符?
(我知道其中几个,例如>,<)
答案 0 :(得分:0)
您可以尝试使用此查询,正如肖恩提到的那样,它是潜在的SQL注入
declare @cmd nvarchar(500) = N'echo ''Mary|Warrior'' > c:\test.txt'
exec master.sys.xp_cmdshell @cmd
答案 1 :(得分:0)
使用^
来转义特殊字符。
declare @cmd varchar(max) = N'echo Mary^|Warrior > C:\test1.txt'
exec master.sys.xp_cmdshell @cmd
OR
declare @cmd1 varchar(max) = N'xp_cmdshell ''echo Mary^|Warrior > C:\test11.txt'''
exec (@cmd1)