众所周知,CTF比赛都是人为构造漏洞环境,人为制造安全漏洞,供安全从爱好者研究,好磨练和增强自己的安全技能。

参加CTF比赛,通常你需要明白出题人的想法,按照出题人的意图来解开谜题。

但是,就像所有的游戏一样,在一些未知的地方,总是存在BUG。有时候参赛人员出人意料的行为和动作,会接触到一些从未有人探索过的领域——0day。这是出题人从未预料到的,这就像在一场比赛中参赛者找到了一条比官方航线更好的路线,在一片特别危险的丛林中发现了一个知识宝库。

意外发现的PHP漏洞

我们的故事开始于Realworld CTF比赛,时间为2019年9月14日到9月16日。Wallarm的安全研究员Andrew Danau在攻克一个CTF任务时偶然发现了一个不寻常的PHP交互行为。

当Andrew Danau往URL中插入了%0a(换行)字符,然后发送给服务器,但服务器的响应很奇怪,它返回的数据比料想的要多,并且这些额外的数据与URL中%0a之后的字节数有关。

通常来说,这种异常响应与内存损坏有关,这应该是一种信息泄露攻击。这说明它可能会导致敏感数据的泄露。更糟糕的是,尽管没有直接出现,但这种异常行为可能隐藏着远程代码执行。

Andrew没有找到解决这个CTF关卡的方法。他决定和队友就这一不同寻常的发现进行深入研究,希望能够理解其中的缘由,开发成一个远程代码执行漏洞。

这个异常的原因是关于Nginx+fastcgi的底层,特别是fastcgi_split_path指令以及涉及换行符的正则表达式的特点。对于%0a字符,Nginx会将其设为一个空值,但fastcgi+PHP不期望这样。

由于Emil对哈希表使用了一些“黑魔法”,所以可以放置任意FastCGI变量,比如PHP_VALUE。我强烈建议你通过学习Emil的脚本来了解更多,利用脚本链接https://github.com/neex/phuip-fpizdam/。如果你想了解源码,链接在这:

https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1142

以上一切意味着你可以调用任意的PHP代码——在本例中,通过使用Nginx配置文件中的fastcgi_split_path指令来处理任何用户的数据,比如URL。

在进一步的调查中,我们在GitHub上发现有大量代码涉及fastcgi_split_path(超过6千):

https://github.com/search?q=fastcgi_split_path&type=Code

防御方法

在得知Andrew的发现后,我们立刻据此测试了一些安全解决方案,如Wallarm Cloud Native WAF,并确认Wallarm的WAF能拦截这个漏洞。

而我们在后续研究中也发现可以通过一些简单的方法拦截攻击,比如你正在使用ModSecurity安全软件,那么就可以通过过滤URL中的%0a/%0d来防御这种攻击,相关的mod_security规则如下:

SecRule REQUEST_URI "@rx %0(a|d)" "id:1,phase:1,t:lowercase,deny"

此外我们还建议你通过执行以下简单的bash命令来识别是否可能存在漏洞,它可以识别在你的Nginx配置中是否有错误配置:

egrep -Rin --color 'fastcgi_split_path' /etc/nginx/

最后,在PHP发布相关补丁时,要及时安装。

结论

有时候,思考偏离轨道并不是坏事,Andrew Danau无意中为安全做出了大贡献。我们也相信PHP的开发团队能迅速修复该漏洞。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场

来源:https://nosec.org/home/detail/3083.html

原文:https://lab.wallarm.com/php-remote-code-execution-0-day-discovered-in-real-world-ctf-exercise/

白帽汇从事信息安全,专注于安全大数据、企业威胁情报。

公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。

为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。

