execve在hook模式自动移除LD_PRELOAD环境变量,防止向下传递
This commit is contained in:
parent
9b7908b326
commit
e93e41ce83
|
|
@ -25,7 +25,33 @@ orig_execve_type orig_execve = NULL;
|
||||||
* 拦截系统调用execve,
|
* 拦截系统调用execve,
|
||||||
* 在真实调用直接检查配置和创建输出
|
* 在真实调用直接检查配置和创建输出
|
||||||
*/
|
*/
|
||||||
int execve(const char *filename, char *const argv[], char *const envp[]) {
|
int execve(const char *filename, char *const argv[], char *const old_envp[]) {
|
||||||
|
// 移除LD_PRELOAD
|
||||||
|
|
||||||
|
// 计算原环境变量数量
|
||||||
|
size_t env_count = 0;
|
||||||
|
while (old_envp && old_envp[env_count]) {
|
||||||
|
env_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分配新的环境变量数组(最多比原来少一个)
|
||||||
|
char **envp = malloc((env_count) * sizeof(char *));
|
||||||
|
if (!envp) {
|
||||||
|
perror("malloc");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拷贝旧的 envp,跳过 LD_PRELOAD
|
||||||
|
size_t i = 0;
|
||||||
|
for (size_t j = 0; j < env_count; j++) {
|
||||||
|
if (strncmp(old_envp[j], "LD_PRELOAD=", 11) != 0) {
|
||||||
|
envp[i++] = old_envp[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保新数组末尾是 NULL
|
||||||
|
envp[i] = NULL;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/**
|
/**
|
||||||
* 在真实系统调用之前可以调用这个函数,
|
* 在真实系统调用之前可以调用这个函数,
|
||||||
|
|
@ -37,6 +63,7 @@ int enhance_execve(const char *filename, char *const argv[],
|
||||||
char *const envp[]) {
|
char *const envp[]) {
|
||||||
(void)envp;
|
(void)envp;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 去除首尾空格
|
// 去除首尾空格
|
||||||
while (*filename && isspace(*filename)) {
|
while (*filename && isspace(*filename)) {
|
||||||
filename++;
|
filename++;
|
||||||
|
|
@ -196,33 +223,7 @@ int enhance_execve(const char *filename, char *const argv[],
|
||||||
|
|
||||||
#ifdef HOOK
|
#ifdef HOOK
|
||||||
|
|
||||||
// 移除LD_PRELOAD
|
return orig_execve(filename, argv, envp);
|
||||||
|
|
||||||
// 计算原环境变量数量
|
|
||||||
size_t env_count = 0;
|
|
||||||
while (envp && envp[env_count]) {
|
|
||||||
env_count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 分配新的环境变量数组(最多比原来少一个)
|
|
||||||
char **new_envp = malloc((env_count) * sizeof(char *));
|
|
||||||
if (!new_envp) {
|
|
||||||
perror("malloc");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 拷贝旧的 envp,跳过 LD_PRELOAD
|
|
||||||
size_t i = 0;
|
|
||||||
for (size_t j = 0; j < env_count; j++) {
|
|
||||||
if (strncmp(envp[j], "LD_PRELOAD=", 11) != 0) {
|
|
||||||
new_envp[i++] = envp[j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 确保新数组末尾是 NULL
|
|
||||||
new_envp[i] = NULL;
|
|
||||||
|
|
||||||
return orig_execve(filename, argv, new_envp);
|
|
||||||
#else
|
#else
|
||||||
DEBUG_LOG("Ready to exec file: %s", filename);
|
DEBUG_LOG("Ready to exec file: %s", filename);
|
||||||
return execve(filename, argv, envp);
|
return execve(filename, argv, envp);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue