WEB应用漏洞导致的入侵时有发生,扫描器和WAF并不能解决所有的问题,于是尝试在主机侧针对PHP环境做了一个防御方案。很荣幸的邀请到TSRC部分白帽子做了一次对抗演习,本文主要分享一下防御思路。
防御方案主要想解决的问题是getshell、主机敏感文件泄漏等问题。于是乎出了下面这样一个题目:部署了防御方案的Nginx + PHP 的WEB环境,提供一个上传入口,可上传任意文件。找到WEB目录下的一个flag文件读取到内容即算突破。
2 PHP扩展
防御方案使用了PHP扩展来完成阻断。PHP内核支持C/C++开发一些扩展功能,并且提供了一个框架 – ext_skel帮助生成基本的代码简化开发,由于PHP扩展并不涉及底层的资源管理,所以编写一个PHP扩展和编写一个C应用程序是一样的。下图展示了PHP扩展所处的结构层次,扩展位于PHP内核ZEND 和 PHP应用层代码之间,那么利用PHP扩展可以:
1) 监控PHP应用层代码的执行细节,包括执行CGI、函数名、参数等;
2) 调用PHP内核ZEND提供的API接口,包括禁用类、修改配置选项等。
图1 PHP语言的结构
3 相关知识
3.1 HOOKPHP代码
PHP是解释型语言,代码被翻译为中间字节码由ZEND引擎解析执行。PHP把中间字节码称之为OPCODE,每个OPCODE对应ZEND底层的一个处理函数,ZEND引擎最终执行这个处理函数。实现HOOK功能只需要改变HOOK OPCODE对应的处理函数即可,而ZEND预先就提供了一个现成的接口:zend_set_user_opcode_handler。防御方案只需要HOOK以下三个OPCODE:
ZEND_INCLUDE_OR_EVAL — eval、require等
ZEND_DO_FCALL — 函数执行system等
ZEND_DO_FCALL_BY_NAME — 变量函数执行 $func = “system”;$func();
举例:
ZEND_DO_FCALL这个OPCODE对应的功能是函数调用,如果需要HOOK所有的函数调用:
1) 在模块初始化函数中使用zend_set_user_opcode_handler修改ZEND_DO_FCALL新的处理函数为mysub:
PHP_MINIT_FUNCTION(phpips){
zend_set_user_opcode_handler(ZEND_DO_FCALL, mysub);
return SUCCESS;
}
2) 在自定义函数中实现自己需要的功能并返回原来的处理函数:
void mysub(){
自定义功能;
return ZEND_USER_OPCODE_DISPATCH;
}
3.2 ZEND接口
HOOK之外还需要获取一些基本信息或功能,比如:
1) 获取执行的PHP脚本名,可调用ZEND的接口zend_get_executed_filename:
char *cgi_name = (char*)zend_get_executed_filename(TSRMLS_C);
2) 禁用一些类库,可使用zend_disable_class接口;
ZEND提供了很多丰富的接口,可根据需求选择调用。
微信记录删除了怎么恢复?如何看到别人的微信聊天记录?在我们使用手机微信聊天时,常常容易把微信聊天记录误伤了。有时候还需要偷看老婆的微信聊天记录,可是这些技术都没有掌握,也不知道怎么恢复删除的微信聊天记...
有人找黑客查微信记录相关问题 黑客如何攻击别人网站相关问题 黑客是如何进入监控的 如何窃取别人的通讯录(窃取别人qq聊天记录)...
2019年我国自然灾害以洪涝、台风、干旱、地震、地质灾害为主,森林草原火灾和风雹、低温冷冻、雪灾等灾害也有不同程度发生,经应急管理部会同工业和信息化部、自然资源部、住房城乡建设部、交通运输部、水利部、...
没你想的那么简单如果是单纯的盗号你可以下载一些木马试试,不过现在的环境你需要对木马做很多工作才能不被杀掉。. 现在这年头,当黑客很酷很牛,不过很少有人知道有多少的辛酸和困苦!什么东西都不是很容易能做到...
找黑客解苹果id相关问题 零基础怎么学当黑客相关问题 黑客行为犯什么法 qq电话时长怎么改成分钟秒(qq电话时长)...
本文导读目录: 1、常用的黑客工具有哪些,各有什么功能。 2、黑客常用黑客工具的工具有哪些啊? 3、黑客必备工具是哪些?哪种扫描工具比较好用? 4、世界五大黑客是谁啊? 5、黑客入侵攻...