半自动化指纹提取。
扩充自Fofa-script
- 给定需要提取的文档,对于含有
metadata
的文档,将metadata
转化为可供FOFA
查询的FOFA
查询语句。 - 以此语句查询到的结果为基准数量,并获取结果的网址,称为样例网址。
- 利用这些网址提取特征,现在可以进行
header
- 图标hash
- 首页源码中的文件
- 首页源码中以
#
开头的颜色 - 首页源码中的函数
- 首页源码中的注释
<!-- -->
//
- 若这些特征在这些样例网址中存在比例大于给定比例,则将特征转化为FOFA查询语句,并获取结果数量。
- 若数量与基准数量的比值在给定指纹特征可接受的范围内,则将其视为一个新的指纹。
-
修改
config.py
中的cookie
,folder_path
,output_path
。cookie
设置详见该仓库 Fofa-scriptfolder_path
需要提取文档的路径(路径中只有待提取文档)output_path
为输出json
指纹的路径- 以上两个路径不能相同
-
config.py
中可以根据个人需求更改变量值StartPage
:样例网址获取的起始页面,默认值为第一页StopPage
:样例网址获取的终止页面,默认值为第二页TimeSleep
:样例网址爬取之间的Sleep时间,默认值为5s。pro_first_lower
:若特征在样例网址中存在比例该值,即比例,则将该特征转化为FOFA
查询语句进一步验证,默认为0.25。pro_upper
:确定为指纹的比例区间的上界,默认为1.5。pro_lower
:确定为指纹的比例区间的下界,默认为0.9。
python .\FOFA_Extract_Fingerprint.py
对于待提取文档名字 abcd.yaml
,将输出文档格式 abcd_fingerprint.json
共有四种模式:
menu = """
1. Batch extraction (From config.folder_path).
2. Batch extraction (From config.deal_file_names).
3. Single extraction.
4. No metadata file extraction."""
分别为:
-
批处理提取(文件名自动取自
config.folder_path 路径下
)- 提取给定文件
-
批处理提取(文件名取自
config.deal_file_names
)-
提取给定的文件
-
config.deal_file_names
:以python
列表格式,内容为字符串形式的文件名
-
-
单特征提取
-
手动输入
FOFA
查询条件,获取查询结果数,以此为指纹提取的参照。 -
对于没有
metadata
的文档,可以后续通过此选项,手动指定基准FOFA
查询条件
-
-
对于没有
metadata
的文件进行批处理提取
- 每次运行,都将提示每个文件的索引
- 若之前进行了提取操作但是中断了,可以通过输入索引,手动继续程序。
FOFA_Extract_Fingerprint.py
:提取指纹主文件config.py
:用户设置的配置文件Default_value.py
:指纹提取模板信息文件,用户可根据需要进行增删修改,包括:json_tmp
:输出json
文件的模板(默认所有level
为2);common_header
:屏蔽的header
信息(即对于这些header
,默认不会视作指纹);common_header_value
:屏蔽的header value
:屏蔽的header
内容;file_common_names
:屏蔽的文件名字。
fofa.py
:爬虫文件,修改自Fofa-scriptTools.py
:相关函数文件
即输出文件路径中没有待提取文档的输出文件。
程序将根据输出文件路径中的文件,进行查询,如果输出文件中有待处理文件的输出文件(文件名按照上文格式规定进行判断):
- 则默认用户已经进行了
product_name
,company
,industry
,level
以及rules
中的icon_hash
的手动填写 - 程序则跳过需要用户手动输入的
product_name
,company
,industry
以及rules
中的icon_hash
,实现自动化提取rules
。