php扩展 waf,基于PHP扩展的WAF实现

访问一下看看结果:

e0c09ecfcc0d6d98a0639165f21459a5.png

可以看到ls命令成功的执行了,也就是说我们的正常文件是不会被拦截的,而只有upload目录中的文件会被拦截,这样做又会引发另一个弊端,倘若攻击者通过某种方法将shell写入正常的文件中,或是与业务结合起来,那么这种防御手段就很难生效了。具体如何防御还要结合其他的特征进行检测,并不是没有办法了,实际应用中不能只依靠检测文件路径这一条规则,需要结合业务进行部署防御方案。

另一种方法与这个hook三个OPCODE的方法类似,无非就是麻烦一点,感兴趣的同学可以围观下面的参考文献:http://security.tencent.com/index.php/blog/msg/19 ,这里描述了hook函数的比较详细的思路。

0x04 不谈业务的安全都是耍流氓

总结一下,拦截的方法大概就是上面两种,但是拦截的依据还没有决定,如何判断一个调用system()的脚本是否为webshell呢?如果我们的WAF放到生产环境,啥都不管乱杀,很有可能造成正常的业务无法工作。我自己总结了几个方法,可能联合起来使用效果更好一些。

根据目录判断 通常情况下,上传的文件一般都有专门的目录进行存放,例如upload/等,正常的业务文件是不在这其中的,于是我们可以简单的只对这个目录进行处理,其他目录的文件一律放行。

根据文件权限判断 这需要网站的维护者对网站的权限进行严格的控制,例如,所有的web文件均是644,且为root:root所有。上传的文件为www:www所有,根据权限的不同进行查杀,对于默认的web文件进行放行,对属于非root:root的文件进行查杀。也可以根据w标志判断,通过未知方式getshell的文件很多是带有w标志的,所以可以根据这些特征进行查杀。

变形检测 如果发现一个文件调用了assert、system、preg_replace /e等等,但是在源文件中没有发现这些关键字,还等什么,这个文件很大的可能就是shell了。(zend_get_executed_filename可以获得文件的标志以及文件的路径,例如出现了assert,说明该脚本使用了assert执行代码。)

黑名单检测 就像传统的杀软一样,总会有那么一部分的特征病毒库,我们也可以建立一部分的webshell特征库,先依靠特征库杀掉一部分,再根据其他的情况进行判断。如果将动态检测和静态检测结合起来,查杀、拦截效果应当都会有显著的改善。

0x05 所以这WAF有啥用

安全需要和业务结合起来进行,不谈业务的安全都是耍流氓。因为是扩展级别的WAF,在部署的时候可能需要重新编译,修改配置文件等等。批量式部署可能显得不是那么方便,而且要根据业务需要进行各种细微的调整。如果仅仅是几台服务器,相信这种WAF还是十分棒的,调整起来也十分方便。

如果能开发出适合批量部署的基于扩展的WAF,那么可能会比较容易普及,毕竟在业务上部署WAF不是一个简单的事情。

参考资料:

http://security.tencent.com/index.php/blog/msg/57 http://security.tencent.com/index.php/blog/msg/19 http://www.walu.cc/phpbook/ http://www.php-internals.com/book/?p=index http://www.nowamagic.net/librarys/veda/detail/1543

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

junit4 集成测试_使用JUnit规则进行干净的集成测试

junit4 集成测试JUnit Rules的优势,尤其是在进行集成测试时,几乎不能被高估。 在本文中,我们将阐明ExternalResource扩展的有用性。 在我们必须使用抽象外部资源的第三方库的情况下,这简化了灯具控制。 作为示例,我们将…

多项式在matlab中的应用,matlab的应用-多项式函数及多项式拟合

matlab的应用-多项式函数及多项式拟合 Matlab 的应用- 多项式函数及多项式拟合 本节将向大家简要介绍 matlab 在多项式处理方面的应用。 多项式函数主要有: roots 求多项式的根 poly 特征多项式 polyval 多 项式的计算 poly2str(p, x )多项式代换 polyfit 多项式曲线…

乐惠科技php面试题,程序员中的奇葩,使用php构建魔兽世界

这是用PHP编写的魔兽世界服务器。现在它已经调试了登录服务器的过程。目前的魔兽世界客户端是2.4.3_8606。服务器列表和帐户密码数据需要查询AUTH库。世界服务器身份验证过程已完成,数据包加密已完成后续进程正在开发中......数据库文件在根目录: sql/sql.7z今天在群…

javafx窗体程序_JavaFX真实世界应用程序:EIZO CuratOR Caliop

javafx窗体程序JavaFX Real-World应用程序第四号称为Caliop 。 它是EIZO为医院手术室开发的CuratOR解决方案的前端。 前端在壁挂式控制台上运行,并允许操作团队查找有关患者的信息,控制各种视频源到不同显示器的路由,录制视频,拍摄…

java8 streams_Java 8 Streams:过滤和谓词否定

java8 streams最近,有关LJC 邮件列表的成员在流中.filter方法中使用谓词否定的有趣讨论,因此我认为值得在博客文章中进行总结。 讨论是关于使用.filter和否定谓词的方法。 这篇文章的代码可以在我的github帐户中找到 。 也许这就是您可能会想到的方式&…

hystrix熔断 简介_Hystrix简介– Hello World

hystrix熔断 简介在以前的博客文章中,我介绍了需要像Netflix Hystrix这样的库的动机。 在这里,我将跳入一些非常基本的方法来开始使用Hystrix,并在更复杂的用例中进行跟进。 你好,世界 以下是“ Hystrix命令”的一个简单的Hello …

php中哪个函数用于读取文件,PHP内置函数fget读取文件

php fgets()函数从文件指针读取一行语法:fgets(file,length)参数说明必需的. 指定姚要读取的文件长度可选. 指定姚都区的字节数. 默认值为102字节从文件所指向的文件中读取一行,并返回最大长度为1个字节的字符串. 遇到换行符(包含在返回值中,)&#xff0…

c++返回指针时候注意提防_提防Java中的函数式编程!

c返回指针时候注意提防这对函数式编程并不会造成太大的影响,这真棒。 这是关于某些实践的警告,您很可能会将其应用于您的代码,而这是完全错误的! 。 高阶函数对于函数式编程是必不可少的,因此,谈论它们将帮…

centos php支持yaf,CentOS环境下给PHP7.0安装yaf扩展

|CentOS环境下给PHP7.0安装yaf扩展在CentOS环境下给PHP7.0安装yaf扩展,首先要知道PHP的安装目录在哪里,以我当前的路径为例,在/usr/local/php目录下。下一步需要下载扩展包,进入http://pecl.php.net/package/yaf寻找符合版本要求的…

jsf教程_JSF范围教程– JSF / CDI会话范围

jsf教程会话作用域跨越多个HTTP请求-响应周期(理论上是无限的)。 当您需要每个HTTP请求-响应周期进行一次交互时,请求作用域在任何Web应用程序中都非常有用。 但是,当您需要对属于用户会话的任何HTTP请求-响应周期可见的对象时&…

linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...

在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。直接使用blkid可列出当前系统中所以已挂载文件系统的类型。默认情…

linux rpm mysql mysql_config,Linux CentOS6 mysql rpm安装

选择操作系统及版本:点击5.6版本链接将下载好的文件上传至服务器下面开始安装:检查是是否有mysql的包# rpm -qa | grep -i mysql删除原有包# yum -y remove mysql-libs*开始安装下载好的三个文件:# rpm -ivh MySQL-server-5.6.38-1.el6.x86_6…

java 可视化_可视化Java 9模块关系

java 可视化正如我在之前的文章中所述 ,我已经在Java 9 Jigsaw构建上运行Eclipse Neon了一段时间,并且没有任何问题。 我在周末花了几个小时来修改一些模块化工具的想法。 我为Eclipse Neon写了一个小插件,可视化了各个模块之间的连接。 现…

zybo的linux开发教程,Zybo全栈开发入门教程——连载三:创建Linux设备驱动和应用程序...

作者:Commanderfranz,编译: kenshin通过前面两篇文章我们不仅创建的自定义IP模块还移植了Linux操作系统,今天这篇文章的内容是将这两部分联系起来,其实我们创建的myLed IP相对于Linux操作系统可以是它的一个底层设备&a…

linux 二进制差分工具,打造Android万能的软件更新库

今日科技快讯阿里星球今天在苹果商店发布的更新动态显示,其将在近期停止APP内的音乐服务,用户可以通过新版本内的指引和说明,导出本地音乐。这意味着上线八个月后,阿里星球做出了一个重大决定:停止音乐服务后&#xff…

lambda 分类聚合_使用Java 8 Lambda,流和聚合

lambda 分类聚合总览 在本文中,我们将介绍使用Java 8 lambda,流和聚合来过滤和处理Collection中的对象。 这篇文章中的所有代码都可以在此处的 BitBucket中找到 。 对于此示例,我们将创建许多对象,这些对象代表我们IT基础架构中的…

linux镜像文件不要大于4g,Systemback制做大于4G的Ubuntu系统镜像

1 安装Systemback依此执行以下命令。sudo apt-get updatesudo add-apt-repository ppa:nemh/systembacksudo apt-get update && sudo apt-get install systemback unionfs-fuse安装完成:2 使用Systemback生成镜像文件输入管理员密码,打开后界面以…

黑马2016java_2016年成功的Java开发人员简介

黑马2016java2015年即将结束。 现在该总结过去一年中已完成的工作和未完成的工作。 此外,现在是预测下一个2016年的好时机。 您已经猜到这篇文章是关于2016年理想的Java开发人员的。 我想给你一个惊喜,这次我更改了预测的格​​式。 为了使预测更加客观…

spring一站式开发_Spring开发人员知道的一件事

spring一站式开发在最近的(核心)Spring框架培训课程中,有人问我:“(Java)Spring开发人员应该知道的一件事是什么?” 这个问题使我措手不及。 是的,(核心)Spri…

jax-ws和jax-rs_带有JAX-WS和Spring的Web服务应用程序

jax-ws和jax-rs1.简介 这是一个漫长的等待,但是我最终要发布有关使用Spring创建第一个基于SOAP的Web服务应用程序的教程。 JAX-WS (用于XML Web服务的Java API)是用于以XML格式创建Web服务的一组API,我们最常将其称为基于SOAP的We…