2016-09-23 51 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)