linux如何隐藏密码,linux – 如何隐藏作为命令行参数传递的密码?

真的,这应该在应用程序本身中修复.此类应用程序应该是开源的,因此应该可以选择在应用程序本身中修复问题.与此类错误相关的安全相关应用程序也可能会出现其他错误,因此我不相信它.

简单的插入器

但是你要求采用不同的方式,所以这里有一个:

#define _GNU_SOURCE

#include

int __libc_start_main(

int (*main) (int, char * *, char * *),

int argc, char * * ubp_av,

void (*init) (void),

void (*fini) (void),

void (*rtld_fini) (void),

void (* stack_end)

)

{

int (*next)(

int (*main) (int, char * *, char * *),

int argc, char * * ubp_av,

void (*init) (void),

void (*fini) (void),

void (*rtld_fini) (void),

void (* stack_end)

) = dlsym(RTLD_NEXT, "__libc_start_main");

ubp_av[argc - 1] = "secret password";

return next(main, argc, ubp_av, init, fini, rtld_fini, stack_end);

}

用这个编译

gcc -O2 -fPIC -shared -o injectpassword.so injectpassword.c -ldl

然后运行你的过程

LD_PRELOAD=$PWD/injectpassword.so darkcoind masternode start fakepasshrase

插入器库将在应用程序的main函数执行之前运行此代码.它将在对main的调用中用实际密码替换最后一个命令行参数.然而,在/ proc / * / cmdline中打印的命令行(因此可以通过诸如ps之类的工具看到)仍将包含伪参数.显然你必须使源代码和你编译的库只能自己读取,所以最好在chmod 0700目录中运行.由于密码不是命令调用的一部分,因此您的bash历史记录也是安全的.

更高级的插入器

如果您想做更精细的任何事情,您应该记住__libc_start_main在运行时库正确初始化之前执行.所以我建议避免任何函数调用,除非它们绝对必要.如果您希望能够根据心脏的内容调用函数,请确保在完成所有初始化之后,在调用main本身之前执行此操作.对于下面的例子,我要感谢Grubermensch,他指出how to hide a password passed as command line argument引起了我的注意.

#define _GNU_SOURCE

#include

#include

static int (*real_main) (int, char * *, char * *);

static int my_main(int argc, char * * argv, char * * env) {

char *pass = getpass(argv[argc - 1]);

if (pass == NULL) return 1;

argv[argc - 1] = pass;

return real_main(argc, argv, env);

}

int __libc_start_main(

int (*main) (int, char * *, char * *),

int argc, char * * ubp_av,

void (*init) (void),

void (*fini) (void),

void (*rtld_fini) (void),

void (* stack_end)

)

{

int (*next)(

int (*main) (int, char * *, char * *),

int argc, char * * ubp_av,

void (*init) (void),

void (*fini) (void),

void (*rtld_fini) (void),

void (* stack_end)

) = dlsym(RTLD_NEXT, "__libc_start_main");

real_main = main;

return next(my_main, argc, ubp_av, init, fini, rtld_fini, stack_end);

}

这会提示输入密码,因此您不再需要保密插入库.占位符参数被重用为密码提示,因此请调用它

LD_PRELOAD=$PWD/injectpassword.so darkcoind masternode start "Password: "

另一种方法是从文件描述符(例如gpg –passphrase-fd)或x11-ssh-askpass等中读取密码.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值