前言

记录一次入侵检测/应急响应的实战攻击。

实战思路:

在云服务器(Ubuntu Server 20.04 LTS 64bit)上装docker,docker靶场选择vulhub,红方攻击靶机,蓝方在docker内的靶场环境里进行溯源和入侵检测等一系列防守工作。期间蓝队防守,会用蜜罐来迷惑和检测攻击。蜜罐选用Hfish,在本地的物理机搭建,作为管理端,为docker靶机分配子节点,以此来对docker靶机进行蜜罐部署。

感谢 @Gryffinrab 的红方攻击友情出演


Hfish靶场搭建参考以前的blog。上次的Blog传送门Hfish蜜罐部署

ubuntu 基本配置

设置SSH连接时长

  • 打开云服务器ssh配置文件:

    vim /etc/ssh/sshd_config
    

    加入如下两个参数保存就可以:

    TCPKeepAlive yes    # 保持TCP连接
    
    ClientAliveInterval 600      
    ClientAliveCountMax 10
    
  • 重启ssh服务

    service sshd restart
    
  • 在客户端本地配置

    ~./ssh/config里添加

    # 断开时重试连接的次数
      ServerAliveCountMax 5        
    # 每隔10秒自动发送一个空的请求以保持连接
      ServerAliveInterval 10
    

换源

我这里阿里源比腾讯自己的源要快一些

sudo vim /etc/apt/sources.list

把本来的腾讯源注释掉,换成阿里源

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse 

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse 

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse 

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse 

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse 

deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse focal

更新源

sudo apt-get update

更新软件

sudo apt-get upgrade

装oh-my-zsh

安装git

sudo apt install git -y

查看系统当前shell

echo $SHELL

查看系统自带哪些shell

cat /etc/shells

安装zsh

sudo apt install zsh -y

安装之后 使用 cat /etc/shells 查看系统的shell有 /usr/bin/zsh说明安装成功。

设置zsh为默认shell

chsh -s /bin/zsh

然后重启

sudo reboot

安装oh-my-zsh

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

配置文件

vi ~/.zshrc

修改主题

修改这一行ZSH_THEME="robbyrussell"将主题修改为自己喜欢的

重新加载配置文件

source ~/.zshrc

下载插件

自动提示

git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

语法高亮

sudo apt install zsh-syntax-highlighting
echo "source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc

修改配置文件,生效插件

vim ~/.zshrc

找到插件位置,添加刚刚的插件

source ~/.zshrc

PS:如果重新打开终端看不到自动提示,可能是终端的字体颜色太淡了,可以通过👇配置把字体改亮一些:

cd ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions

修改自动提示相关的配置文件:ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=10'

vi zsh-autosuggestions.zsh
source ~/.zshrc

Ubuntu 快速开启 TCP BBR 实现高效单边加速

Linux Kernel 内核升级到 4.9 及以上版本可以实现 BBR 加速,由于Ubuntu 18.04 默认的内核就是 4.15版本的内核。

由于Ubuntu 20.04 默认的内核就是 5.4 版本的内核,并已经默认编译了 TCP BBR 模块,所以可以直接通过参数开启。新的 TCP 拥塞控制算法 BBR (Bottleneck Bandwidth and RTT) 可以让服务器的带宽尽量跑慢。并且尽量不要有排队的情况,让网络服务更佳稳定和高效。

修改系统变量:

echo net.core.default_qdisc=fq >> /etc/sysctl.conf
echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf

保存生效

sysctl -p

执行

sysctl net.ipv4.tcp_available_congestion_control

如果结果是这样

sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno

就开启了。执行 lsmod | grep bbr ,以检测 BBR 是否开启。

vulhub靶场搭建

vulhub官方安装

安装docker-compose

# 安装pip
curl -s https://bootstrap.pypa.io/get-pip.py | python3

# 安装最新版docker
curl -s https://get.docker.com/ | sh

# 启动docker服务
systemctl start docker

# 安装compose
pip install docker-compose 

靶场的使用

# 下载项目
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master

# 进入某一个漏洞/环境的目录
cd thinkphp/in-sqlubjection

# 自动化编译环境
sudo docker-compose build

# 启动整个环境
sudo docker-compose up -d

查看readme.md,根据指示访问链接

http://your-ip/index.php?ids[]=1&ids[]=2

环境运行成功

为靶场部署蜜罐

思路:在ubuntu服务器部署蜜罐管理端,为docker靶场部署节点蜜罐

端口转发

思路:hfish蜜罐的管理端部署在云服务器中,需要使用内网IP访问 https://10.0.20.15:4433/web,但由于在云服务器内访问网页不方便,所以想到用端口转发,将内网的端口映射到公网上,这样就可以通过外网去访问了。

打开防火墙端口

 sudo ufw allow [端口]/tcp

重装防火墙,使之生效

sudo ufw reload

ubuntu部署蜜罐

root用户

