跳过运行xp_cmdshell的字符

时间:2016-09-23 18:41:47

标签: sql-server tsql xp-cmdshell

我知道我需要逃避@cmd var才能运行:

declare @cmd 'xp_cmdshell ''echo Mary|Warrior > c:\test.txt'''
exec (@cmd)

因为字符'|'运行命令时会失败。

所以,之前的运行我设置:

set @cmd = replace(@cmd, '|', '^|')

由于@cmd var可以是任何字符串(由用户发送)......我还需要担心哪些其他字符?

(我知道其中几个,例如>,<)

2 个答案:

答案 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)