利用Nginx隐藏红队服务器Web应用指纹

avatar
作者
猴君
阅读量:4

攻防演练是一个对抗过程,攻防中红队几乎必定会用到的VPS用于远控或者扫描,为了避免被蓝队溯源反制,对VPS上的Web服务进行访问加固,可以增加蓝队对C2服务器的反制的工作量,降低被溯源的风险

需求说明

由于红队VPS上如果要使用一些远控和扫描功能,会要部署相应的Web服务,例如Viper、NPS、ARL等,如果这些服务没有做反溯源处理,很容易就被微步等平台标记为红队服务器

在这里插入图片描述
一目了然的远控标签,和直接开放的Web服务,都容易让我们成为蓝队的重点溯源目标,被溯源的风险大大增加

为了防止Web服务特征泄露,下面我们通过Nginx反向代理来进行反溯源配置

思路讲解

实现思路很简单,便是利用Nginx提供的ngx_http_auth_basic_module模块,让用户必须输入正确的用户名和密码才能访问网页内容。在密码验证成功之前,用户无法获取网页的任何信息,可以完美隐藏网站原有指纹,还能多一层密码防护

实现方法也不难,首先安装htpasswd生成密码文件,然后通过Nginx指定读取该密码文件进行验证,验证成功后将请求转发到对应Web服务的端口,便可以进行访问了

htpasswd安装

首先安装需要的工具和环境,如果没有安装Nginx可以通过下面的指令进行安装,并设置Nginx服务为开机自启动

yum -y install nginx systemctl start nginx systemctl enable nginx 

然后安装htpasswd工具,用于生成对应的密码文件

yum -y install httpd-tools 

通过下面的指令指定密码文件路径和用户名,文件路径可以随意指定,输入指令后确认两次密码,便能生成对应的密码文件

htpasswd -c /usr/share/nginx/passwd {username} 

如果不小心忘记了密码,可以通过下面这条指令修改密码

htpasswd -D /usr/share/nginx/passwd {username} 

配置Nginx密码认证

先备份nginx配置文件,然后进行编辑

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak vim /etc/nginx/nginx.conf 

修改配置如下,首先是监听端口可以设置不常用端口,我这里设置为常用端口8080是希望对方以为我这是普通web服务,而不是红队工具。中间还一些配置是安全配置,限制爆破速率

然后通过auth_basic_user_file指定密码文件路径为我们刚刚使用htpasswd生成的密码文件,最后配置端口转发,如果密码验证正确则跳转到本地的红队web工具端口

server_tokens off;  # 关闭Nginx版本号回显 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;  # 定义变量,占用空间大小为10m,每秒处理请求不超过2个  server {     listen       8080;     listen       [::]:8080;      location / {             auth_basic "Restricted Access";  # 配置认证提示信息             auth_basic_user_file /usr/share/nginx/passwd;  # 配置存储用户名和密码的文件路径             limit_req zone=mylimit burst=5 nodelay;  # 缓冲队列长度为5             limit_req_status 503;   # 禁止访问后回显状态码             proxy_pass https://127.0.0.1:5003;  # 配置转发到对应端口的服务     } } 

配置完后需要重启Nginx服务才能使配置生效

systemctl restart nginx 

设置监听服务仅能本地访问

以红队工具灯塔(ARL)为例,由于Docker占用了5003端口提供灯塔web服务,我们没办法直接通过Nginx监听5003端口并配置密码认证。我想到的解决方法是先通过Nginx监听其他端口并配置访问密码,一旦密码认证通过则将端口服务转发到灯塔监听的5003端口,这样就能正常使用灯塔服务

但是这样有个问题,就是如果别人不通过Nginx监听的端口访问灯塔,而是直接通过5003访问,那么Nginx配置的密码认证也就没有效果了

解决方法原理一致,只是方式不同:

  1. 通过Linux防火墙配置端口访问黑名单,禁止外网访问5003端口

  2. 通过灯塔进行配置,将服务绑定在本地的5003端口,这样外网就无法访问

这里介绍第二种方式的实现方法,首先进入arl源文件安装路径,关闭docker镜像服务

docker-compose down 

然后编辑docker配置文件,指定本地IP 127.0.0.1 绑定的 5003 端口作为Docker容器中443端口的映射,这样想访问灯塔的web服务就只能通过本地地址 https://127.0.0.1:5003 访问

vim docker-compose.yml 

最后重新启动灯塔服务,使配置文件生效

docker-compose up -d 

实现效果

访问Nginx监听的端口会弹框提示需要输入账号和密码进行验证

验证通过后才会重定向到灯塔的主页,这时候才能正常使用

在这里插入图片描述

抓包端口,没有验证时请求包和响应包中完全看不出灯塔的指纹特征,完美隐藏

在这里插入图片描述

Viper反溯源

Viper 是国人自主编写的一款红队服务器,提供了MSF的图形化的操作界面,让用户使用浏览器便捷的进行内网渗透

这里特意提一下,避免有些人重复操作,由于Viper自带了反溯源功能,我们直接按照他的操作手册配置就行,不用我们再自己配置Nginx反向代理实现反溯源

Viper反溯源教程:https://www.yuque.com/vipersec/install/ilwe2iprztf9hlqv

在这里插入图片描述

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!