文章目录

  • 一、防火墙、WAF、IPS、IDS介绍
  • 1.1 防火墙 (Firewall)
  • 1.2 WAF (Web Application Firewall) Web应用防火墙
  • 1.3 IDS (Intrusion Detection System) 入侵检测系统
  • 1.4 IPS (Intrusion Prevention System) 入侵防御系统
  • 二、WAF分类
  • 2.1 云WAF
  • 2.2 硬件WAF
  • 2.3 软件WAF
  • 2.4开源型WAF
  • 2.5 网站内置的WAF
  • 三、WAF功能
  • 2.1 审计
  • 2.2 访问控制设备
  • 2.3 Web应用加固
  • 四、WAF - python实现
  • 4.1 设计原理
  • 4.2 python代码实现
  • 五、工具检测WAF
  • 5.1 wafw00f
  • 5.1.1 介绍
  • 5.1.2 wafw00f的工作原理
  • 5.2 sqlmap
  • 5.3 nmap
  • 六、Reference


一、防火墙、WAF、IPS、IDS介绍

IPS(Intrusion Prevention System) =入侵防御系统
IDS(Intrusion Detection System) =入侵检测系统
WAF(Web Application Firewall) = Web应用程序防火墙

1.1 防火墙 (Firewall)

防护墙,它是一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。在网络中,所谓的防火墙是指一种将内网和外网分开的方法,他实际上是一种隔离技术。

防火墙对流经它的网络通信进行扫描, 这样就能够过滤掉一些攻击,以免其在目标计算机上执行。

通常的防火墙主要工作第二到第四层,重心是在 网络层

其主要功能实现就是对IP:port的访问进行控制,默认情况下关闭所有的通过型访问,只开放允许访问的。

1.2 WAF (Web Application Firewall) Web应用防火墙

Web应用防火墙,是通过执行一系列针对HTTP/HTTPS的安全策略还专门为Web应用提供保护的一款产品。

与传统防火钱不同,WAF工作在 应用层

1.3 IDS (Intrusion Detection System) 入侵检测系统

依照一定的安全策略,通过软件、硬件、对网络、系统的运行状况进行监视尽可能的发现各种攻击企图、攻击行为或者攻击结果,以保证网络系统资源的机密性、完整性和可用性。

入侵检测检测可分为实时入侵检测事后入侵检测

不阻断任何网络访问。

1.4 IPS (Intrusion Prevention System) 入侵防御系统

IPS是对防病毒软件和防火墙的补充,入侵预防系统是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。

不仅可以检测到入侵还可以对入侵进行拦截。

二、WAF分类

WAF分为非嵌入型WAF和嵌入型WAF,非嵌入型WAF指的是硬件型WAF、云WAF、软件型WAF之类的;而嵌入型WAF指的是网站内置的WAF。非嵌入型WAF对Web流量的解析完全是靠自身的,而嵌入型WAF拿到的Web数据是已经被解析加工好的。所以非嵌入型的受攻击机面还涉及到其他层面,而嵌入型WAF从Web容器模块型WAF、代码层WAF往下走,其对抗畸形报文、扫操作绕过的能力越来越强。当然,在部署维护成本方面,也是越高的。

waf python waf python配置_系统安全

2.1 云WAF

一般以反向代理的形式工作,通过配置NS或CNAME记录,使得对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将被认为无害的请求报文再发送给实际网站服务器进行请求,可以认为是自带防护功能的CDN

例如:安全宝、创宇盾、玄武盾、腾讯云(T-Sec Web 应用防火墙)、百度云(应用防火墙 WAF)、西部数码、阿里云盾、奇安信网站卫士

2.2 硬件WAF

以硬件的形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听时只记录攻击,不拦截。

例如:绿盟、安恒、铱迅、天融信、深信服、启明星辰、知道创宇、F5 BIG-IP

2.3 软件WAF

