【参考1】:
Cacls可以显示或修改任意访问控制列表 (DACL) 文件。
前几天在L.S.T的群里,有人问到这个问题,在Webshell或者注入的时候执行Cacls命令会提示“是否确定(Y/N)?”,因为我们无法输入“Y”来确认,所以我们就无法成功执行Cacls命令。记得以前有个方法是执行“echo Y|cacls C:\slyar\ /g everyone:F”这样的命令,运用管道来使得Cacls无需确认执行,但是今天试验后发现本地可以成功,而在Webshell里还是不成功。。。
在查看Cacls帮助后经过研究得出的结论是:
Cacls只加参数/G后执行会提示“是否确定(Y/N)?”, 因为我们在Webshell或者注入的时候里不能键入“Y”,因此不能成功执行。
Cacls加入参数 /E /G后不会出现提示而直接执行。所以我们直接执行带 /E /G 参数的Cacls命令就可以不经确认直接执行了。
但是这里有一个特殊情况:参数 /E 的作用是“编辑 ACL 而不替换”,而如果目标目录里已经包含了“everyone:R”的权限设置的话,那么执行命令后仍然是“everyone: R”。。。对于这种情况,我们首先要用 /D 参数把要赋权的用户拒绝访问目标目录,然后再进行赋权。
那么我们需要执行的命令依次是:
cacls C:\slyar\ /E /D everyone
cacls C:\slyar\ /E /G everyone:F
【参考2:】
CACLS filename [/T] [/M] [/S[:SDDL]] [/E] [/C] [/G user:perm] [/R user [...]]
[/P user:perm [...]] [/D user [...]]
filename Displays ACLs.
/T 更改当前目录及其所有子目录中指定
文件的 ACL。
/M 将装入卷的 ACL 更改到目录。
/S 显示 DACL 的 SDDL 字符串。
/S:SDDL 用 SDDL 字符串中指定的 ACL 替换
(与 /E、/G、/R、/P 或 /D 一起使用时无效)。
/E 编辑 ACL 而不替换。
/C 在出现拒绝访问错误时继续。
/G user:perm 赋予指定用户访问权限。
Perm 可以是: R 读取
W 写入
C 更改(写入)
F 完全控制
/R user 撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。
/P user:perm 替换指定用户的访问权限。
Perm 可以是: N 无
R 读取
W 写入
C 更改(写入)
F 完全控制
/D user 拒绝指定用户的访问。
在命令中可以使用通配符指定多个文件。也可以在命令中指定
多个用户。
缩写:
CI - 容器继承。
ACE 会由目录继承。
OI - 对象继承。
ACE 会由文件继承。
IO - 只继承。
ACE 不适用于当前文件/目录。