当前位置: 首页 > news >正文

赛季7靶场 -- Code -- HTB writeup(Just hint)

        本系列仅说明靶场的攻击思路,不会给出任何的详细代码执行步骤,因为个人觉得找到合适的工具以实现攻击思路的能力也非常重要。

1.首先我们对靶场进行了Nmap扫描,很快我们发现了Web应用端口何SSH端口

2.显然我们无法直接突破ssh,因为我们目前一无所知。所以我们需要去探索Web应用是什么。我们进入Web页面很容易发现是Gunicorn,这是一个Python沙盒。于是我们快速去查看相关版本的漏洞,成功发现存在一处HTTP走私的漏洞,虽然我们目前还不了解如何利用它。我们还注意到python沙盒本身的特性也意味着我们可能编写特殊的python代码完成reverseShell。这下摆在我们面前了两条道路。

3.为了确定我是强攻Python沙盒还是使用HTTP走私窃取用户Cookie,我决定对目录进行爆破&爬取,以确定是否存在管理后台,以决定是否先窃取cookie。爆破后我并没有发现管理后台,那么目前我仅有强攻Python沙盒这一条路。

4.我开始直接尝试执行reverseShell的pyhthon脚本,不幸的是我被拦截了。于是我查明被拦截的关键字,有import、eval、system、os,敖这太不幸了,因为这正是我们需要的。于是我开始再互联网查找python沙盒绕过技巧。我依次尝试所有方法,发现__g***s__变量并未被过滤,我们借助__g***s__变量发现了我们可以使用__d***t__这个类,这个类可以帮助我们将eval拆开成['ev'+'al'],从而成功绕过检测。于是我们开始构造payload,成功完成了reverseShell。

5.很好,我们完成了第一步,我们的名字是app***,显然我们应该是一个Web服务用户。我们所在的文件夹也是Web服务所在的文件夹。在这种情况下,我们通常非常希望了解数据库的信息,因为这个Web服务存在账号密码登录页,所以它一定存在数据库,数据库内一定有账号密码。在去寻找数据库之前,我通常还喜欢先查看sudo权限和当前的网络情况,并使用linpeas全方位快速探索一遍,因为数据库的密码虽然很香,但并不一定是最快的路径,我们值得尝试其他路径。很可惜,我没有发现直接提权的道路。

6.那么我开始搜索数据库文件,因为我发现在网络情况中没有发现本地数据库服务端口,所以开始以后缀搜索数据库文件。很好!我们找到了一个***.db文件。这是一个sqlite3的数据库,我们拉到攻击机在本地查询数据库。很快,我们发现了有意思的数据,我们拿到了两个账户的hash

7.对hash进行破解。使用知名字典很快就破解了。我们获得了martin账户!

8.使用martin账户登录ssh,进入系统我想我应该是一名运维用户,但并非管理员,是一名低权限账号。这种低权限账号,通常是某个特定功能的账户,那么sudo可能有有趣的东西。我们查看sudo -l,很快我们发现了sudo可以执行一个backy.sh的文件,这对我们来说充满了魅力,因为一旦我们可以控制.sh文件,我们就能够完成reverseShell。我查看了backy.sh的权限,可惜我没有写权限。那么我们需要看看这个.sh文件究竟是干什么的,因为sudo命令配上读写或是命令执行的权限都是致命的。我们快速研究backy.sh文件,发现他是一个备份文件,专门备份/var/和/home/两个文件夹。

9.这里的备份能力让我们非常感兴趣,因为我们可以利用sudo备份/root/文件夹。接下来让我们尝试修改task.json,备份/root/文件夹。可惜backy.sh对此做了控制。那么我们尝试绕过,可以看到,他首先会检测/var/和/home/关键字,匹配不到直接不执行,那么我们的头部一定必须是/home/或/var/,所以自然我们就希望出现/var/../../../../root/这样的字段出现。

10.我们尝试获取/var/../../../../root/这样的字段出现。我们修改了task.json,备份/var/../../../../root/,可惜我们的../全部被过滤了。那么尝试双写/var/..././..././..././..././root/,我们成功让backy.sh准备压缩/var/../../../../root/目录,但依旧存在问题。backy.sh仅仅是做了准备,但并没有真的压缩,我为此感到非常困惑。于是我决定去监控进程的执行情况。

11.为了监控进程执行情况,我使用了pspy64持续监控当前服务器的命令执行情况。我们发现sudo使用backy.sh后,root用户执行了一个tar命令,这是在太有趣了,因为众所周知tar指令可以执行系统命令。为了能够构造执行系统命令的payload,我进一步查看task.json中可能存在注入的地方。我们发现task.json中的exclude处也存在注入,这实在是非常让人激动,因为这意味着我们可以使用&&或者||或者构造--checkpoint=1来执行任意命令。于是我开始尝试我们的猜想,可惜的是都失败了,具体原因不详(都怪俺太菜)。

12.那么我们接下来只能去尝试压缩/root/文件夹,我们在让backy.sh准备压缩/var/../../../../root/目录的同时,通过task.json中的exclude参数来构造让tar指令压缩/root/的命令。于是我们成功了。这里可能有朋友会觉得奇怪,攻击的途中我们会发现tar指令压缩/var/../../../../root/的指令没有成功,这是因为tar并不支持/var/../../../../root/这种路径,我们必须给他一个没有../的路径。所以我们必须让backy.sh准备压缩/var/../../../../root/的同时,在exclude参数注入Payload来让tar指令压缩/root/。

13.于是我们获得了/root/的压缩文件,我们拿到了root的id_rsa,到此我们成功拿下主机。恭喜你们!

相关文章:

  • 测试用例的场景化分析方法
  • 蓝桥杯高频考点——二分(含C++源码)
  • 打磨和修改:字帖自动生成
  • 准确--配置服务器文件数
  • AP 场景架构设计(一) :OceanBase 读写分离策略解析
  • JVM - 年轻代和老年代
  • Linux设备永久挂载
  • 豪越HYCloud消防一体化安全管控平台:融合创新,重塑格局
  • React Hooks使用方法:useState,useRef,useEffect,useReducer,useContext用法实战案例
  • 查询需要用户认证的关键资产(ArkTS)
  • C#基础学习(六)函数的变长参数和参数默认值
  • Leaflet.js+leaflet.heat实现热力图
  • MongoDB 实际工作中应用场景
  • 微信小程序学习
  • Docker镜像瘦身:从1GB到50MB实战
  • Leetcode 二进制求和
  • rudux中间件
  • 如何在自己的数据集上跑通DEIM(CVPR2025)
  • 深入理解垃圾收集算法:从分代理论到经典回收策略
  • 全球变暖
  • 浙江美术馆馆长人民日报撰文:打开更辽阔的审美场域
  • 中国新闻发言人论坛在京举行,郭嘉昆:让中国声音抢占第一落点
  • “走进书适圈”:一周城市生活
  • 探秘多维魅力,长江经济带、珠三角媒体总编辑岳阳行启动
  • “9+2”复式票,浦东购彩者拿下体彩大乐透1153万头奖
  • 证监会:2024年依法从严查办证券期货违法案件739件,作出处罚决定592件、同比增10%