windows 中如何实现类似 runas /env,提权但是使用当前用户环境?

2023-03-09 10:14:26 +08:00
 Tamamopoi
runas 需要手动输入密码,/savecred 的话第一次需要输入密码,而且凭据保存在凭据管理器中,并不安全。
目前使用的是 lsrunase ,密码可以加密写入脚本,但是无法使用当前环境变量。

比如使用 runas 与 lsrunase 命令使用 admin 启动 cmd ,输入 SET 查看环境变量,都是 admin 账户的环境变量。
但是使用 runas 加上 /env 参数的话,输入 SET 查看环境变量,就是当前用户的环境变量。

环境变量不同,会导致安装程序默认安装路径读取错误,或者默认安装到 admin 的 Appdata 下了。点名批评飞书。

还有一些解决方案均失败:
-使用 sanur 将密码传递给 runas ,貌似仅限于 32 位系统使用。64 位系统会报错。
-使用管道命令等传递密码均失败,runas 拒绝接受"|" "<" 等传递参数。

求解。
922 次点击
所在节点    问与答
7 条回复
systemcall
2023-03-09 10:21:36 +08:00
右键 以管理员身份运行
ysc3839
2023-03-09 10:47:15 +08:00
Tamamopoi
2023-03-09 11:20:45 +08:00
@ysc3839 感谢回复。试用了 psexec 的-e 参数,还是不行。

psexec 启动 cmd:
USERPROFILE=C:\Users\Administrator

psexec 添加-e 参数,不加载配置文件启动 cmd:
USERPROFILE=C:\Users\Default

runas 的 /env 参数启动 cmd:
USERPROFILE=C:\Users\poi

psexec 也无法替代 runas...
Tamamopoi
2023-03-09 11:24:21 +08:00
@systemcall 域环境下给特殊 app 使用,没有管理员权限。
ysc3839
2023-03-09 12:55:01 +08:00
@Tamamopoi 那大概只能自己写代码了,runas 的原理很简单,目前就只是缺个自动输入密码的方法。
Tamamopoi
2023-03-09 20:40:30 +08:00
@ysc3839 使用 myrunas 这个工具解决了。https://bbs.kanxue.com/thread-185411.htm
Tamamopoi
2023-03-09 20:49:21 +08:00
@ysc3839 没编辑完,按 ctrl+回车发出去了...
使用 myrunas 这个工具解决了。看雪:bbs.kanxue.com/thread-185411.htm
我用的 vs2019 ,runasdll 源码中最后的 test 函数必须重新命名,用 test 编译器会报错。
同时需要更改 output.def 中的 test 编译。

缺点是,这个工具需要读取 MyRunas.ini 中的密码,而且是明文储存...并不安全。临时把密码硬编码写入 dll 编译,明天上班再加点加解密算法了。


只要在源代码 dllmain.cpp 中的
if (!strlen(szPassword))
{
printf("读取密码文件%s 失败,请检查设置是否正确!\n", szIniFile);
MessageBox(NULL, "读取密码文件失败,请检查设置是否正确!", "", NULL);
}
else
{
MByteToWChar(szPassword, wcsPassword, sizeof(wcsPassword)/sizeof(wcsPassword[0]));
}


改为
if (!strlen(szPassword))
{
strcpy(szPassword, "123456");
MByteToWChar(szPassword, wcsPassword, sizeof(wcsPassword) / sizeof(wcsPassword[0]));
}
else
{
MByteToWChar(szPassword, wcsPassword, sizeof(wcsPassword)/sizeof(wcsPassword[0]));
}


直接把密码 123456 写入 szPassword 中重新编译出 dll 就可以。
MyRunas.ini 直接删掉就好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/922490

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX