【技术原创】渗透基础——Fortigate识别与版本探测
2023-3-1 12:2:42 Author: 嘶吼专业版(查看原文) 阅读量:16 收藏

       0x00 前言

Fortigate的识别需要区分管理页面和VPN登陆页面,版本探测需要根据页面特征提取特征,根据特征匹配出精确的版本,本文将要介绍通过Python实现Fortigate识别与版本探测的方法,开源代码。

       0x01 简介

本文将要介绍以下内容:

实现思路

实现细节

开源代码

       0x02 实现思路

1.Fortigate的识别

可通过跳转的URL进行区分

管理页面跳转的url:/login?redir=%2F

vpn登陆页面跳转的url:/remote/login?lang=en

2.版本探测

页面源码中存在32位的16进制字符串可以作为版本识别的特征,每个版本对应不同的32位字符串

       0x03 实现细节

1.Fortigate的识别

这里的方法是直接访问IP,根据页面返回结果进行判断

(1)管理页面

在返回结果中就能获得32位的16进制字符串

(2)vpn登陆页面

返回的内容为跳转地址,需要解析出跳转地址重新构造URL并访问,在返回结果中获得32位的16进制字符串

返回跳转地址的内容示例:

因为跳转的url不固定,这里可以通过正则匹配取出需要跳转的url,示例代码:

注:

在判断版本时无法在requests模块中使用allow_redirects=False参数来控制是否重定向,原因如下:

使用requests模块时,如果使用allow_redirects=False参数,只有在返回状态码为301或302时,才会关闭重定向,这里Fortigate返回的状态码为200,所以allow_redirects=False参数不起作用

2.版本探测

在实际测试过程中,不同版本的Fortigate,虽然都会返回32位16进制字符,但是格式不同,为了提高匹配的效率,减少工作量,这里在正则匹配时选择直接匹配32位的16进制字符,示例代码如下:

在实际测试过程中,存在response.text的输出为乱码的情况

研究解决方法的过程如下:

输出response.headers,示例代码:

返回结果:

发现编码格式为x-gzip

所以这里可以对response.text额外做一次gzip解码,获得原始数据,代码如下:

完整的实现代码如下:


注:

如果遇到通过浏览器访问SSL Vpn Client页面提示ERR_SSL_VERSION_OR_CIPHER_MISMATCH的错误时,程序将返回如下结果:

解决方法:

改用Python2即可

       0x04 开源代码

完整的实现代码已上传至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/Fortigate_GetVersion.py

代码支持区分管理页面和VPN登陆页面,提供了VM版本的指纹库作为示例,代码能够从页面自动提取出指纹特征,同指纹库进行比对,识别出精确的版本。

       0x05 小结

本文介绍了通过Python实现Fortigate识别与版本探测的方法,介绍实现细节,开源代码,作为一个很好的学习示例。


文章来源: http://mp.weixin.qq.com/s?__biz=MzI0MDY1MDU4MQ==&mid=2247558123&idx=1&sn=d48cea7295c7256b973631c4d5717b19&chksm=e91433d1de63bac792cd2e73a810364b1fe68e90ecb2a20a9a27ec687b9920b2d01db3a98e67#rd
如有侵权请联系:admin#unsafe.sh