我想写一个查询,它应该会给我带来以下详细信息:
主机、端口、用户名、密码。
发布于 2018-06-08 02:56:01
您可以使用以下命令获取登录用户和当前活动的角色
SELECT session_user, current_user;
您可以使用以下命令获取客户端地址和端口
SELECT client_addr, client_port
FROM pg_stat_activity
WHERE pid = pg_backend_pid();
您可以使用以下命令获取服务器端口
SHOW port;
没有办法用SQL找出服务器地址。
发布于 2018-06-08 06:50:12
您可以使用inet_server_addr()
获取当前连接的服务器地址,使用inet_server_port()
获取端口(但不是服务器侦听的所有地址和端口)。当前用户可以通过current_user
获取(如果您想获取会话用户,则可以使用session_user
)。(参见"9.25. System Information Functions")
密码在pg_catalog.pg_authid.rolpassword
中。但是普通用户可能没有查询pg_catalog.pg_authid
的权限。即使他们这样做了,密码很可能是MD5散列的,这是不可逆的。(参见"50.8. pg_authid
)
但是如果你得到了很多(真的很多!)现在,您可能希望尝试使用递归CTE对密码散列进行暴力攻击。
所有这些都会导致类似这样的结果:
WITH RECURSIVE c(c)
AS
(
SELECT chr(s.i) c FROM generate_series(97, 122) s(i)
UNION ALL
SELECT concat(c.c, chr(s.i))
FROM c
CROSS JOIN generate_series(97, 122) s(i)
WHERE length(concat(c.c, chr(s.i))) <= 4
)
SELECT inet_server_addr() "host",
inet_server_port() "port",
current_user "username",
c.c "password"
FROM pg_catalog.pg_authid pgai
INNER JOIN c c
ON pgai.rolpassword = concat('md5', md5(concat(c.c, current_user)))
AND pgai.rolname = current_user;
将生成的单词和使用的字符的最大长度更改为您想要尝试的长度。此示例使用长度不超过4的所有小写字母和单词。
(但请注意,您应该更多地将此视为一个笑话。想一想如何在SQL中做这样的事情是很有趣的。但是,为了获得一个好的密码,使用所有可打印文件并且长度足够长,您肯定不希望等待查询结束。;) )
发布于 2018-06-08 16:21:59
您不能显示当前密码。
要显示当前用户,服务器主机和端口使用:
SELECT CURRENT_USER, inet_server_addr( ), inet_server_port() port;
https://stackoverflow.com/questions/50747272
复制相似问题