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