访问一下看看结果:

可以看到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

php扩展 waf,基于PHP扩展的WAF实现相关推荐

  1. mysql异步扩展_基于Swoole扩展开发异步高性能的MySQL代理服务器

    MySQL数据库对每个客户端连接都会分配一个线程,所以连接非常宝贵.开发一个异步的MySQL代理服务器,PHP应用服务器可以长连接到这台Server,既减轻MYSQL的连接压力,又使PHP保持长连接减 ...

  2. wafw00f--一款基于python识别网站WAF的工具

    渗透时候经常会被waf之类的拦截,这时候需要知道目标站点使用了什么防火墙,然后才能根据对应防火墙寻找绕过的姿势.wafw00f就是一款识别网站防火墙的工具. 文章目录 简介 原理 项目地址 命令参数 ...

  3. mysql for循环_基于Swoole扩展开发异步高性能的MySQL代理服务器

    MySQL数据库对每个客户端连接都会分配一个线程,所以连接非常宝贵.开发一个异步的MySQL代理服务器,PHP应用服务器可以长连接到这台Server,既减轻MYSQL的连接压力,又使PHP保持长连接减 ...

  4. ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法

    ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类 ...

  5. 使用php开发,基于swoole扩展开发的工具 swoole-crontab

    2019独角兽企业重金招聘Python工程师标准>>> 使用php开发,基于swoole扩展开发的工具 swoole-crontab https://www.oschina.net/ ...

  6. php mcript(),PHP基于mcript扩展实现对称加密功能

    本文实例讲述了PHP基于mcript扩展实现对称加密功能,结合实例形式简单分析了php使用mcript扩展进行加密与解密相关操作技巧,分享给大家供大家参考,具体如下: 1.对称加密主要利用相同的密钥来 ...

  7. php扩展库后门,编写基于PHP扩展库的后门

    author:lxj616 0x00 前言 今天我们将讨论编写基于PHP扩展库的后门.通常来说,大部分入侵者都会在脚本中留下自定义代码块后门.当然,这些东西很容易通过源代码的静态或动态分析找到. 利用 ...

  8. 基于可扩展的计算机网络管理技术

    计算机网络技术与人们日常生产生活之间的关系日益密切.计算机网络不仅改变人们获取信息的方式,也实现了信息共享.虽然计算机网络技术日新月异,但是随着其发展,一些潜在的安全问题开始显现.这些问题严重影响了网 ...

  9. 基于Ngx_lua模块的Waf开发实践

    0x00 常见WAF简单分析 WAF主要分为硬件WAF和软件防火墙,硬件WAF如绿盟的NSFOCUS Web Application Firewall,软件防火墙比较有名的是ModSecurity,再 ...

最新文章

  1. 在Windows里备份Linux分区,在Windows里分出Linux分区(Linux分区).pdf
  2. 服务器IIS无法提供某种扩展名的文件的下载或访问某种类型文件提示http 404 错误时的解决办法...
  3. 顺序表的应用——逆置问题
  4. C# ASP.NET Forms身份认证
  5. [Everyday Mathematics]20150103
  6. osqa java_从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA(召唤前端)
  7. 广西工学院c语言试题答案,广西工学院的C语言考试试题
  8. 疯狂福利 | 美剧《天赋异禀》1-2季免费送!播放超12亿!刷了整整一晚上,太上头!...
  9. 总结出来的一些ASP.NET程序性能优化的注意事项[不断补充]
  10. python 去除nan inf_Python实现半自动评分卡建模(附代码)
  11. c char转int_c/c++基础之sizeof用法
  12. MySql数据库驱动类
  13. MyBatis association的两种形式——MyBatis学习笔记之四
  14. 线程池ThreadPoolExecutor的使用方法
  15. python multiprocessing遇到Can’t pickle instancemethod问题
  16. 风格化图像_【开源】图像风格化和目标检测
  17. 逻辑题(持续更新中)
  18. matlab怎么实现行随机网络,matlab生成随机行走网格 模拟材料生长 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  19. 3310复刻版 java_诺基亚3310复刻版评测:经典回归 情怀满满
  20. Calander 的小程序 简单日历的制作

热门文章

  1. jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
  2. lucene 多个分词查找_使用Lucene的新FreeTextSuggester查找长尾建议
  3. 如何使用Hibernate将PostgreSQL枚举映射到JPA实体属性
  4. Java 11:运行单文件程序和“ shebang”脚本
  5. 使用Java流和In-JVM-Memory的超低延迟查询
  6. 国外persona用户画像_使用Mozilla Persona验证用户的指南
  7. Spring安全性和密码编码
  8. 实践中的弹性基础架构
  9. web框架和后台开发_Web开发框架–第1部分:选项和标准
  10. glassfish_具有GlassFish和一致性的高性能JPA –第2部分