php的Webshell能够实现浏览网站目录、修改网站文件、数据库查询、修改、下载等等,做为个人工具可谓功能完善且强大,做为黑客工具可谓功能恐怖,危害极大!做网站需要在各个方面做好安全防御。
首先,修改PHP源码后重新编译PHP环境
tar zxvf php-5.2.14.tar.gz gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1 cd php-5.2.14/然后编辑文件main/fopen_wrappers.c,找到 php_check_open_basedir_ex 函数的定义部分,大约在 220行。在如下代码之后插入修改代码
PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC) { /* Only check when open_basedir is available */ if (PG(open_basedir) && *PG(open_basedir)) { char *pathbuf; char *ptr; char *end; //从此处开始插入修改代码插入的修改代码为:
char *env_doc_root; if(PG(doc_root)){ env_doc_root = estrdup(PG(doc_root)); }else{ env_doc_root = sapi_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC); } if(env_doc_root){ int res_root = php_check_specific_open_basedir(env_doc_root, path TSRMLS_CC); efree(env_doc_root); if (res_root == 0) { return 0; } if (res_root == -2) { errno = EPERM; return -1; } }修改完成的样子:
PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC) { /* Only check when open_basedir is available */ if (PG(open_basedir) && *PG(open_basedir)) { char *pathbuf; char *ptr; char *end; //增加代码.开始 char *env_doc_root; if(PG(doc_root)){ env_doc_root = estrdup(PG(doc_root)); }else{ env_doc_root = sapi_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC); } if(env_doc_root){ int res_root = php_check_specific_open_basedir(env_doc_root, path TSRMLS_CC); efree(env_doc_root); if (res_root == 0) { return 0; } if (res_root == -2) { errno = EPERM; return -1; } } //增加代码.结束 //原文件其他代码...
保存退出后,继续编译、安装即可
然后修改php.ini中 open_basedir配置
open_basedir =
"/tmp/:/var/tmp/"
以上,修改编译php和修改php.ini配置的目的在于,将php脚本的允许操作区域限制于自身目录和/tmp+/var/tmp之下, 不允许它随意对其他目录进行操作。 这样Webshell的活动区域就受限了,也就无法修改其他目录文件或挂马, 无法继续找到数据库配置文件进而对数据库进行操作。