Linux权限维持之进程注入

倾旋
倾旋
技术分享|2020-1-1|最后更新: 2023-11-7|
type
status
date
slug
summary
tags
category
icon
password
URL

说明

通过进程注入技术,能够使得动态链接库被加载到一个正在运行的进程,因此较为隐蔽。进程注入通过调用ptrace()实现了与Windows平台下相同作用的API 函数CreateRemoteThread()。在许多Linux发行版中,内核的默认配置文件/proc/sys/kernel/yama/ptrace_scope限制了一个进程除了fork()派生外,无法通过ptrace()来操作另外一个进程。
要注入进程前,需要关闭这个限制(Root权限):
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
notion image
在Github上已经有了关于进程注入的实现代码:https://github.com/gaffe23/linux-inject
下载后进入项目目录,执行:make x86_64 即可编译64位的linux-inject。
notion image
确认编译是否正常:
notion image
获取sample-target的PID后,调用inject程序来注入sample-library.so,注入成功会输出“I just got loaded”。 接下来,需要更改sample-library.c文件,编译成需要的权限维持动态链接库。
通过如下命令编译so文件:
notion image
编译成so文件成功后的测试效果:
notion image
在Kali Linux这边获得了bash shell:
notion image
此时发现测试程序的主线程被bash阻塞了,于是可以采用多线程技术,将后门代码与正常逻辑分离执行。
notion image
但利用这种方式在执行的过程中,查看进程参数还是会被查看到IP地址和端口:
notion image
查看到IP与端口:
notion image
再继续改进代码,采用socket套接字的方式来反弹shell:
执行效果:
notion image
Kali Linux获得bash shell:
notion image
在实战应用中,需要关闭ptrace的限制,然后注入.so到某个服务进程中,这样达到权限维持的目的。
 
©2021-2024 倾旋. All rights reserved.