详情看上一篇方法,突然想到一个神奇的用法。
/*
how to use:
gcc -fpic -c -ldl hook.c
gcc -shared -lc -o hook.so hook.o
export LD_PRELOAD=./hook.so
export LD_PRELOAD=NULL; //卸载库
*/
#include<stdio.h>
char* flag_path = "/flag";
extern int __open(char *,int,int);
int open(char * path,int flags,int mode)
{
//printf("open :%s\n",path);
if (strcmp(path,flag_path) == 0){
// 在这里你甚至能加入什么东西,比如
// sleep(2000000000);
// 或者是
// return __open(fake_flag_path,flags,mode);
return -1;
}
return __open(path,flags,mode);
}
如果在双方都是低权并且是批量的话,一般没有点意识的都不会注意到环境变量的事情。
只要在本用户的和www用户的~/.bashrc设置LD_PRELOAD。或者在php环境中的config.php,加入waf的同时同时加入一句
<?php putenv("LD_PRELOAD=xxxxx"); ?>
就行啦。
如果实在没有config.php这种所有东西都会访问的文件的话,可以手工构造一个.user.ini
然后写入
auto_prepend_file=包含上面哪个代码或者你的waf的地址
这样所有的文件都会自动包含啦。
顺带附上一个文件夹监控的脚本,用pyinotify实现的。
脚本地址:file_manage.rar
当然一般情况下,基本是没有pyinotify环境的,所以这时候两个办法,下载源码安装或者编译两份出来。
源码地址:PyInstaller-3.5.tar.zip
或者是自己编译:
x86版本:file_manage.x86.zip
x64版本:file_manage.x64.zip