我想了解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。
答案 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。