2016-09-23 94 views
0

我知道我需要逃避@cmd变种运行:excaping字符运行xp_cmdshell的

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

因为字符“|”运行该命令时会失败。

所以,以前跑我设置:

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

由于@cmd变种可以是任意的字符串(用户发送)...我需要什么其他字符可担心的?

(我知道他们夫妇如>的,<)

+1

为什么要执行从您的用户收到的字符串值?这是一个潜在的sql注入漏洞。 –

回答

0

您可以尝试使用此查询,肖恩提到它是潜在的SQL注入

declare @cmd nvarchar(500) = N'echo ''Mary|Warrior'' > c:\test.txt' 
exec master.sys.xp_cmdshell @cmd 
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)