【技术原创】渗透基础——Fortigate识别与版本探测
2023-3-1 12:0:0 Author: www.4hou.com(查看原文) 阅读量:36 收藏

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

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进制字符串

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

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

2.png

注:

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

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

2.版本探测

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

3.png

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

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

输出response.headers,示例代码:

4.png

返回结果:

5.png

发现编码格式为x-gzip

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

6.png完整的实现代码如下:

7.png8.png

注:

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

9.png

解决方法:

改用Python2即可

0x04 开源代码

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

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

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

0x05 小结

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

本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址

  • 分享至

取消 嘶吼

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟


文章来源: https://www.4hou.com/posts/EQnY
如有侵权请联系:admin#unsafe.sh