已思考 24 秒
借着 Week 2 · Day 4 的号角,我们把权限系统这条「双持长枪」摆上擂台:一边是 Windows DACL/icacls,另一边是 Linux sudoers。你将看到二者在授权语法、常见配置漏洞与提权打法上的一一对照——尤其关注 可写服务(Writable Service)、NOPASSWD sudo 等经典突破口。读完这篇,你不仅能用 icacls
和 visudo
各自“开天眼”找弱点,还能立刻写出加固清单,做到攻防兼修。
1 权限模型鸟瞰
1.1 Windows:对象 + SID + DACL
- 每个文件/服务/注册表键含 安全描述符 SD,内部保存两张 ACL:DACL 控谁能干什么,SACL 控审计。(微软技术社区)
- 条目单位叫 ACE,描述「SID ➜ 权限位」。工具首选
icacls
(取代旧cacls
)。(微软学习)
1.2 Linux:用户/组位 + SUID + sudoers
- 标准 DAC 通过
rwx
位和 UID/GID 判定;需要跨用户执行高权任务时,用 SUID 或sudo
升权。 sudoers
文件(/etc/sudoers
)由visudo
管理,可细粒度限定命令、RunAs 对象、是否要密码。(Super User)
2 核心指令对照
目标 | Windows (icacls) | Linux (sudoers) |
---|---|---|
查看权限 | icacls C:\path\file (微软学习) | ls -l / sudo -l (Stack Overflow) |
授权用户读写 | icacls C:\data /grant demo:(M) | demo ALL=(root) /usr/bin/vim |
删除 ACE | icacls C:\data /remove demo | demo 行前加 # 注释 |
批量继承 | /t /c 递归 | Defaults !requiretty 等全局指令 |
转存 & 还原 | /save acl.txt → /restore | 备份 /etc/sudoers ;roll-back via visudo -f |
记忆窍门:
icacls /grant
≈sudoers ALL=(root)
;F
(Full)≈NOPASSWD: ALL
。
3 提权面危险对照表
攻击面 | Windows 典型漏洞 | Linux 类比 | 利用思路 |
---|---|---|---|
可写服务二进制 | 服务映像路径对 Users 可写 → 改 DLL/Binary 拿 SYSTEM (InfoSec Governance -) | SUID 脚本世界可写 | 重写文件 → 下次启动提权 |
服务控制权限 | ACE 允许 SERVICE_CHANGE_CONFIG → 指向恶意可执行 (微软学习) | sudo demo ALL=NOPASSWD: /bin/systemctl restart * | 重配服务 → 重启拿 root |
Unquoted Path | "C:\Program Files\My App\svc.exe" 未加引号 → 上传 Program.bat (Microsoft for Developers) | PATH 优先级劫持 | 系统在空格处截断,先执行恶意文件 |
DLL 搜索顺序 | %PATH% 前目录可写 → 投放 DLL 注入 | LD_PRELOAD 保留 | 劫持加载顺序 |
NOPASSWD sudo | —— | demo ALL=(root) NOPASSWD: /usr/bin/vim (docs.datadoghq.com) | :!/bin/sh 弹 root shell |
可写 sudoers | —— | /etc/sudoers 可写 | 添加 ALL=(ALL) NOPASSWD:ALL 即永久提权 |
Weak Registry Key | 服务 ImagePath 键 ACL 可写 | —— | 修改键值指向后门 exe |
4 动手演练:三分钟快速侦察
4.1 Windows:找“可写服务”
# 枚举自启动服务 + 权限
Get-WmiObject win32_service |
Where-Object {$_.StartMode -eq "Auto"} |
Select Name,PathName |
ForEach-Object {
icacls $_.PathName.Split(' ')[0] /c
} | findstr "(M)" # 查谁有 Modify
icacls … (M)
显示 Modify 权限——高危目标!(微软学习)- 如可写,再用
sc config
把binPath=
改到你上传的 shell。
4.2 Linux:列出 NOPASSWD sudo
sudo -l
# 结果示例
(ALL) NOPASSWD: /usr/bin/vim /etc/httpd/httpd.conf
- 交互式程序 (
vim
,less
) 一旦免密,即可:!/bin/sh
反弹 root。(Medium) - 写权限到任何脚本,如
/etc/init.d/backup.sh
,立刻 SUID 化。
5 防御清单(双平台)
场景 | 加固动作 |
---|---|
可写服务 | icacls <svc.exe> /inheritance:r /grant:r "SYSTEM:(RX)" ;Linux 用 chown root:root + chmod 755 |
控制权限 | 用 sc sdset 设置 D:(A;;CCDCLCSWRPWPDTLOCRRC;;;SY) 仅 SYSTEM 可改;sudoers 里 禁止通配符,拆分规则 |
Unquoted Path | sc qc <service> 检查;加引号 "C:\Program Files\App\svc.exe" |
sudo NOPASSWD | 仅对自动化账号加特定命令;给每条规则加 !setenv ,避免 LD_PRELOAD 注入 |
监控 | Windows 启用 AppLocker、Sysmon ID 4657;Linux auditd -w /etc/sudoers -p wa |
6 总结 & 彩蛋
- icacls ↔ sudoers 都是「写文本」即可改变高权行为;误配置=送钥匙给攻击者。
- 最致命的两类:用户可写二进制/脚本、免验证高权命令。
- 对照表背后逻辑一致:先找 可写/可改→再看 执行上下文→最后落地 Shell。
- 彩蛋:
icacls C:\temp /save acl.txt && icacls /restore
≈visudo -f /etc/sudoers.tmp
——脚本化批量备份 / 回滚同样简单。
练完本节,你已经能在 Windows 上用 icacls
扫弱服务,在 Linux 上用 sudo -l
一眼洞悉 NOPASSWD,并写出对照 Hardening checklist。下一篇 Day 5,将正式进入 TCP/IP 协议抓包 —— 用 Wireshark 看 “三次握手” 的每一比特。冲!
参考链接
- Microsoft icacls 官方文档 (微软学习)
- Delinea: Windows Privilege Escalation 综述 (Delinea)
- Unquoted Service Path 修复指南 (InfoSec Governance -)
- Medium:Linux sudo NOPASSWD 漏洞演示 (Medium)
- Stack Exchange:sudo 权限粒度讨论 (Super User)
- Microsoft TechCommunity:SDDL/DACL 基础 (微软技术社区)
- StackOverflow:icacls 授权示例 (Stack Overflow)
- Qualys 报告:弱服务权限检测 (微软学习)
- MS DevBlog:Unquoted Path 安全实践 (Microsoft for Developers)
- Datadog 安全规则:sudo 需再认证 (docs.datadoghq.com)
- Information Security.SE:sudo 安全误区 (Information Security Stack Exchange)
- Server Fault 讨论 sudo 风险 (Server Fault)
- Medium:Linux Priv-Esc 技巧汇总 (aditya-chauhan17.medium.com)