前言
记录一次入侵检测/应急响应的实战攻击。
实战思路:
在云服务器(Ubuntu Server 20.04 LTS 64bit)上装docker,docker靶场选择vulhub,红方攻击靶机,蓝方在docker内的靶场环境里进行溯源和入侵检测等一系列防守工作。期间蓝队防守,会用蜜罐来迷惑和检测攻击。蜜罐选用Hfish,在本地的物理机搭建,作为管理端,为docker靶机分配子节点,以此来对docker靶机进行蜜罐部署。
感谢 @Gryffinrab 的红方攻击友情出演
Hfish靶场搭建参考以前的blog。上次的Blog传送门Hfish蜜罐部署
ubuntu 基本配置
设置SSH连接时长
打开云服务器ssh配置文件:
1
vim /etc/ssh/sshd_config
加入如下两个参数保存就可以:
1
2
3
4TCPKeepAlive yes # 保持TCP连接
ClientAliveInterval 600
ClientAliveCountMax 10重启ssh服务
1
service sshd restart
在客户端本地配置
在
~./ssh/config
里添加1
2
3
4断开时重试连接的次数
ServerAliveCountMax 5
每隔10秒自动发送一个空的请求以保持连接
ServerAliveInterval 10
换源
我这里阿里源比腾讯自己的源要快一些
1 | sudo vim /etc/apt/sources.list |
把本来的腾讯源注释掉,换成阿里源
1 | deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse |
更新源
1 | sudo apt-get update |
更新软件
1 | sudo apt-get upgrade |
装oh-my-zsh
安装git
1 | sudo apt install git -y |
查看系统当前shell
1 | echo $SHELL |
查看系统自带哪些shell
1 | cat /etc/shells |
安装zsh
1 | sudo apt install zsh -y |
安装之后 使用 cat /etc/shells
查看系统的shell有 /usr/bin/zsh
说明安装成功。
设置zsh为默认shell
1 | chsh -s /bin/zsh |
然后重启
1 | sudo reboot |
安装oh-my-zsh
1 | sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" |
配置文件
1 | vi ~/.zshrc |
修改主题
修改这一行ZSH_THEME="robbyrussell"
将主题修改为自己喜欢的
重新加载配置文件
1 | source ~/.zshrc |
下载插件
自动提示
1 | git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions |
语法高亮
1 | sudo apt install zsh-syntax-highlighting |
1 | echo "source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc |
修改配置文件,生效插件
1 | vim ~/.zshrc |
找到插件位置,添加刚刚的插件
1 | source ~/.zshrc |
PS:如果重新打开终端看不到自动提示,可能是终端的字体颜色太淡了,可以通过👇配置把字体改亮一些:
1 | cd ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions |
修改自动提示相关的配置文件:ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=10'
1 | vi zsh-autosuggestions.zsh |
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) 可以让服务器的带宽尽量跑慢。并且尽量不要有排队的情况,让网络服务更佳稳定和高效。
修改系统变量:
1 | echo net.core.default_qdisc=fq >> /etc/sysctl.conf |
保存生效
1 | sysctl -p |
执行
1 | sysctl net.ipv4.tcp_available_congestion_control |
如果结果是这样
1 | sysctl net.ipv4.tcp_available_congestion_control |
就开启了。执行 lsmod | grep bbr
,以检测 BBR 是否开启。
vulhub靶场搭建
安装docker-compose
1 | # 安装pip |
靶场的使用
1 | # 下载项目 |
查看readme.md,根据指示访问链接
1 | http://your-ip/index.php?ids[]=1&ids[]=2 |
环境运行成功
为靶场部署蜜罐
思路:在ubuntu服务器部署蜜罐管理端,为docker靶场部署节点蜜罐
端口转发
思路:hfish蜜罐的管理端部署在云服务器中,需要使用内网IP访问
https://10.0.20.15:4433/web
,但由于在云服务器内访问网页不方便,所以想到用端口转发,将内网的端口映射到公网上,这样就可以通过外网去访问了。
打开防火墙端口
1 | sudo ufw allow [端口]/tcp |
重装防火墙,使之生效
1 | sudo ufw reload |
ubuntu部署蜜罐
root用户
1 | bash <(curl -sS -L https://hfish.io/webinstall.sh) |
iptables NAT功能
由于linux主机出于安全考虑,系统参数/proc/sys/net/ipv4/ip_forward默认为0,所以是禁止NAT功能的
修改配置文件
1 | vim /etc/sysctl.conf |
找到以下两行,打开注释,并把0改成1
1 | net.ipv4.ip_forward = 1 |
使配置生效
1 | sudo sysctl -p |
转发配置
1 | iptables -t nat -A PREROUTING -p tcp -d [公网ip] --dport [端口4433] -j DNAT --to-destination [内网IP:端口] |
1 | iptables -t nat -A POSTROUTING -p tcp -s [公网ip] --sport [端口4433] -j SNAT --to-source [公网ip] |
使配置永久生效
1 | sudo apt-get install iptables-persistent |
1 | sudo netfilter-persistent save |
删除配置
列出规则,包括序号
1 iptables -t nat -L -n --line-numbers根据序号删除,这里假如它的序号是1
1 iptables -t nat -D PREROUTING 1
特别重要的一点!就是云服务的防火墙会有拦截!
进入云服务器控制台,添加端口
最后就可以成功在物理机上去访问云服务器里面部署的蜜罐了(内网https://10.0.20.15:4433/web
公网 https://81.x.x.x:4433/web
)
蜜罐服务开启的端口,腾讯云也要打开!
在云服务器内,给docker部署节点蜜罐
使docker可以访问物理机
1 | ip -4 route list match 0/0 | awk '{print $3 " host.docker.internal"}' >> /etc/hosts |
这里有个坑,就是Hfish蜜罐给出的节点
这里有个坑,就是Hfish蜜罐给出的节点管理是4434,但是不知道为什么不能访问,于是就把配置里它的4434改成了别的端口,就可以顺利访问了。
hfish的安装路径
1 | /usr/share/hfish |
修改hfish的端口
1 | cd /usr/share/hfish |
同时要在云服务器的防火墙管理处,添加4435端口
重启hfish蜜罐服务
1 | ps -aux|grep hfish # 找到hfish |
进入docker的bash
1 | docker exec -it [docker的ID] bash |
测试是否可以访问管理端的4435端口
1 | curl -k https://10.0.20.15:4435 |
返回了404notfound,所以访问成功
在云服务上搭建的蜜罐管理端,生成节点
管理节点,填云服务器的内网IP(可以就是蜜罐管理端部署的那个IP)
在docker里安装节点
1 | 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内访问该蜜罐服务,可以顺利访问
1 | curl -k https://172.22.0.3:9101 |
docker-compose配置端口映射
docker映射到宿主机
1 | cd /home/ubuntu/vulhub-master/thinkphp/in-sqlinjection/ # 找到docker靶场的路径 |
重启服务,查看端口是否映射成功
1 | docker-compose down |
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
蜜罐的一些参考链接
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://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/