postgresql 旧的postgres数据库,服务于IIS后面的汇合wiki,数据库中的所有表有时会被删除

toiithl6  于 9个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(98)

我们有一个旧的Postgres数据库,在IIS后面服务于汇合wiki。有时,数据库中的所有表都会被删除。
有谁能给予点提示帮我理解这个问题吗?似乎这可能是一个安全问题。
我在IIS日志中没有发现任何东西(确实期望注入攻击)。在Windows事件列表中没有发现任何特殊的东西(应用程序+安全性)
在postgresdb日志中,我们看到的唯一一个明确的点是操作被执行了(在此之前,一个获取所有可用表的调用也是可见的)。
除了Windows Server 2022之外,所有软件都有10年的历史。

  1. Postgres 9.2版
    1.日志中的一些条目:2023-12-20 12:01:02 PST错误:表“contentlock”不存在2023-12-20 12:01:02 PST声明:删除表内容2023-12-20 12:01:02 PST错误:当前事务中止,忽略命令直到事务块结束2023-12-20 12:01:02 PST声明:SELECT NULL AS TABLE_CAT,n.nspname AS TABLE_SCHEM,c.relname AS TABLE_NAME,CASE n.nspname ~ '^pg_' OR n.nspname = 'information_schema' WHEN true THEN CASE WHEN n.nspname = 'pg_catalog' OR n.nspname = 'information_schema' THEN CASE c.relkind WHEN 'r' THEN 'SYSTEM TABLE' WHEN 'v' THEN 'SYSTEM VIEW' WHEN 'i' THEN 'SYSTEM INDEX' ELSE NULL END WHEN n.nspname = 'pg_吐司' THEN CASE C.relkind WHEN 'r' THEN'SYSTEM吐司TABLE' WHEN 'i' THEN 'SYSTEM吐司INDEX' ELSE NULL END ELSE CASE C.relkind WHEN 'r' THEN 'TEMPORARY TABLE' WHEN'i' THEN 'TEMPORARY INDEX' WHEN 'S' THEN 'TEMPORARY SEQUENCE' WHEN 'v' THEN 'TEMPORARY VIEW' ELSE NULL END WHEN false THEN CASE c.relkind WHEN 'r' THEN 'TABLE' WHEN 'i' THEN 'INDEX' WHEN 'S' THEN 'SEQUENCE' WHEN 'v' THEN 'VIEW' WHEN 'c' THEN 'TYPE' WHEN 'f' THEN 'FOREIGN TABLE' ELSE NULL END ELSE NULL END AS TABLE_TYPE,NULL END d.description AS REMARKS FROM pg_catalog.pg_namespace n,pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_description d ON(c.oid = d.objoid AND d.objsubid = 0)LEFT JOIN pg_catalog.pg_class dc ON(d.classoid=dc.oid AND dc.relname='pg_class')LEFT JOIN pg_catalog.pg_namespace dn ON(dn.oid=dc.relnamespace AND dn.nspname='pg_catalog')WHERE c.relnamespace = n.oid AND c.relname LIKE 'PROBABLYNOT' AND(false OR(c.relkind = 'r' AND n.nspname!~ '^pg_' AND n.nspname <> 'information_schema'))ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME 2023-12-20 12:01:06 PST错误:关系“cwd_app_dir_group_mapping”不存在2023-12-20 12:01:06 PST STATEMENT:alter table cwd_app_dir_group_mapping drop constraint fk_app_dir_group_app
sbtkgmzw

sbtkgmzw1#

更改所有密码后...
假设你的网络软件使用一个库或ORM来进行数据库查询,你有一个单一的地方,你可以拦截所有的查询。所以你需要在那里放一些代码来检测这个黑客所做的查询,当他们被检测到时,首先不要做查询,第二,记录所有你能记录的东西。你还应该配置IIS以更好地记录。然后,也许你可以使用这些信息来找到代码中的漏洞并修补它。
如果你的代码在随机的地方喷上了“pg_query(...)”,那么你可能在某个地方有SQL注入,因为“手工”引用参数是bug的一个秘诀。
也就是说,它可能不是SQL注入,也可能是远程代码执行,远程shell等。
如果你使用的是过时的网络应用程序(php论坛或其他),那么它需要打补丁和更新。
假设您的IIS服务器使用数据库用户“webiser”连接到数据库。
创建一个新的数据库用户,比如说“user2”,他将拥有所有权限。这个想法是尽可能地限制webiser。目标是防止坏的事情发生,同时也提出一个错误,这样你就可以跟踪它并修补漏洞。这些不是永久的修复,而是获得更多信息的方法。
首先,如果你的应用不需要列出表或对information_schema做任何事情,只需撤销它和system tables上的所有权限,这样webiser就不能列出表了。
Webiser可能是表的所有者,这意味着它可以对表做任何事情,包括DROP。为了防止这种情况,您可以将所有表的所有权授予user2,并从webiser撤销所有内容(数据库,表等)的所有权。然后选择性地仅将所需的privileges授予webiser(即,选择,更新,删除)。

相关问题