php定时执行代码漏洞_在CTF比赛中发现的PHP远程代码执行0day漏洞相关推荐

  1. sqlite 0转换为bit_Cisco Talos在SQLite中发现了一个远程代码执行漏洞

    思科Talos的研究人员在SQLite中发现了一个use-after-free() 的漏洞,攻击者可利用该漏洞在受影响设备上远程执行代码. 攻击者可以通过向受影响的SQLite安装发送恶意SQL命令来 ...

  2. fastjson反序列化漏洞_【安全风险通告】fastjson反序列化远程代码执行漏洞安全风险通告...

    近日,奇安信CERT监测到fastjson官方发布新版本,修补了一个反序列化远程代码执行漏洞.远程攻击者可利用该漏洞绕过autoType限制,进而可在目标服务器上执行任意命令.鉴于该漏洞影响较大,建议 ...

  3. php excel中解析显示html代码_骑士cms从任意文件包含到远程代码执行漏洞分析

    前言 前些日子,骑士cms 官方公布了一个系统紧急风险漏洞升级通知:骑士cms 6.0.48存在一处任意文件包含漏洞,利用该漏洞对payload文件进行包含,即可造成远程代码执行漏洞.这篇文章将从漏洞 ...

  4. maven引用公共包_使用github作为maven仓库存放发布自己的jar包依赖 实现多个项目公共部分代码的集中,避免团队中多个项目之间代码的复制粘贴...

    使用github作为maven仓库存放发布自己的jar包依赖 实现多个项目公共部分代码的集中,避免团队中多个项目之间代码的复制粘贴. 1.首先在本地maven位置的配置文件setting.xml(没有 ...

  5. js word 预览_微软补丁日:Word/DHCP/LNK远程代码执行漏洞预警

    漏洞背景 2019年8月14日微软发布的安全更新中除了RDP漏洞还涵盖了针对多个远程代码执行高危漏洞的修复. Microsoft Word远程代码执行漏洞, 漏洞编号CVE-2019-0585. Wi ...

  6. java内存漏洞_处理Java程序中的内存漏洞

    Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...

  7. python框架漏洞_注意!Python中的10个常见安全漏洞及修复方法

    编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例.然而,许多 ...

  8. python中常见的漏洞_注意!Python中的10个常见安全漏洞及修复方法

    原标题:注意!Python中的10个常见安全漏洞及修复方法 源 /Python程序员 编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避 ...

  9. thinkphp重大漏洞_经过许多重大的改进计划,关键基础设施仍然存在漏洞

    thinkphp重大漏洞 We call it critical infrastructure (CI), because it is. The systems that bring us our w ...

最新文章

  1. php企业网站源码安装教程,PHPSCUP企业建站系统v1.4 安装图文教程
  2. windows核心编程之进程间共享数据
  3. 无重复字符的最长子串【哈希算法】-O(n)
  4. java 擦出,Java擦除和转换实例分析
  5. P3803 【模板】多项式乘法(FFT)
  6. BugkuCTF-MISC题想蹭网先解开密码
  7. php循环建立新的文件根据文件名移动文件到指定文件夹修改文件名称
  8. 哈佛开源 | 从零开始教你计算机图形学
  9. 细数SkyEye异构仿真的5大特色
  10. flink sink jdbc没有数据_No.2 为什么Flink无法实时写入MySQL?
  11. SAP License:SAP行业近期走向
  12. Java的“影子克隆”和“深度克隆”
  13. java 多线程 关键字_Java多线程常用的几个关键字
  14. 推荐系统组队学习——GBDT+LR
  15. Python数据分析(一):Pandas、Numpy
  16. java中将url下载并转换为MultipartFile文件
  17. html word 分页
  18. 思科路由器如何强行中断命令
  19. ios, android平台手机游戏,《王者荣耀》ios和安卓怎么转平台 ios和安卓转平台攻略...
  20. 头哥教学平台-泰坦尼克号生还预测

热门文章

  1. python中fit函数_Houdini中fit( )函数学习笔记
  2. linux软件卸载不了,linux软件卸载
  3. 虚拟机python环境搭载_windows之自动化在虚拟机部署操作系统并自带python环境
  4. anaconda和python都有_Anaconda和python有什么区别-Anaconda和python区别介绍
  5. 天籁obd接口针脚定义_典藏 | OBD接口位置大全及部分常用手机型号语音播报设置流程...
  6. html前进2格2em,HTML2
  7. CodeForces - 868F Yet Another Minimization Problem
  8. OGNL、EL表达式——Struts
  9. [算法题] Search in Rotated Sorted Array
  10. Introduction MBG