2018-03-24 17:20
F5LTM做负载均衡时,有多种机制实现会话保持,其中常用的是通过修改cookie来实现。具体说来,F5在获取到客户端第一次请求时,会使用set cookie头给客户端埋入一个特定的cookie。
这些cookie在响应中带来了编码值,并且在这方面有官方文档:https://support.f5.com/csp/article/K6917?sr = 19342610。
clipboard.png
比如:Set-Cookie: BIGipServerpool_8.29_8030=487098378.24095.0000。后续再接到客户端请求时,F5会查看cookie里面的字段,判断应该交给后续哪台服务器。
演示请求:
GET / app HTTP / 1.1
主持人:f4c3300k.com
clipboard.png
回应:
clipboard2.png
获取真实ip
看到上面的图,你应该就能明白负载均衡的流程。既然做负载均衡,肯定是要交给后端的服务器,交给的信息顾名思义就是IP address,所以Set-Cookie中存在IP address,但真实IP address并不是以明文的形式存在cookie中,而是做了两次编码,然后再插入cookie。
只要解开487098378.24095.0000的内容,就拿到了server的真实IP address。
解码思路:首先,把第一小节的十进制数取出来,也就是487098378;第二,将其转为十六进制数1d08880a;第三,从后至前,以此取四位数出来,也就是0a;88;08;1d;第四,依次把他们转为十进制数:10;136;8;29;最后,得到真实内网IP:10.136.8.29。
影响列表
· 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
[1521799491536232.png]
[1521799491604666.png]
请求
clipboard.png
响应1
clipboard2.png
响应2
clipboard3.png
响应3
clipboard4.png
自动化
usr@pwn:〜$ git clone https://github.com/ezelf/f5_cookieLeaks.git
usr@pwn:~/$ python quickCook_v0.2.py --help
usage: quickCook.py [-h] [-v] --host HOST [--ssl] --cookie-name COOK
[--port PORT] [--req REQ] [--uri URI]
[ F5 BIG-IP ] PERSISTENCE COOKIE INFORMATION LEAKAGE
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
--host HOST Host
--ssl use ssl
--cookie-name COOK Cookie Name
--port PORT Port
--req REQ Total Request
--uri URI URI path
[+] Demo: quickCook.py --host 192.168.1.1 --cookie-name "BIGipServerPool_X" --req 50