以软件的形式安装在服务器上,可以直接检测服务器是否存在webshell,是否有文件被创建等。

例如:D盾,云锁,网防G01,安全狗,护卫神,智创,悬镜,UPUPW,安骑士

2.4开源型WAF

例如:Naxsi、OpenRASP、ModSecurity

2.5 网站内置的WAF

网站系统内置的WAF直接镶嵌在代码中,相对来说自由度高,网站内置的WAF与业务更加契合,防止出现注入等。

主流WAF:

waf python waf python配置_网络_02

三、WAF功能

2.1 审计

1.审计的作用是对网站人员的操作登录等进行记录;
2.对于安全策略的增加和修改;
3.对于用户的属性和权限进行修改和操作。

2.2 访问控制设备

分为主动控制和被动控制。

2.3 Web应用加固

针对有弱点的Web的应用进行安全策略的加固等操作,比如从网络入侵检测的角度来看可以把WAF看成运行在HTTP层上的IDS设备;从防火墙角度来看,WAF是一种防火墙的功能模块;还有人把WAF看作"深度检测防火墙"的增强。

四、WAF - python实现

4.1 设计原理

通过构造http请求访问目标站点,目标站点=传入url+payload,其中payload是为了让目标站点暴露出防火墙信息。将返回信息的头、体进行分析,与waf规则进行拼配,分析是否存在waf。结果存在以下两种:
①.请求正常,且 返回头 或 返回体 中包含waf指纹库中的waf指纹,则存在该waf;
②.请求返回码403被拒,且匹配不到WAF信息,则也存在WAF,表示此次请求被WAF屏蔽。
建议请求headers使用代理,切不要随意乱扫公网!!!

4.2 python代码实现

waf.py其一(主要代码):

# Reference:https://github.com/jwt1399/Sec-Tools
import re
import requests
import chardet


def checkwaf(headers, content):
    """
    判断是否使用的waf
    :param headers: request返回包res.headeres
    :param content: request返回包res.text[:10000]
    :return: WAF名字/不存在waf
    """
    for rule in WAF_RULE:
        name, method, position, regex = rule.split('|')
        if method == 'headers':
            if headers.get(position) is not None:
                if re.search(regex, str(headers.get(position)), re.I) is not None:
                    return '存在' + name
        else:
            if re.search(regex, str(content), re.I | re.M):
                return '存在' + name
    return '不存在WAF'


def getwaf(url=''):
    result_str = 'url格式错误,请重新输入!正确格式:https://www.wangeditor.com/'
    if url.startswith('https://') or url.startswith('http://'):
        # 使用payload让目标站点爆出防火墙信息
        payload = r'/?id=1%27&d=2"&y=3%27or%27select%20*%20from%20users%20limit%200,1&b=<script>alert(1)</script>&o=eval&yy=%0a%0d'
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}

        if url:
            try:
                res = requests.get(url + payload, headers=headers, timeout=4)
                print(url + payload)
                codetype = chardet.detect(res.content).get('encoding')
                res.encoding = codetype
                result_str = checkwaf(res.headers, res.text)
 
                if res.status_code == 403 and result_str == '不存在WAF':
                    return "存在WAF"
            except Exception as e:
                print(e)
                result_str = '目标站点不可访问'
    return result_str


if __name__ == '__main__':
    waf = getwaf('https://www.wangeditor.com/')
    print(waf)

waf.py其二(waf规则):

# 用于匹配waf的规则
# 格式: waf名|匹配对象|匹配属性|匹配规则
# 360|headers|Server|XXX

