早前有技术社区发布了文章《解码F5负载均衡产品持久性Cookie探测内网IP》,其中讲解了通过解码F5 BIG-IP LTM的Cookie来发现目标服务器真实内网IP。简单来说就是,F5负载均衡产品( BIG-IP LTM)在做网络负载均衡时,会利用持久性cookie来实现会话保持,所以,在一些渗透测试中,如果遇到F5的负载均衡产品环境,可以使用这种技巧,获取目标服务器的真实IP地址,为后续深入渗透带来一定便利。本篇文章,我们就来讲述利用这种技巧,发现Facebook服务器内部IP信息。

F5 BIG-IP LTM 官方名称为本地流量管理器,也叫网络负载均衡器,是F5公司的新一代网络管理产品。BIG-IP LTM 可做4-7层负载均衡,具有负载均衡、应用交换、会话交换、包过滤等多种高级网络功能。

F5 BIG-IP LTM Cookie保持机制

当客户端向目标服务器发起请求时,会用到HTTP Cookie Insert或HTTP Cookie Rewrite方法,这些Cookie方法会让客户端与服务器端保持有效,样式为BIGipServer<pool_name>,其中包含了客户端请求的,经过编码处理的目标服务器IP和端口信息。

BIG-IP LTM 系统Cookie编码规则

IP编码

将IP地址的每个八位字节值转换为等效的1字节十六进制值

将十六进制字节的顺序反向,然后连接成一个4字节的十六进制值

将生成的4字节十六进制值转换为其十进制等效值

例如,如果服务器IP为10.1.1.100,按照上述规则来编码就是:

10.1.1.100 = 0x0A . 0×01 . 0×01 . 0×64

Reverse byte order, concatenated = 0x6401010A

0x6401010A = 1677787402

当然,如果服务器IP为a.b.c.d,也能用公式a + b*256 + c*(256^2) + d*(256^3)来代入实现最终编码。

端口编码

把十进制的端口值转换为等效的两字节十六进制值

反向两字节的十六进制顺序

将生成的两字节十六进制值转换为十进制等效值

如8080端口,最终编码为:

8080 = 0x1F90

Reverse byte order = 0x901F

0x901F = 36895

比如,在对服务器2001:0112::0030:80请求时,F5会把Cookie编码为:

BIGipServer<pool_name>=vi20010112000000000000000000000030.20480

具体可参考support.f5.comowasp.org的说明。

测试Facebook

如测试者通过互联网对Facebook内部服务器发起了一次请求,请求经过Facebook内网的F5 BIG-IP时,它会在Cookie中加入源请求IP信息,然后根据请求判断发往服务器;服务器响应时,就在Set-Cookie:BIGipServer<pool_name>中编码了服务器IP和端口信息,回传到客户端。

客户端请求:

GET /app HTTP/1.1

Host: f4c3300k.com

01.png

服务端响应:

02.png

最终,只要客户端能解码这个Set-Cookie:BIGipServer<pool_name>信息,就能成功获取到Facebook内部服务器的IP地址。当然,要发现这种Cookie,除了查看 “<pool_name>” 字段外,我们还能检索类似于 “Desa”、”pre”、”prod”、”Exchange_2010_External”等其它管理员会设置的内部架构信息。

存在该漏洞的FACEBOOK相关网站:

maileast.thefacebook.com

autodiscover.instagram.com

mail-ext.thefacebook.com

mail.hack.tfbnw.net

mail.thefacebook.com 

autodiscover.thefacebook.com 

autodiscover.fb.com

autodiscover.internet.org

autodiscover.oculus.com

autodiscover.whatsapp.com

esbmbltest.thefacebook.com

测试FACEBOOK服务器PoC

03.png

04.png

请求:

05.png

得到的响应1:

06.png

得到的响应2:

07.png

得到的响应3:

08.png

如果持续大量发起请求,就可能得到所有FACEBOOK内部服务器IP地址。

BIG-IP Cookie解码自动化工具

手工测试太过麻烦,为此,我专门做了一个BIG-IP Cookie的请求解码工具:f5_cookieLeaks,完全能做到最终目标服务器信息的自动化请求解码,非常方便。

安装:

usr@pwn:~$ git clone https://github.com/ezelf/f5_cookieLeaks.git

usr@pwn:~$ cd f5_cookieLeaks

usr@pwn:~$ pip install -r requirements.txt

f5_cookieLeaks对Facebook的测试证明:

09.png

10.png

11.png

12.png

通过上述自动化工具,我们发送大量请求,在这些每个请求的响应中,都会包含FACEBOOK内部主机IP和端口信息,并且这些Cookie都会保持有效,这样一来,所有可能的内部主机架构信息都可被探测到。

漏洞上报

当我把这个问题报送给FACEBOOK安全团队时,他们告知我,在此之前,已经有研究人员上报过这个漏洞($500),他们也正在修复,所以,我只能呵呵了….,就仅当练手吧。

16.png

*参考来源:misteralfa-hack,FreeBuf小编clouds编译