本文为9.21--9.27这周的更新,这该死的拖延症。
0x00 前言
上周刚做完一个项目,目标部署的大量redis立了大功:暴露公网的6379端口是很好的突破口,内网中root权限运行的redis也堪称提权利器。 遂产生了想把redis漏洞的各种利用方式本地复现一遍的念头,结果因为该死的拖延症,本周只搭好了复现的环境……先水一篇文章再说。 文章标题:实验|CentOS下Redis漏洞利用方式复现 文章标题 :实验|CentOS下从零搭建Redis服务0x01 安装centos虚拟机
1、去centos官网下载iso镜像 这里我选择的是centos7版本,centos8还比较新,用的人暂时还没有7多。 centos7镜像iso下载链接: https://mirrors.xtom.com/centos/7.8.2003/isos/x86_64/ 2、选择下载镜像类型 0_README.txt文件可以看到下面各个镜像的适用范围,这里我们下载最上面的DVD版本,CentOS-7-x86_64-DVD-2003.iso和CentOS-7-x86_64-DVD-2003.torrent两个最后下载的内容是一样的。这里推荐使用下载.torrent文件,然后用迅雷打开进行下载,速度会比直接下载.iso文件快很多。 3、安装系统 下载完成后使用vmware的文件—新建虚拟机,然后加载iso镜像,按照指示进行安装系统,没什么需要特别注意的地方,就类似在windows下安装软件不停的下一步就好了。4、登陆系统
安装完成后使用root账号登陆系统,密码在输入时不会显示,但实际是能输进去的,注意小键盘是否开启(虚拟机貌似会默认关闭小键盘)。0x02 配置CentOS网卡
1、记录网段信息
发现NAT模式下虚拟机网络不通 查阅资料得知刚安装好的centos需要手动配置一下网卡,首先打开Vmware的 【编辑—虚拟网络编辑器—VMnat8—NAT设置】 记录下弹出的子网掩码和网关IP2、修改网卡配置
回到centos虚拟机, cd /etc/sysconfig/network-scripts/ 之后 用 ls 命令寻找默认网卡,ifcfg-开头的排除ifcfg-lo,剩下的那个就是默认网卡,我这里是ifcfg-ens33 使用vi编辑这个文件,将BOOTPROTO=dhcp改为static,然后手动补充IPADDR,NETMASK,GATEWAY和DNS信息,NETMASK和GATEWAY对应子网掩码和网关ip,填写内容为之间记录的内容。IPADDR在子网范围内随意填写,DNS无特殊要求选用任意公用dns均可。最后把ONBOOT从no改为yes使网卡开机自启动3、测试网络
重启网卡,再ping百度就能通了 # s ervice network restart 这里顺便安装一个工具包,后面会用到。输入命令ifconfig可查看到网卡信息即为安装成功。 # yum install -y net-tools0x03 搭建lamp环境
有些好奇宝宝看到这里可能会问:“测试redis,为什么要搭建lamp环境呢?”——因为 redis的利用方式有一条是向web目录下写webshell。 并且我突然发现自己虽然已经手动搭建过数十次的lamp环境,但是centos下的搭建过程还没有记录过,正好在这里记录一下。 1、安装apache 首先更新yum # yum update && yum upgrade 安装apache # yum install httpd httpd-devel 启动apache服务 # systemctl start httpd 查看apache服务状态 # systemctl status httpd 可以看到apache已经跑起来了,但是物理机还无法访问到虚拟机的80端口 配置防火墙放行80和443端口 # firewall-cmd --permanent --zone=public --add-service=http # firewall-cmd --permanent --zone=public --add-service=https # firewall-cmd --reload之后物理机即可访问
2、安装mysql # yum -y install mariadb mariadb-servermariadb-libs mariadb-devel 启动mysql服务 # systemctl start mariadb mysql安全设置 # mysql_secure_installation 根据提示设置数据库root用户密码等设置(初始密码为空) 3、安装php 安装php和php的mysql模块 # yum -y install php # yum -y install php-mysql 安装常用php模块# yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel php-bcmath
vel php-bcmath
重启apache(这里参考文献命令有错误,下面已改正)
# systemctl restart httpd
写php脚本并用浏览器访问
# cd /var/www/html
# vi info.php
<?php phpinfo(); ?>
至此lamp环境搭建完成。
0x04 搭建redis服务
1、下载解压首先安装wget工具
# yum -y install wget
然后安装gcc编译器
# yum -y install gcc gcc-c++ libstdc++-devel
访问http://download.redis.io/releases/挑选你想下载的版本,因为我的目的是进行漏洞复现,所以没有选用最新的版本。挑选好后用wget下载到centos上
# wget http://download.redis.io/releases/redis-4.0.14.tar.gz
下载完成后解压
# tar -zxvf redis-4.0.14.tar.gz
2、编译安装
进入源码目录进行编译
# cd redis-4.0.14
# make CFLAGS="-march=x86-64"
安装tcl
# yum -y install tcl
运行安装测试,可能会出现错误如下
# make test
解决方案:vim修改tests/unit/expire.tcl文件,将tags{“slow”}下面的2100改为21000,1000改为10000
tags {"slow"} { test {EXPIRE - After 2.1 seconds the key should no longer be here} { after 21000 list [r get x] [r exists x] } {{} 0} } test {EXPIRE - write on expire should work} { r del x r lpush x foo r expire x 10000 r lpush x bar r lrange x 0 -1} {bar foo}
再次运行安装测试成功
# make test
开始安装,测试成功了安装一般不会出问题
# make install
redis服务被默认安装到/usr/local/bin目录下
3、启动redis服务
编辑redis配置文件 # vi redis.conf 设置访问ipbind 127.0.0.1 改为 bind 0.0.0.0
设置后台运行
daemonize no 改为 daemonize yes
配置防火墙放行6379端口
#
firewall-cmd
--zone=public --add-port=6379/tcp --permanent
#
firewall-cmd
--reload
启动redis服务
#
/usr/local/bin/redis-server
redis.conf
查看网络信息可以看到6379端口开放,redis启动成功
#
netstat
-antp
4、测试未授权访问
在物理机上用telnet测试连接
telnet 192.168.108.33 6379 输入info并回车(连接后第一次输入命令在cmd上不会显示,但实际是输进去了,和linux输入密码一样) 可以看到打印出了redis信息 至此,redis服务安装完成。0x05 个人感受
虽说现在各种靶机一键运行特别方便,但我还是更喜欢自己手动的去搭一遍环境,感觉这样会理解的更透彻。也不知道这种重复造轮子的行为是对还是错……下面说说我在redis搭建过程中的感受。 (1) redis默认配置中只有一条bind 127.0.0.1保证了安全性(貌似更低的版本默认为bind 0.0.0.0),而实际环境中通常需要多台主机互相通信,开发人员很可能改掉这条配置导致安全性降低。 (2) 配置文件中,密码相关的配置默认是注释掉的,也就是没有密码,注释也导致了这条配置很不显眼。没有安全意识的开发人员就会很容易的忽略这一条,即导致大量【redis未授权访问漏洞】的产生。 (3)我目前在配置文件里没看到redis有相关的防爆破措施,这将导致redis的弱口令更容易被利用。 (4)还有正文里没提到的一点:用ps aux命令可以看到,root用户运行的redis就是root权限,这一点可以用于拿下shell之后的提权(bind 127.0.0.1在这种情况下没什么卵用)。 下周文章将给大家分享redis常用命令,以及渗透测试中获取redis权限后常用的几种利用方式的演示。0x06 后记
因为小黑不是专业的开发人员,对redis的理解可能会有很多错误之处,欢迎各位师傅批评指正,以免本文误人子弟,感激不尽!
0x07 参考文献
https://jingyan.baidu.com/article/642c9d345e3606644a46f7a2.html https://www.cnblogs.com/me80/p/7218883.html https://zhuanlan.zhihu.com/p/36529010 https://blog.csdn.net/u013593306/article/details/51228672?utm_source=copy https://blog.csdn.net/w433668/article/details/82315468END.
欢迎留言~
欢迎关注~
欢迎点赞~
我是小黑,喵~