奇淫巧技之程序启动后在进程列表中隐藏密码等关键信息2
Posted 菜鸟lei的学习成长空间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奇淫巧技之程序启动后在进程列表中隐藏密码等关键信息2相关的知识,希望对你有一定的参考价值。
在上一篇总结中,在进程列表中隐藏密码是通过在main函数中做处理来隐藏的.
如下:
1 int _main(int argc, char* argv[], char** envp) { 2 3 省略中间一些代码内容 4 5 // hide password from ps output 6 7 for (int i = 0; i < (argc - 1); ++i) { 8 9 if (!strcmp(argv[i], "-p") || !strcmp(argv[i], "--password")) { 10 11 char* arg = argv[i + 1]; 12 13 while (*arg) { 14 15 *arg++ = ‘x‘; 16 17 } 18 19 } 20 21 }
可是,上面的代码并不是总能管用.为啥呢?因为main函数一进去,mongo并没有马上在进程列表里面把密码掩盖,而是先做了一些初始化操作,就是我在上面省略的代码部分.
因为中间省略的那部分代码也是要花费一定时间的,所以在比较极端的场景下,同时大并发执行mongo ip/db -u account -p password jsfile时候,是有可能被进程监控程序监控到带有明文密码的mongo进程的.
这个时候怎么解决呢?
mongo接受的服务器端js脚本中,也是可以执行登录操作的,把登录操作放到js中,这样,就可以用mongo ip jsfile方式来执行服务器端js了.
js的内容中需要添加:
db = db.getSiblingDB(‘dbname‘) var login_ret = db.auth(‘user‘,‘password‘) if (1 == login_ret){ //do something }else{ //print login failed message }
如果账号和密码是可变的,到时候可以通过将js脚本中user,password部分内容替换掉,就可以正常工作了.
总结:本篇讲的在进程列表中隐藏密码关键信息的方式是linux here document.
最后需要留意的是,如果直接执行mongo ip jsfile,else和if语句块的右花括号可以换一行,但如果jsfile是通过linux here document方式传入,则else和if语句块的右花括号必须是在同一行的.
以上是关于奇淫巧技之程序启动后在进程列表中隐藏密码等关键信息2的主要内容,如果未能解决你的问题,请参考以下文章