bash <(curl -sS -L https://hfish.io/webinstall.sh)

iptables NAT功能

由于linux主机出于安全考虑,系统参数/proc/sys/net/ipv4/ip_forward默认为0,所以是禁止NAT功能的

修改配置文件

vim  /etc/sysctl.conf 

找到以下两行,打开注释,并把0改成1

net.ipv4.ip_forward = 1
net.ipv6.ip_forward = 1

使配置生效

sudo sysctl -p

转发配置

iptables -t nat -A PREROUTING  -p tcp -d [公网ip] --dport [端口4433] -j DNAT --to-destination [内网IP:端口]
iptables -t nat -A POSTROUTING -p tcp -s [公网ip] --sport [端口4433] -j SNAT --to-source [公网ip]

使配置永久生效

sudo apt-get install iptables-persistent
sudo netfilter-persistent  save
sudo netfilter-persistent reload

删除配置

列出规则,包括序号

iptables -t nat -L -n --line-numbers

根据序号删除,这里假如它的序号是1

iptables -t nat -D PREROUTING 1

特别重要的一点!就是云服务的防火墙会有拦截!

进入云服务器控制台,添加端口

最后就可以成功在物理机上去访问云服务器里面部署的蜜罐了(内网https://10.0.20.15:4433/web 公网 https://81.x.x.x:4433/web)

蜜罐服务开启的端口,腾讯云也要打开!

在云服务器内,给docker部署节点蜜罐

使docker可以访问物理机

ip -4 route list match 0/0 | awk '{print $3 " host.docker.internal"}' >> /etc/hosts

这里有个坑,就是Hfish蜜罐给出的节点

这里有个坑,就是Hfish蜜罐给出的节点管理是4434,但是不知道为什么不能访问,于是就把配置里它的4434改成了别的端口,就可以顺利访问了。

hfish的安装路径

/usr/share/hfish
/opt/hfish

修改hfish的端口

cd /usr/share/hfish
vim config.toml

同时要在云服务器的防火墙管理处,添加4435端口

重启hfish蜜罐服务

ps -aux|grep hfish   # 找到hfish
kill [PID]           # 杀掉进程 hfish-server
/opt/hfish/hfish-server -d /opt/hfish/2.9.1  # 开启进程

进入docker的bash

docker exec -it [docker的ID] bash

测试是否可以访问管理端的4435端口

 curl -k https://10.0.20.15:4435

返回了404notfound,所以访问成功

在云服务上搭建的蜜罐管理端,生成节点

管理节点,填云服务器的内网IP(可以就是蜜罐管理端部署的那个IP)

在docker里安装节点

 sh -c "$(curl -k https://10.0.20.15:4435/tmp/bGnhE0WjjNo9.sh)"

环境测试

用物理机上装的kali,扫一下云服务器上的docker靶场。预期效果,应该是云服务器上的蜜罐管理端会告警此次扫描

外部可以访问到docker靶场,http://81.70.247.200/index.php?ids[]=1&ids[]=2,并且开启了80端口。尝试蜜罐开启80端口的蜜罐服务,看会有什么变化。

要把docker里面的80端口映射到公网,并且公网的蜜罐服务,要关闭80端口的服务

配置端口映射

Docker IP 是172.22.0.3。宿主机IP 是10.0.15.20

映射端口,使172.22.0.3的蜜罐服务端口能够通过公网IP访问到。

docker-compose配置文件映射,使得物理机可以访问该端口,再映射到外网

蜜罐管理端开启Aruba无线AP蜜罐

9101,docker内访问该蜜罐服务,可以顺利访问

curl -k https://172.22.0.3:9101

docker-compose配置端口映射

docker映射到宿主机

 cd /home/ubuntu/vulhub-master/thinkphp/in-sqlinjection/   # 找到docker靶场的路径
 vim docker-compose.yml

重启服务,查看端口是否映射成功

docker-compose down
docker-compose up -d
docker container ls -l

docker的IP发生了变化,所以节点需要重新部署

在蜜罐管理端,生成新的脚本,在docker的bash里面运行。子节点部署成功,管理端里开启9101的服务

接下来用https://公网IP:9101 https:// 服务器内网IP:9101 https://dockerIP:9101 都可以正常访问了

后记

之前为了不那么难,所以docker的服务都映射出去了,后面可以再来一个docker,不公开映射出来这些端口,需要攻击方拿下云服务器的bash,在利用云服务器,去访问docker,找flag,进而进行内网渗透。

参考文章

https://blog.csdn.net/qm5132/article/details/83039405

内网渗透中的端口转发

docker的网络模式:docker访问宿主机

docker访问宿主机

蜜罐的一些参考链接

https://blue.y1ng.org/0x7_honeypots/

https://www.freebuf.com/sectool/190840.html%C2%A0T-Pot

https://www.pa55w0rd.online/hfish-web/

https://www.freebuf.com/vuls/289282.html

https://github.com/hacklcx/HFish

https://hfish.io/#/2-2-linux

https://jocatw.github.io/2020/11/08/Hfish%E8%9C%9C%E7%BD%90%E6%90%AD%E5%BB%BA%E4%B8%8E%E4%BD%BF%E7%94%A8/

https://github.com/paralax/awesome-honeypots/blob/master/README_CN.md#honeypots

https://sosly.me/index.php/2018/03/22/jymiguan7/

http://pirogue.org/2019/01/15/opencanary_2/

https://github.com/p1r06u3/opencanary_web

https://zhuanlan.zhihu.com/p/110886405

评论