Postgresql

我正在嘗試在 PostgreSQL 13 中我自己的函式中進行 SQL 注入

  • March 11, 2022

僅出於學習目的,我正在嘗試使用 PLPGSQL 創建一個函式並對其進行 SQL 注入。我最近了解了format,USINGquote_literalquote_indent所以我很擅長避免 SQL 注入。我想要做的是創建一個允許 SQL 注入的函式(即 a drop table)。

所以我寫了這個:

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);我得到了這個錯誤:

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

所以我認為這不是它的完成方式。如何實現這種 SQL 注入?

您必須使其成為有效的 SQL 語句:

SELECT badfunc('(VALUES ('done')) AS x(fullname); drop table tb_students; --', 1001);

在這種情況下,PostgreSQL 的內部限制阻止您進行多語句注入。您可能不得不接受數據洩漏。

SELECT badfunc('tb_students', '1001 union all select concat(rolname,rolpassword) from pg_authid');

引用自:https://dba.stackexchange.com/questions/308621