BUUCTF:[BJDCTF2020]ZJCTF,不过如此 && 攻防世界web之ics-05 -- -preg_replace + /e 的任意代码执行漏洞

本文介绍了BJDCTF2020和攻防世界web之ics-05中的preg_replace漏洞利用,重点讨论了/e修正符导致的RCE问题。讲解了如何通过正则表达式和可变变量实现代码执行,强调了了解此漏洞及正则反向引用、PHP可变变量的重要性和应用。

加一个题: 攻防世界web之ics-05
也是这个preg_replace

一、不足:

  1. 在文件包含那里卡住了,想着flag.php还是next.php10多分钟后才想到可以用filter协议来读么,,,等一会看看能不能用data协议来读去???
    这个可以的:index.php?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php
  2. 看到正则+str_replace,+ e 修正符,想到的是RCE!?!!。
  3. 知识点:/e模式的preg_replace,有一个远程代码执行漏洞

二、知识点:

  1. 点这个:深入研究preg_replace与代码执行。讲真,里面的一些python的小脚本可以学习学习呦
  2. 看这个我自己吸收了一波之后的:正则中\1的用法—反向引用
  3. 那个可变变量的花括号,就像是C语言中的小括号一样,明确变量名字的,没有什么实际意义的
  4. 真就直接就执行了呗,(这里去掉花括号不行!!!不行!!!!)这个是给 第一点 实验用的。那个第一点中的 爬坑三 有详细解释。讲的很棒的,既然这个 ${phpinfo()} 能传,
  5. 这个 ** \S=${getFlag()} ** 的意思就是执行代码的意思了,我看了,大牛写的博客中也没有说为什么使执行代码,只是讲了怎么构造使之执行代码,。一样的 换成phpinfo()一样执行
    在这里插入图片描述

三、做完题,看完博客后的 要求:

  1. 这个套路要会用,看到这个 preg_replace 和 /e 的组合运用的时候,要能够想到使这个代码执行来
    然后

  2. 正则的反向代理\1得会,

  3. 还有PHP得 可变变量 也要弄得明明白白的!

四、我的思路:没有做出来,,,

php://input 一下子想到了,但是这个文件包含的还是慢了点,这个php://input换成data伪协议也可以做的

这个可以的:index.php?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php

### 关于ICS-05的网络安全攻防挑战 #### 解题思路概述 在处理ICS-05这类Web安全挑战时,重点在于识别并利用特定PHP函数的安全漏洞来获取敏感信息。具体来说,在此案例中,`preg_replace()` 函数存在潜在风险,当其第三个参数设置为 `/e` 修饰符时,允许将正则表达式的匹配结果作为 PHP 代码执行[^3]。 #### 利用 `preg_replace` 进行攻击向量构建 为了成功完成这一挑战,参与者需构造恶意输入以触发远程命令执行 (RCE),从而能够遍历服务器文件系统寻找标志文件 (`flag`) 或其他有价值的信息。通过精心设计 URL 参数: ```plaintext ?pat=/(.*)/e&rep=system('find+/+-name+*flag*')&sub=good ``` 上述请求会尝试定位任何名称中含有 "flag" 的文件,并返回路径给攻击者。进一步地,一旦找到了目标文件的位置,则可以通过类似的技巧读取该文件内容: ```plaintext ?pat=/(.*)/e&rep=system('cat+/var/www/html/s3chahahaDir/flag/flag.php')&sub=good ``` 这一步骤展示了如何利用已知漏洞实现对受保护资源的未授权访问[^4]。 #### 安全防护措施建议 针对此类基于PHP的应用程序中存在的安全隐患,开发人员应当遵循最佳实践指南,比如禁用危险功能(如 `/e` 修改器),并对用户提交的数据实施严格的验证机制。此外,定期审查源码质量以及部署自动化测试工具也是预防类似事件发生的有效手段之一。 ```php // 不推荐的做法:启用 /e 选项可能导致任意代码执行 $unsafe_pattern = "/(.*)/e"; $safe_replacement = 'strrev("$1")'; // 使用更安全的方式代替 system() 调用 $result = preg_replace($unsafe_pattern, $safe_replacement, $input); // 推荐做法:完全移除 /e 支持 $pattern = '/\bhello\b/i'; $replacement = 'world'; echo preg_replace($pattern, $replacement, 'say hello to the world'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值