【问题标题】:excaping characters to run xp_cmdshell转义字符以运行 xp_cmdshell
【发布时间】:2016-09-23 18:41:46
【问题描述】:

我知道我需要转义 @cmd var 才能运行:

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

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

所以,我之前的跑步设置:

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

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

(我知道其中有几个,例如 >、

【问题讨论】:

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

标签: sql-server tsql xp-cmdshell


【解决方案1】:

您可以尝试使用此查询,正如肖恩所说,这是潜在的 sql 注入

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

【讨论】:

    【解决方案2】:

    使用^ 转义特殊字符。

    declare @cmd varchar(max) = N'echo Mary^|Warrior > C:\test1.txt'
    exec master.sys.xp_cmdshell @cmd
    

    declare @cmd1 varchar(max) = N'xp_cmdshell ''echo Mary^|Warrior > C:\test11.txt'''
    exec (@cmd1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多