WAF_RULE = (
    'WAF|headers|Server|WAF',
    '360|headers|X-Powered-By-360wzb|wangzhan\.360\.cn',
    '360|headers|X-Powered-By|360',
    '360wzws|headers|Server|360wzws',
    'Anquanbao|headers|X-Powered-By-Anquanbao|MISS',
    'Armor|headers|Server|armor',
    'BaiduYunjiasu|headers|Server|yunjiasu-nginx',
    'BinarySEC|headers|x-binarysec-cache|miss',
    'BinarySEC|headers|x-binarysec-via|binarysec\.com',
    'BinarySEC|headers|Server|BinarySec',
    'BlockDoS|headers|Server|BlockDos\.net',
    'CloudFlare CDN|headers|Server|cloudflare-nginx',
    'CloudFlare CDN|headers|Server|cloudflare',
    'cloudflare CDN|headers|CF-RAY|.+',
    'Cloudfront CDN|headers|Server|cloudfront',
    'Cloudfront CDN|headers|X-Cache|cloudfront',
    'Cloudfront CDN|headers|X-Cache|Error\sfrom\scloudfront',
    'mod_security|headers|Server|mod_security',
    'Barracuda NG|headers|Server|Barracuda',
    'mod_security|headers|Server|Mod_Security',
    'F5 BIG-IP APM|headers|Server|BigIP',
    'F5 BIG-IP APM|headers|Server|BIG-IP',
    'F5 BIG-IP ASM|headers|X-WA-Info|.+',
    'F5 BIG-IP ASM|headers|X-Cnection|close',
    'F5-TrafficShield|headers|Server|F5-TrafficShield',
    'GoDaddy|headers|X-Powered-By|GoDaddy',
    'Bluedon IST|headers|Server|BDWAF',
    'Comodo|headers|Server|Protected by COMODO',
    'Airee CDN|headers|Server|Airee',
    'Beluga CDN|headers|Server|Beluga',
    'Fastly CDN|headers|X-Fastly-Request-ID|\w+',
    'limelight CDN|headers|Set-Cookie|limelight',
    'CacheFly CDN|headers|BestCDN|CacheFly',
    'maxcdn CDN|headers|X-CDN|maxcdn',
    'DenyAll|headers|Set-Cookie|\Asessioncookie=',
    'AdNovum|headers|Set-Cookie|^Navajo.*?$',
    'dotDefender|headers|X-dotDefender-denied|1',
    'Incapsula CDN|headers|X-CDN|Incapsula',
    'Jiasule|headers|Set-Cookie|jsluid=',
    'KONA|headers|Server|AkamaiGHost',
    'ModSecurity|headers|Server|NYOB',
    'ModSecurity|headers|Server|NOYB',
    'ModSecurity|headers|Server|.*mod_security',
    'NetContinuum|headers|Cneonction|\Aclose',
    'NetContinuum|headers|nnCoection|\Aclose',
    'NetContinuum|headers|Set-Cookie|citrix_ns_id',
    'Newdefend|headers|Server|newdefend',
    'NSFOCUS|headers|Server|NSFocus',
    'Safe3|headers|X-Powered-By|Safe3WAF',
    'Safe3|headers|Server|Safe3 Web Firewall',
    'Safedog|headers|X-Powered-By|WAF/2\.0',
    'Safedog|headers|Server|Safedog',
    'Safedog|headers|Set-Cookie|Safedog',
    'SonicWALL|headers|Server|SonicWALL',
    'ZenEdge Firewall|headers|Server|ZENEDGE',
    'WatchGuard|headers|Server|WatchGuard',
    'Stingray|headers|Set-Cookie|\AX-Mapping-',
    'Art of Defence HyperGuard|headers|Set-Cookie|WODSESSION=',
    'Sucuri|headers|Server|Sucuri/Cloudproxy',
    'Usp-Sec|headers|Server|Secure Entry Server',
    'Varnish|headers|X-Varnish|.+',
    'Varnish|headers|Server|varnish',
    'Wallarm|headers|Server|nginx-wallarm',
    'WebKnight|headers|Server|WebKnight',
    'Yundun|headers|Server|YUNDUN',
    'Teros WAF|headers|Set-Cookie|st8id=',
    'Imperva SecureSphere|headers|X-Iinfo|.+',
    'NetContinuum WAF|headers|Set-Cookie|NCI__SessionId=',
    'Yundun|headers|X-Cache|YUNDUN',
    'Yunsuo|headers|Set-Cookie|yunsuo',
    'Immunify360|headers|Server|imunify360',
    'ISAServer|headers|Via|.+ISASERVER',
    'Qiniu CDN|headers|X-Qiniu-Zone|0',
    'azion CDN|headers|Server|azion',
    'HyperGuard Firewall|headers|Set-cookie|ODSESSION=',
    'ArvanCloud|headers|Server|ArvanCloud',
    'GreyWizard Firewall|headers|Server|greywizard.*',
    'FortiWeb Firewall|headers|Set-Cookie|cookiesession1',
    'Beluga CDN|headers|Server|Beluga',
    'DoSArrest Internet Security|headers|X-DIS-Request-ID|.+',
    'ChinaCache CDN|headers|Powered-By-ChinaCache|\w+',
    'ChinaCache CDN|headers|Server|ChinaCache',
    'HuaweiCloudWAF|headers|Server|HuaweiCloudWAF',
    'HuaweiCloudWAF|headers|Set-Cookie|HWWAFSESID',
    'KeyCDN|headers|Server|KeyCDN',
    'Reblaze Firewall|headers|Set-cookie|rbzid=\w+',
    'Distil Firewall|headers|X-Distil-CS|.+',
    'SDWAF|headers|X-Powered-By|SDWAF',
    'NGENIX CDN|headers|X-NGENIX-Cache|HIT',
    'FortiWeb|headers|Server|FortiWeb.*',
    'Naxsi|headers|X-Data-Origin|naxsi-waf',
    'IBM DataPower|headers|X-Backside-Transport|\w+',
    'Cisco ACE XML Gateway|headers|Server|ACE\sXML\sGateway',
    'AWS WAF|headers|Server|awselb.*',
    'PowerCDN|headers|Server|PowerCDN',
    'Profense|headers|Server|profense',
    'CompState|headers|X-SL-CompState|.+',
    'West263CDN|headers|X-Cache|.+WT263CDN-.+',
    'DenyALL WAF|content|content|Condition Intercepted',
    'yunsuo|content|content|<img class="yunsuologo"',
    'aesecure|content|content|aesecure_denied.png',
    'aliyun|content|content|errors.aliyun.com',
    'aliyun|headers|Set-Cookie|aliyungf_tc=',
    'Palo Alto Firewall|content|content|has been blocked in accordance with company policy',
    'PerimeterX Firewall|content|content|https://www.perimeterx.com/whywasiblocked',
    'Neusoft SEnginx|content|content|SENGINX-ROBOT-MITIGATION',
    'SiteLock TrueShield|content|content|sitelock-site-verification',
    'SonicWall|content|content|nsa_banner',
    'SonicWall|content|content|Web Site Blocked',
    'Sophos UTM Firewall|content|content|Powered by UTM Web Protection',
    'Unknown FireWall|content|content|firewall',
    '知道创宇云安全WAF|content|content|知道创宇云安全'
)

返回结果:

存在Fastly CDN

五、工具检测WAF

5.1 wafw00f

5.1.1 介绍

wafw00f是一个Web应用防火墙(WAF)指纹识别的工具。
下载地址:https://github.com/EnableSecurity/wafw00f

5.1.2 wafw00f的工作原理

发送正常的HTTP请求,然后分析响应,这可以识别出很多WAF。
如果不成功,它会发送一些(可能是恶意的)HTTP请求,使用简单的逻辑推断是哪一个WAF。
如果这也不成功,它会分析之前返回的响应,使用其它简单的算法猜测是否有某个WAF或者安全解决方案响应了我们的攻击。

5.2 sqlmap

sqlmap --batch --identify-waf --random-agent -u "http://www.test.com"

5.3 nmap

nmap -p 80 443 --script http-waf-detect <目标>