使用Npgsql / Postgres的SQLInjection

时间:2017-06-30 10:57:44

标签: c# postgresql sql-injection npgsql

我想了解SQLInjection如何使用PostgresqlDb。我在C#中使用Npgsql。

因此,当我重命名文件夹时,这是我的查询:

table

我现在尝试将以下值传递到文本字段:

cmd.CommandText = "UPDATE allfolder.folder SET folder_name = '" + foldernamenew + "'";
cmd.ExecuteNonQuery();

然后AJAX被解雇了。

我假设的输出是,表中的所有文件夹都有folder_name“abcdef”,并且我有一个名为“aaaaaa”的id为“56”的新文件夹。情况并非如此,因为分号未被识别为分隔符,因此每个folder_name的名称为“abcdef; INSERT INTO ....”。我不想在数据库方面改变它允许多个版本。

所以我的问题是: 我如何准备SQL语句,我实现了注入? 当你不被允许执行第二次qry因为分号不被识别时,注射是否可行?

我只是谈论Npgsql和postgres。

2 个答案:

答案 0 :(得分:1)

正如Laurenz上面提到的,这应该有效:

abcdef'; INSERT INTO allfolder.folder (id, folder_name) VALUES (56,'aaaaaaa'); -- test

请确保您不要混用单引号和双引号。 SQL中常见的错误。分号前需要单引号,否则它在textstring中,因为你没有分隔符。

答案 1 :(得分:0)

“Multiqueries”(一行中的多个查询,以分号分隔)在PostgreSQL中始终

您的问题是SQL中的多个错误:

  • abcdef之后缺少单引号。
  • aaaaaaa周围使用双引号而不是单引号。
  • 声明末尾没有单引号或行注释。

尖锐地说:在学习SQL注入之前,你必须学习SQL。