『渗透测试』信息收集(二)设备平台
本文主要介绍渗透测试的信息收集阶段中,可能遇到的WAF、蜜罐和CDN这三种设备平台的相关知识
WAF
基本概念
-
什么是WAF:WAF的全称是(Web Application Firewall),即Web应用防火墙。WAF是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品,提供web应用层防护安全能力。
WAF只保护web应用,如果目标服务器上还开放了其他的服务,WAF并不会对其进行保护
-
原理:WAF主要是通过内置的很多安全规则 来进行防御。
- 可防护常见的SQL注入、XSS、网页篡改、中间件漏洞等OWASP TOP10攻击行。
- 当发现攻击后,可将IP进行锁定,IP锁定之后将无法访问网站业务。
- 也支持防止CC攻击,采用集中度和速率双重检测算法。
-
WAF的分类与其部署方式
目前使用非嵌入型WAF比较多,中小型公司使用软件型WAF,zf、jg、学校一般使用硬件型WAF,大型公司使用云WAF(防护能力最强)
WAF识别
-
wafwoof
kali中执行下面的命令进行WAF扫描(注意是0不是O)
1
2# wafw00f ip/域名
wafw00f www.isoda.top -
identYwaf
地址:https://github.com/stamparm/identywaf
与wafwoof相比运行速度慢,比较稳定推荐还是使用这一款工具。
这两个工具的原理都是:发送一系列定制的HTTP请求,捕获响应中的特定模式并匹配特征库进行识别(如被拦截的错误页面图片模板)
-
网站请求信息中暴露
网站请求数据包中的
X-Powered-By
字段暴露WAF相关信息 -
nmap指纹检测
1
2
3
4# nmap -p 80,443 --script=http-waf-detect 目标主机
nmap -p 80,443 --script=http-waf-detect www.isoda.top
# nmap -p 80,443 --script=http-waf-fingerprint 目标主机(精度更高)
nmap -p 80,443 --script=http-waf-fingerprint www.isoda.top
识别WAF对于安全测试的意义
在开始测试之前检测是否存在WAF,如果存在的是软件WAF可以尝试绕过。如果是其他WAF的话大部分都是没办法绕过的,只能考虑从web应用以外的方向攻击,或者直接放弃测试。
- 一个网站要是使用了waf,而渗透人员没有识别直接使用工具进行扫描,有可能会导致waf将你的ip地址拉入黑名单而不能访问。
- 不同waf可能存在着不同的绕过思路,可以有针对性行的绕过各个厂商的waf。
蜜罐
基本概念
-
什么是蜜罐
蜜罐(Honeypot)是一种网络安全机制,用于吸引、检测、分析和防御网络攻击。它通常被设计成一个看似真实但实际上是受控的系统或环境,诱使攻击者对其进行攻击,从而保护真正的系统并收集有关攻击行为的信息。
-
蜜罐在红蓝对抗中扮演的角色
- 红队:通过识别蜜罐来发现和规避蜜罐
- 蓝队:部署蜜罐来保护真正的系统,通过分析蜜罐的被攻击记录推测攻击者的意图和攻击手法等信息
-
蜜罐的分类
1)根据蜜罐与攻击者之间进行的交互的程度分类
- 低交互蜜罐
- 中交互蜜罐
- 高交互蜜罐
2)根据蜜罐模拟的目标分类
- 数据库蜜罐
- 工控蜜罐:模拟ICS设备,如SCADA、PLC
- 物联网蜜罐:模拟IOT设备,如路由器、智能摄像头
- Web蜜罐
- …
-
开源蜜罐项目
蜜罐识别
-
蜜罐识别技术的原理
-
人工分析方法
人工审查目标服务器IP,如果是蜜罐的话可能存在以下的特征:
1)端口多而有规律性:蜜罐通常开放多个端口,以模拟真实服务器的服务。这些端口可能包括常见的 HTTP、SSH、MySQL 等服务端口。可能开放多个端口运行http服务,端口号连续且比较大。
2)蜜罐设计导致真实应用解析问题:例如目标服务器存在开放端口3306( 一般运行MySQL服务)
-
如果这个服务器不是蜜罐:如果你在浏览器中访问
http://目标IP:3306
,通常会提示“连接被拒绝”或“无法建立连接”。因为 MySQL 是基于特定数据库协议的,而浏览器主要支持 HTTP/HTTPS 协议,因此MySQL 服务器并不支持 HTTP,从而拒绝连接。 -
如果这个服务器是蜜罐:如果你在浏览器中访问
http://目标IP:3306
,通常不是返回常见的 HTML 页面,而是立即提示或开始下载JSON或HTML文件。蜜罐会捕获攻击者尝试暴力破解 SSH、MySQL 等服务的用户名和密码,记录的账号密码通过 Web 功能(如 JSONP)传输到蜜罐运维方的实时监控后台。因为这里使用到了jsonp等web功能,浏览器访问的时候就会使用web协议来解析,从而导致了下载(蜜罐的设计理念所导致的问题)。
参考:
假设百度某个接口存在jsonp漏洞,防守方可在web蜜罐页面上,加载一个js,由于js请求可跨域,即可向存在jsonp漏洞的xx.baidu.com/xx发请求。
如果访问者存在baidu.com的登录态,那么这个请求是能自动带上baidu.com的cookie的,响应中会有回调函数以及json格式封装的数据。3)蜜罐设备指纹分析
记录维护常见的蜜罐设备指纹信息
-
-
工具
-
Heimdallr:chrome浏览器插件
-
https://github.com/360quake/quake_rs 需要会员
1
quake.exe honeypot 目标IP
-
CDN
基本概念
-
原理
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。但在安全测试过程中,若目标存在CDN服务,将会影响到后续的安全测试过程。
-
CDN对于安全测试有那些影响?
1
2
31.传统访问:用户访问域名–>解析服务器IP–>访问目标主机
2.普通CDN:用户访问域名–>CDN节点–>真实服务器IP–>访问目标主机
3.带WAF的CDN:用户访问域名–>CDN节点(WAF)–>真实服务器IP–>访问目标主机- CDN会隐藏服务器真实的ip地址,无法对目标网站的操作系统进行渗透
- 但CDN站点又可以理解为是目标站点的镜像站点(大多数都是静态CDN加速),拥有相同的网站架构,且CDN服务器可与站点服务器进行交互,因此sql注入,xss等漏洞的挖掘并不受太大影响。
-
常见的CDN服务提供商
1)国内:阿里云 百度云 七牛云 又拍云 腾讯云 Ucloud 360 网宿科技 ChinaCache
2)国外:CloudFlare StackPath Fastly Akamai CloudFront Edgecast CDNetworks Google Cloud CDN CacheFly Keycdn Udomain CDN77
如何判断目标存在CDN服务?
-
多节点请求技术
如果ping的结果只有一个那么就没有CDN、要是不止一个则可以判断为有CDN
-
nslookup查询域名解析信息
如果查询结果中adress存在不止一个,表示使用了CDN
1
nslookup www.baidu.com
CDN绕过
子域名查询
-
原理
假设存在主站 www.isoda.top(192.168.1.100) 和子站 bbs.isoda.top ,两个网站可能存在三种关系:
-
子站ip也是 192.168.1.100:由同一台服务器托管,或使用了同一个CDN
-
子站ip在同一个网段上,ip为192.168.1.1-254:处于同一数据中心或服务提供商的机房中,或者是运行在同一局域网内的不同服务器上
-
子站ip在不同网段上:没有关系,一般不考虑
一般主站的流量要比子站大得多,所以很多站长只会对主站或者流量大的子站点做CDN服务。在这种情况下,可以通过子站的真实IP推算出主站的真实IP(和子站在同一台服务器或者同一个C段)。
-
-
方法
1)获取子域名
-
子域名扫描器
- layer:基于字典进行挖掘
-
谷歌语法
1
2# 查看www以外的一子域名
site:baidu.com -www
2)使用进行超级ping工具进行多节点ping,找没有用cdn解析的子站点
-
ping 带
www
和不带www
的网站主站域名大部分网站会将带
www
和不带www
的请求指向同一台服务器,保证两者的内容一致。但如果网站使用了 CDN 或缓存服务,而带www
和不带www
的域名使用了不同的解析策略,请求可能有一个指向CDN,而另一个指向的是真实IP。例如这里可以看到,我们是可以对
www
和*
的访问进行分别配置的 -
ping 主站的手机端域名
一般是在域名前加上
m.
,可以访问网站对应的客户端版本
-
邮件服务查询
-
原理
一般的中大型网站都会存在邮件服务,这种服务一般都是只有内部员工访问,所以并不会使用CDN。
-
方法
我们可以尝试让网站向我们发送邮件(利用注册账号、找回密码等接口,让网站向我们的邮箱发送验证码),然后通过邮箱反查技术获取到邮件服务器的真实IP信息,邮件服务器的真实IP一般与网站IP相同或处于同一个网段。
-
直接查看邮件源代码(gmail、outlook可用),里面存在网站真实IP
-
-
常见的邮件触发点
- RSS订阅
- 邮箱注册、激活处
- 邮箱找回密码处
- 产品更新的邮件推送
- 某业务执行后发送的邮件通知
- 员工邮箱、邮件管理平台等入口处的忘记密码
国外地址请求
-
原理:国内的服务器为了节省成本,一般不会部署CDN到国外的运营商。
-
方法:在这种情况下,通过国外的代理直接访问网站可能可以直接获取到真实IP。
但是有些比较大或离中国比较近的国家(美国、加拿大、日本等)还是可能会部署CDN,所以尽量找比较冷门的国家。
-
工具
全网扫描
-
原理
基于网站所使用CDN厂商,去IP库中查询
准确率低、麻烦、时间成本大,属于没有办法的办法
-
方法
1)判断目标网站使用的CDN服务提供商
工具:https://tools.ipip.net/cdn.php
2)IP库筛选地址段
基于CDN服务提供商,在IP库中查询该服务提供商的真实IP地址范围
工具:纯真IP库 https://github.com/FW27623/qqwry
3)配置范围扫描
基于目标网站的一些特征(如网站的标题),扫描获取到的IP地址范围,看是否存在匹配的网站
工具:
- fuckcdn https://github.com/Tai7sy/fuckcdn
- w8 fuckcdn
- zmap
遗留文件
-
原理
一些站点在搭建之初,会用一些文件测试站点,例如“phpinfo()”文件,此类文件里就有可能包含了真实的IP地址。
-
方法
可以利用Google语法搜索站点是否有遗留文件,里面的
SERVER-ADDR
字段存在IP配置信息1
site:xxx.com inurl:phpinfo.php
DNS解析历史记录
-
原理:站点在使用CDN服务之前,它的真实IP地址可能被DNS服务器所记录到,此时我们就可以通过DNS历史记录找到目标真实IP。
-
方法:
1)获取DNS解析的历史记录可以获取真实IP
DDOS攻击
CDN作为负载均衡的工具,存在流量上限,当CDN的访问量达到流量上限的时候,我们再去访问网站访问的一般就是没有使用CDN的真实IP
网络测绘引擎搜索特定内容
-
原理
通过关键字检索相关的ip或域名,很多时候能直接获取到网站的真实ip
-
常用的网络测绘引擎
- shodan:https://www.shodan.io/
- 钟馗之眼:https://www.zoomeye.org/
- fofa:https://fofa.info/
-
方法
1)对网站的icon进行检索
查看网站源代码找到网站icon对应的地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import mmh3
import requests
import base64
# 获取favicon.ico
response = requests.get('https://i0.hdslb.com/bfs/static/jinkela/long/images/favicon.ico')
# 将内容编码为base64
favicon_base64 = base64.b64encode(response.content).decode('utf-8')
# 计算hash
hash_value = mmh3.hash(favicon_base64)
# 打印结果
print('shodan语法:http.favicon.hash: ' + str(hash_value))
print('fofa语法:icon_hash="{}"'.format(str(hash_value)))
待进一步仔细阅读:https://www.cnblogs.com/qiudabai/p/9763739.html
利用主动漏洞
如果网站存在主动请求自定义网址此类的主动漏洞,可以利用漏洞让目标请求我们所控制的服务器,从而获取到网站的真实IP
真实IP验证
想要验证我们获取到的IP是否可信,可以采用下面的方法
-
第三方ip地址查询工具:不一定准确
-
手动验证
- 查询网站IP的真实地址地址,在网站主页上找备案号看是否地区一致
- 检索网站公司相关信息,所在地等,结合社工进行验证
-
本地 DNS 劫持验证
原理:
通过在本地修改
hosts
文件,将目标域名强制解析到你获取的 IP 地址,从而绕过正常的 DNS 解析流程。CDN 的一个核心功能是缓存内容,缓存需要时间同步和刷新。如果强制将域名解析到某个 IP 上,而这个 IP 是 CDN 节点,可能出现:- 内容可能不完整(因为CDN缓存和源站之间需要同步)。
- 某些动态请求可能出现异常(例如 API 数据未返回或功能失效)。
- 网址连接失败
而源站直接处理请求,内容完整,刷新异常不会发生。
步骤:
1)清空本地 DNS 缓存
1
2ipconfig /flushdns # Windows
sudo dscacheutil -flushcache # macOS2)修改hosts文件
修改
C:\Windows\System32\drivers\etc
文件中的ip域名映射,为我们获取的真实ip地址1
2175.12.114.176 mozhe.com
175.12.114.176 www.mozhe.com3)访问网站
- 如果网站功能和内容都正常,说明连接的可能是源站。
- 如果出现刷新异常、功能失效,或者内容不一致,则可能连接的是 CDN 节点。