【技术原创】渗透基础——Fortigate识别与版本探测 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

【技术原创】渗透基础——Fortigate识别与版本探测

3gstudent 技术 2023-03-01 12:00:00
163753
收藏

导语: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 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址
  • 分享至
取消

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

扫码支持

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

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务