是否可以使用 xp_cmdshell 来格式化硬盘?

是否可以使用 xp_cmdshell 来格式化硬盘?

我在工作中查看了一些编码标准,然后发现了这一点:

string query = "SELECT * FROM USERS WHERE USER_ID='" + userIdFromWebPage + "'";

userIdFromWebPage 是一个包含未经验证的不受信任数据的变量。

假设它包含下列内容之一:

  • “' 或 1=1 -”
  • “';删除表用户-”
  • “';exec xp_cmdshell(''格式 c:')-”

最终的查询可能看起来像这样。

string query = "select * FROM USERS WHERE USER_ID='';exec xp_cmdshell('format c:') -";

这会导致数据库服务器上的 c:\ 驱动器格式化。

这是真的吗?

答案1

真正的问题是can that code be used for SQL Injection?,答案绝对是肯定的。破坏者格式化您的驱动器以制造混乱的日子已经一去不复返了,如今的攻击是由那些对经济利益感兴趣的人发起的,他们通常会使用 SQL 注入向量将您的主机添加到他们的僵尸网络中,有时是为了窃取您可能拥有的信息,有时是为了劫持您的数据并索要赎金(加密并要求赔偿解密费用)。所以他们不太可能发布format c:

可以xp_cmdshell用于发出类似format c:? 的命令,默认情况下不是,自从 SQL 2005 以来,引擎xp_cmdshell默认禁用管理员必须明确启用它。但如果启用后,可以使用吗?是的。操作系统会格式化 c: 驱动器吗?不太可能。目前没有操作系统接受系统卷的格式。

但最终的重点是你的代码应该不允许 SQL 注入

相关内容