前言
我在WEB渗透的工作中常常会碰到这样的现象:很多企业单位在对自身的资产梳理往往都存在或多或少的问题,如:
问题 | 为什么产生? | 解决? | 备注 |
---|---|---|---|
资产梳理有遗漏 |
|
… | - |
公网暴露面过多 |
|
危害展示 | 技术角度看 |
商用与开源系统、组件版本过低 |
|
… | - |
等等 |
- 什么是公有云?
公有云是最常见的云计算部署类型。
公有云资源(例如服务器和存储空间)由第三方云服务提供商拥有和运营,这些资源通过 Internet 提供。
在公有云中,所有硬件、软件和其他支持性基础结构均为云提供商所拥有和管理。
啰嗦了这么多,介绍公有云是因为要从技术角度来看问题就需要实际应用,而实验条件有限,只能通过公有云环境下来研究公私云边界,步入主题;
环境假设
现阶段能够模拟的公有云环境如下:
业务 | 监听地址 | 监听端口 | 备注 |
---|---|---|---|
nginx 主站 |
缺省/::: | 443 | - |
API接口 | 缺省/::: | 7000 | frps |
后端管理组件 | 缺省/::: | 7500 | frps |
nginx 负载均衡 |
缺省/::: | 8001 | proxy_pass |
我们知道,1、2两个业务是需要通过公网访问的,当然API也可以部署内网,但前提是对应API请求代码也需要有所改动,所以暂时先不动;那么着重来看3和4。
部署”私有”云
实际上,frp
是拥有管理面板页面的,具体管理地址是0.0.0.0:7500
,那么我们如何让她本地监听从而达到”私有访问”的目的呢?
在默认情况下给出的配置无法进行本地监听配置,查看其对应服务端文档配置如下:
[common]
bind_port = 7000
# 授权码,请改成更复杂的
token = {your_token_value}
# frp管理面板监听地址和端口,请按自己需求更改
dashboard_addr = 127.0.0.1
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = {your_dashboard_user_value}
dashboard_pwd = {your_dashboard_pwd_value}
enable_prometheus = true
# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
加上dashboard_addr = 127.0.0.1
一行配置即可;
# netstat -antup|grep frp
tcp 0 0 :::7500 0.0.0.0:* LISTEN 5557/./frps
# 配置前
# netstat -antup|grep frp
tcp 0 0 127.0.0.1:7500 0.0.0.0:* LISTEN 5557/./frps
# 配置后
而nginx同理,修改sever
区块监听即可
server {
listen localhost:8001;
}
值得注意的是:当nginx在处于运行中,配置本地监听后
nginx -s reload
是无法生效的,正确操作应该是nginx -s stop
在启动。
服务私有
我们对公有云上的应用进行私有化后,假设现在需要访问应用,要怎么做呢?答:VPN代理(以下简称proxy)
- 第一步:准备proxy连接文件(这里同样以frp为例)
frpc-proxy.ini
[common]
server_addr = {proxy_server_addr}
server_port = {proxy_server_port}
token= {your_token_value}
[{some_word_descr_clien}]
type = tcp
remote_port = {proxy_traffic_port}
plugin = socks5
plugin_user = {proxy_server_username}
plugin_passwd = {proxy_server_pwd}
...
- 第二步:proxy_server端进行proxy启动,
nohup frps -c frps.ini &
- 第三步:proxy_client连接启动,
nohup frps -c frpc-proxy.ini &
- 第四步:测试。
下面附上常见proxy软件:
全局proxy | 终端proxy | 浏览器proxy | 备注 |
---|---|---|---|
Proxifier |
proxychains4 |
很多 | - |
如上,我们就可以通过proxy的形式访问到私网应用;终端proxy连接ssh命令可以:proxychains4 ssh root@{your_inside_ip}
,同时不要忘记登录ECS控制台阻止ssh 22 0.0.0.0/0
即可,若proxy失效可以控制台连接私网地址或者重新放行公网ssh端口流量。
$ proxychains4 ssh root@{your_inside_ip}
···
Welcome to Alibaba Cloud Elastic Compute Service !
No mail.
Last login: Thu Nov 11 11:49:01 2021 from {your_inside_ip}
root@bin4xin:~#
proxychains4配置:/etc/proxychains.conf || /usr/local/etc/proxychains.conf => socks5 {proxy_server_addr} {proxy_traffic_port} {proxy_server_username} {proxy_server_pwd}
,mac终端记得要SIP关闭才可以使用pc4。
总结
实际上渗透测试就是模拟黑客的方法对系统和网络进行攻击性测试,目的是侵入系统,通过工具结合安全工程师的技术手段,发现应用系统在逻辑方面的安全风险隐患;
而工作中常以黑、灰盒为主的渗透测试,公网居多,若能减少公网暴露面,在某种程度上来说是也是在公有私有云的边界处设置了一道阻碍,无形中给一些恶意利用者增加了攻击难度;当然这里只是简单介绍了一些常见的应用部署,能通过技术改变的还有很多,当然我们也可以发散思维来做到更多很酷的事情。