搜索引擎网站推广怎么做,在线seo优化,自助建站网站建设,沈阳做网站的设计公司哪家好题目链接#xff1a;[BJDCTF2020]ZJCTF#xff0c;不过如此
解题思路
访问靶场链接#xff0c;出现的是一段php源码#xff0c;接下来做一下代码审阅#xff0c;发现这是一道涉及文件包含的题 主要PHP代码语义#xff1a;
file_get_contents($text,r);
把$text变量所…题目链接[BJDCTF2020]ZJCTF不过如此
解题思路
访问靶场链接出现的是一段php源码接下来做一下代码审阅发现这是一道涉及文件包含的题 主要PHP代码语义
file_get_contents($text,r);
把$text变量所制定的文件读入一个字符串中
r表示只读preg_match(/flag/,$file);
正则表达式判断文件中是否包含flag字符串include($file);
文件包含函数如果文件中是普通字符串则输出
如果有php代码则会执行通过代码审计发现我们可以将text设置为I have a dream来进入循环并利用伪协议读取并加密next.php文件源码利用include函数输出从而得到next.php文件源码。
接下来尝试从url中设置textI have a dream试图通过get赋值但无果因为这样会变成将text变量的值赋为I have a dream。我们的目的是使text这个变量所制定的文件中写入I have a dream进而通过比较判断语句此时就要想想办法怎么做到
利用PHP中的伪协议可以做到 1、php://input php中的特殊输入流用于读取POST中的值
2、data:///变量名/plain,明文php中的数据传输协议与php://input类似将plain后的明文或是Base64密文传入字符串 Base64密文语法?textdata://text/plain;base64,密文
以上两种方法都能够通过比较。此处涉及PHP伪协议知识详见CTF文件包含教程
回到源码通过比较语句后下一步就是利用include函数得到next.php文件源码了我们可以用php://filter/协议来读取源码
php://filter/readconvert.Base64-encode/resourcenext.php
其中
php://filter表示php过滤器
/read后面跟上要使用的过滤器这里的convert.Base64-encode就是调用Base64过滤器对文件内容进行编码
/resource后面是输入的文件名构造好的url如上文所示访问即可得到密文解码后得到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]);
}至此先告一段落主要掌握文件包含漏洞知识点详见文件包含详解后续知识点还未学习待学习后继续解析。