Aria2是一个命令行下轻量级、多协议、多来源的下载工具(支持 HTTP/HTTPS、FTP、BitTorrent、Metalink),内建XML-RPC和JSON-RPC接口。在有权限的情况下,我们可以使用RPC接口来操作aria2来下载文件,将文件下载至任意目录,造成一个任意文件写入漏洞。
参考文章:https://paper.seebug.org/120/
环境搭建
启动漏洞环境:
docker-compose up -d
6800是aria2的rpc服务的默认端口,环境启动后,访问http://your-ip:6800/
,发现服务已启动并且返回404页面。
漏洞复现
环境:win10 kali 2020
因为rpc通信需要使用json或者xml,不太方便,所以我们可以借助第三方UI来和目标通信,如 http://binux.github.io/yaaw/demo/ 。
打开yaaw,点击配置按钮,填入运行aria2的目标域名:http://your-ip:6800/jsonrpc
:
然后点击Add,增加一个新的下载任务。在Dir的位置填写下载至的目录,File Name处填写文件名。比如,我们通过写入一个crond任务来反弹shell:
这时候,arai2会将恶意文件(我指定的URL)下载到/etc/cron.d/目录下,文件名为shell。而在debian中,/etc/cron.d目录下的所有文件将被作为计划任务配置文件(类似crontab)读取,等待一分钟不到即成功反弹shell:
这里我是直接在cmd中用python开了http服务。
如果反弹不成功,注意crontab文件的格式,以及换行符必须是
\n
,且文件结尾需要有一个换行符。
当然,我们也可以尝试写入其他文件,更多利用方法可以参考这篇文章
这个没有成功,感觉应该是cron服务的问题,我直接在docker容器中,将命令写入crontab列表,可以在crontab -l中查看,而且这个命令在 ActiveMQ漏洞复现中使用过(该漏洞也是将命令写入cron,然后getshell),在容器中直接使用命令也可以成功,但是写入crontab就不可以。
更新:1.在容器里面装了个vim就能用crontab了,具体路径和ActiveMQ漏洞复现中的一样。
2.传入的文件要注意格式(set ff=unix),或者直接在linux中生成文件,
3.文件我测试下来只有和用户名相同的文件能列入crontab 中(用crontab -l 查看),比如你是root@xxxxxx:那文件名就要是root。
还没解决的问题:如果是只有root文件的能写入cron,那该怎么利用?(传入同名文件,不会覆盖,会添加后缀。。)这个docker环境里面一开始是没有root文件的,还是可以成功的。。
参考链接:
vulhub/README.zh-cn.md at master · vulhub/vulhub (github.com)
binux/yaaw: Yet Another Aria2 Webui in pure HTML/CSS/Javascirpt (github.com)
(49条消息) Linux crontab 不执行的原因和如何检查错误大全_小姜哥的技术博客-CSDN博客
(49条消息) Ubuntu安装vim_lixinghua666的博客-CSDN博客_ubuntu安装vim
(49条消息) Debian 9 Stretch国内常用镜像源_哈哈虎的博客-CSDN博客_debian stretch