You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Windows上安装OSQuery的用户SID并实现注册表查询方案

如何在Windows中获取OSQuery安装用户的SID并查询其注册表项

一、核心背景说明

OSQuery无法直接查询CURRENT_USER注册表 hive,必须通过用户SID定位HKEY_USERS下对应的用户注册表分支。但logged_in_users表返回的是当前所有登录用户,不一定等于安装OSQuery的用户,因此需要更精准的定位方法。

二、获取OSQuery安装用户的SID

方法1:通过服务/进程信息反推

如果OSQuery以服务形式运行,可先查询服务运行用户,再关联users表获取SID:

-- 查询OSQuery服务的运行用户
SELECT username FROM services WHERE name = 'osqueryd';

-- 根据用户名获取对应SID
SELECT sid FROM users WHERE username = '上述查询得到的用户名';

如果是手动启动的OSQuery进程,可通过进程表获取启动用户:

-- 查询OSQuery进程的启动用户
SELECT username FROM processes WHERE name IN ('osqueryi.exe', 'osqueryd.exe');

-- 关联users表获取SID
SELECT sid FROM users WHERE username = '上述查询得到的用户名';

方法2:通过安装路径注册表项定位

OSQuery的安装路径通常会记录在注册表中,可先找到路径再获取所有者,最终映射到SID:

-- 查询OSQuery的安装路径注册表项
SELECT key, value FROM registry WHERE key LIKE '%SOFTWARE%osquery%' AND value LIKE '%osqueryd.exe';

拿到路径后,通过Windows命令行获取该文件的所有者:

icacls "C:\Program Files\osquery\osqueryd.exe" | findstr /i "OWNER"

再用OSQuery查询该用户的SID:

SELECT sid FROM users WHERE username = '获取到的所有者用户名';

三、查询目标用户的注册表项

拿到SID后,即可精准查询该用户在HKEY_USERS下的注册表项:

-- 替换为实际获取到的SID
SELECT * FROM registry WHERE key LIKE '%S-1-5-21-XXXXXXXXX-XXXXXXXXX-XXXXXXXXX-XXXXXX%';

如果需要批量查询所有登录用户的注册表项,可使用关联查询:

SELECT r.* 
FROM registry r
JOIN logged_in_users liu ON r.key LIKE '%' || liu.sid || '%';

四、注意事项

  • 若OSQuery以SYSTEM权限运行,logged_in_users返回的是当前所有交互式登录用户,但安装用户可能已注销不在其中。
  • 优先通过服务/进程的运行用户定位,因为安装OSQuery的用户通常就是配置服务启动的用户,或是手动启动进程的用户。

内容的提问来源于stack exchange,提问作者Andrew Zick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:01:19