原文地址:
https://xz.aliyun.com/news/16765?time__1311=eqUxnDRD0D9iDtGO%2BD%2FWn%2BODRo%2Fik%3DeY74D&u_atoken=1d0e29db52c0c9fa48e09dc107c78f40&u_asig=1a0c39d417419382907507193e0076
前言
俗话说,信息收集是渗透的过程中的重中之重!好的信息收集可以在渗透过程中让我们行云流水。而且信息收集对条理度和深浅都有严格把关,我们应该尽量地有条理性地进行深度信息收集!以下就是我信息收集思路,尽量做到深入和有条理性。
内容框架
1、资产形势分析2、主域名收集3、子域名4、IP全端口+c段5、指纹识别6、单个站点收集7、Edusrc专属收集8、供应链收集9、小程序&公众号10、APK信息收集11、国外站点的信息收集12、偏僻子域名收集13、政府相关信息收集14、自动化信息收集
分析当前形势
一来就扯信息搜集,就有点太公式化了。所以我想说的是,无论我们做什么事情,都必须先就目前的情况对事情的目标有清晰的了解和挖掘!
目前,国内的资产主要分为政府和企业,也是我们渗透的主要目标。而无论是哪一个,他们的内部资产都是错综复杂的,我们要做好信息收集就必须摸清楚他们内部的资产关系。
其次我们一般都很少碰政府的资产,因为政府这个特殊机构内部包含很多敏感文件,我们的一旦在渗透过程中出现什么纰漏,就很容易威胁到自己的人身安全。并且国家也对这方面也把关得很严。所以我们除了在一些护网的时候,有了授权书,正大光明地渗透之外,其实还是少触碰政府相关的资产,但是也要学习,说不定哪天就用上了呢。
那就先捣鼓捣鼓企业的信息收集。
企业的信息收集
前置
对于企业而言,内部的资产都离不开"控股"二字。每个企业都由主公司和多个子公司组成,而在每个子公司也可能会有子公司的存在。
企业主域名收集
1、股权树:
作用:清晰地尽可能地通过公司名获取全部主域名目标
在企查查中根据"股权穿透图"梳理股权树
采用"先上查后,向下查",确保上下查到底,资产大,小于50%股份子公司的直接舍弃,资产小就都收集,梳理成股权树,目的是为了得到大量的目标公司名。
2、法人、企业高管
适用于中小型,大厂的法定人、高管大部分与其他公司有关联,容易有很多无关目标。然后一定要对上述的股权树重新梳理,得到最为完整的股权树。
通过在企查查中再次搜索法定人来获取公司名。
3、ICP备案
在国内,只要想合法搭建网站,就需要ICP备案。所以我们从icp备案查询来打开突破口。
ICP三大因素:企业名、备案号、域名。可以通过其中之一查找到另外两个,查询方式如下:
3.1官网查询
使用之前收集的公司名,直接查询
再次利用得到的备案号再次查询
3.2批量查询
一个一个去查确实太慢了,所以我们利用icpsearch来直接批量查询
ICPsearch
但是输出格式还是不好直接利用的,我们就写个小脚本(下面自写的所有小脚本先别急用,我为了可视化用python自动写了一个UI(在全端口扫描之前附得有github地址)来使用,希望有用),单独提取其中的备案号、域名、公司。
脚本:可把官网查询结果ctrl+c直接复制下来,保存在result.txt或者直接把工具得到的result.txt,然后使用该脚本来提取三大因素保存到result.xlsx
不过第一用公司名查询后,后面一定要通过备案号再查一次,一定一定!!!
import refrom openpyxl import Workbookcompany_pattern = r'[Unit]: ([u4e00-u9fff]+) [Type]'record_pattern = r'[icpCode]: ([京津沪渝黑吉辽蒙冀晋陕宁甘青新藏川贵云粤桂琼苏浙皖鲁闽赣湘鄂豫][A-Z]?d?-?[ICP备]*d{4,10}号)-'url_pattern = r'www.((?:d{1,3}.){3}d{1,3}|[a-zA-Z0-9-]+.[a-zA-Z]{2,})'with open('result.txt', 'r', encoding='utf-8') as file: content = file.read()companies = re.findall(company_pattern, content)records = re.findall(record_pattern, content)urls = re.findall(url_pattern, content)max_len = max(len(companies), len(records), len(urls))companies.extend([''] * (max_len - len(companies)))records.extend([''] * (max_len - len(records)))urls.extend([''] * (max_len - len(urls)))workbook = Workbook()sheet = workbook.activesheet.title = "Result Data"sheet.append(['公司名', '备案号', '网站地址'])for company, record, url in zip(companies, records, urls): sheet.append([company, record, url])workbook.save('result.xlsx')print("数据已提取并保存到 result.xlsx 文件中。")
子域名
获取方法:1、fofa、hunter上直接导出、2、子域名挖掘工具
1、暗黑搜索引擎
主要围绕主域名、公用名、组织,进行手工查询,由于各大引擎的搜索语法大同小异,就以fofa为例:
使用搜索引擎时很重要的一点,都使用all模式,因为fofa默认展示1年内的资产、hunter则是一个月,使用all模式则可以获取更多边缘资产。
fofa语句1:domain=""||cert=""
由于一般主域名都很多,我们可以写一个搜索语法小脚本(针对domain、cert):
with open('zhu.txt', 'r', encoding='utf-8') as file: lines = file.readlines()output = []for line in lines: line = line.strip() output.append(f'domain="{line}"||cert="{line}"')with open('result.txt', 'w', encoding='utf-8') as result_file: result_file.write("||".join(output))print("数据已成功写入到 result.txt 文件中。")
转化为:
再从中去提取网站的证书中的 公用名 和 组织名,然后进一步搜索。
主要语法:fofa:domain=""||cert="<公用名>"||cert="<组织>",平常除了主域名、公用名之外,主要就关注https网站证书中的"组织",因为有时候组织名可以让我们收集更多子域名。我们查看证书时,也要多综合收集组织名,一定要多搜集几个。
除了在看证书时候收集"组织名",我们还可以通过官方的证书站(crt.sh)搜搜企业的拼音,查找一些组织名(特别是英文组织名)
再从中提取部分英文组织名搜集好然后拼接到脚本得到的语法中,集合就可以获取很全的子域名列表的了。
当然有条件可以加入图标icon的搜索,只需要把下图的网站图片的地址的hash计算出来,添加到搜索中就行了:
fofa:domain=""||cert="<公用名>"||cert="<组织>"||icon_hash="<hash值>"
计算的脚本有很多,单个的话,可以使用密探足以
对于批量的ICON收集,则可以使用httpx,然后可以像之前c段统计一样,提取几个重复率高的值进行查询
最终的子域名收集:
简化的fofa语法:还有很多主域名和组织名没有加上去,只以一个站点为例,可见量之大
icon_hash="126806951"||domain="baidu.com"||cert="baidu.com"||cert="Beijing Baidu Netcom Science Technology Co., Ltd"
2、工具
2.1 Oneforall
在配置好下图中的api,妥妥的子域名收集神器!!!其收集子域名的方式包含了:证书透明度、常规检查收集子域(域传送漏洞利用、检查跨域策略文件、检查HTTPS证书、检查内容安全策略、检查robots文件、检查sitemap文件、利用NSEC记录遍历DNS域)、网络爬虫收集子域名、利用DNS数据集收集子域、DNS查询、威胁情报平台、搜索引擎、子域名爆破、子域置换等等几乎全面的方法。
然后把搜集到的所有主域名仍targets.txt中,直接梭哈!
命令:python oneforall.py --targets targets.txt --brute True run
即可,不过谨记,一定不能完全依靠工具,必须要依靠手动的收集或者自写脚本处理!
2.2 Onelong
这也是一个综合性不错的信息工具,不过也要配置不少api。主要可以直接根据单个组织(结合了ENScan_GO收集企业的一些方法,但是还是比不上原工具)来进行主子域名收集、指纹识别(一般)、app、小程序搜集,效果还不错!同时还集成了一些邮箱的收集、轻微漏洞扫描的功能。正对一些大型资产可用,中小型资产的话除了子域名收集还行以外,其他模块还是不如手动。
3、偏僻子域名寻找的方法
https://otx.alienvault.com/api/v1/indicators/domain/baidu.com/url_list?limit=100&page=1
替换上述的baidu.com,然后从burp的响应包中提取hostname即可,也可以直接把limit调大一下,一次性提取
总结:
用手动法,通过主域名的初步查询,从https子域名筛选出公用名和几个关键的中文组织名。再用crt.sh,通过指定主域名,获得几乎全部的英文组织名。这样再把他们全部串在一起用cert语法、icon语法查询得到搜索引擎的结果,其次就是使用oneforall,最后综合并去重上述的两个结果,即可得到最全的结果!!!!
整理全部的url和IP(oneforall、搜索引擎导出),一定要把url和ip各自整理一个文本(因为oneforall和搜索引擎得到的ip不一定对,很大可能是cdn)。
针对每一个ip分别生成http协议和https协议的列表,对url差哪个协议及添加协议(小脚本实现),整合一下得到目标(如果资产比较多,可以测活一下)——url.txt——
#协议添加小脚本# 打开文件web.txt读取内容with open('web.txt', 'r') as file: lines = file.readlines()# 处理每一行内容,检查并添加必要的前缀processed_lines = []for line in lines: line = line.strip() # 去除行尾的换行符等空白字符 if line.startswith('http://'): processed_lines.append(line) # 如果已经有http://开头,保持原样 processed_lines.append('https://' + line[7:]) # 添加https://前缀 elif line.startswith('https://'): processed_lines.append(line) # 如果已经有https://开头,保持原样 processed_lines.append('http://' + line[8:]) # 添加http://前缀 else: processed_lines.append('http://' + line) # 添加http://前缀 processed_lines.append('https://' + line) # 添加https://前缀# 将处理后的内容写入url.txt文件with open('url.txt', 'w') as file: for line in processed_lines: file.write(line + 'n')
ip全端口+c段
流程:得到url,单独提取其中的域名和IP,然后针对域名使用——Eeyes——进行解析和cdn基础识别,去重整合得到部分完整的IP,提取占比大的c段,整合到ip中——ip.txt——,整体使用fscan全端口扫描,得到——port.txt——
url.txt中提取域名、ip
import re# 定义正则表达式,分别匹配 IP 地址和子域名ip_pattern = r"bd{1,3}(?:.d{1,3}){3}b"domain_pattern = r"(?:https?://)?([a-zA-Z0-9-]+.[a-zA-Z0-9.-]+.[a-zA-Z]{2,})"# 打开 url.txt 读取内容with open("url.txt", "r") as infile: content = infile.read()# 提取 IP 地址并保存到 ip.txtip_matches = re.findall(ip_pattern, content)with open("ip.txt", "w") as ipfile: for ip in sorted(set(ip_matches)): ipfile.write(ip + "n")# 提取子域名并保存到 ym.txtdomain_matches = re.findall(domain_pattern, content)with open("ym.txt", "w") as domainfile: for domain in sorted(set(domain_matches)): domainfile.write(domain + "n")print("IP 地址提取完成,结果已保存到 ip.txt")print("子域名提取完成,结果已保存到 ym.txt")
Eeyes,单独把上述的ym.txt扔入Eeyes中,提取ip
Eeyes -l ym.txt
提取其中的ip脚本
#Eeyes提取脚本import re# 定义正则表达式,匹配 IP 地址或域名pattern = r"d+.d+.d+.d+"# 打开 url.txt 读取内容,并在 ipym.txt 中写入匹配结果with open("Eeyes.txt", "r") as infile, open("ip2.txt", "w") as outfile: content = infile.read() matches = re.findall(pattern, content) # 去重并按顺序写入结果 for match in sorted(set(matches)): outfile.write(match + "n")print("提取完成,结果已保存到 ip2.txt")
然后整合到ip.txt中就可
c段提取
因为一些比较大的产业,很大可能会在卖服务器IP时是按c段买的,我们就可以利用这一点,说不定还可以获取不少隐蔽的站点等等。
根据ip.txt中的数据,提取c段的重复率
'''# 打开原始的 IP 地址文件with open('ip.txt', 'r') as file: lines = file.readlines()# 处理每个 IP 地址,转换为 C 段,并去除重复c_segment_ips_set = set()for line in lines: ip = line.strip() # 移除每行末尾的换行符 base_ip = ip.rsplit('.', 1)[0] # 移除最后一个点号后的部分 c_segment_ip = f"{base_ip}.0/24" c_segment_ips_set.add(c_segment_ip)# 将转换后的 C 段 IP 地址写入到新文件with open('c段.txt', 'w') as file: for ip in c_segment_ips_set: file.write(ip + 'n')print("完成 IP 转换和去重,结果已保存到 'Modified_IP.txt'")'''from collections import Counter# 打开原始的 IP 地址文件with open('ip.txt', 'r') as file: lines = file.readlines()# 处理每个 IP 地址,转换为 C 段c_segment_ips = []for line in lines: ip = line.strip() # 移除每行末尾的换行符 base_ip = ip.rsplit('.', 1)[0] # 获取 C 段(去除最后一个点号后的部分) c_segment_ip = f"{base_ip}.0/24" c_segment_ips.append(c_segment_ip)# 统计每个 C 段的出现次数c_segment_counts = Counter(c_segment_ips)# 按出现次数从高到低排序sorted_c_segments = sorted(c_segment_counts.items(), key=lambda item: item[1], reverse=True)# 将排序结果写入到新文件 c段.txtwith open('c段.txt', 'w') as file: for c_segment, count in sorted_c_segments: file.write(f"{c_segment} 出现次数: {count}n")print("完成 C 段 IP 的统计、排序和保存,结果已保存到 'c段.txt'")
挑选出现次数多得比较突出的c段,放于ip.txt中
这里推荐一个我自写的python项目,用来实现可视化
项目地址:https://github.com/Yf3te/Yf_UI/
全端口扫描,祭出神器fscan
fscan.exe -hf ip.txt -t 3000 -p 1-65535 -num 100 -np -o port.txt
扫描结果:
得到port.txt
最终配合http/https协议获取最全web资产合集web.txt,一般而言,我们应该会直接进行测活,并重新整理存活的站点测试。但是有时候会遇到一种情况,就是主站点访问为空或者重定向,但是我们添加某个路由之后又能正常访问,这就可能让我们丢失一些可能存在漏洞的目标,所以还有一道工序
Host碰撞
那就是Host碰撞。host碰撞旨在发现隐蔽的边缘资产,原理的话就不过多赘述了
这次目标就不要放在一些过于正常的界面,比如:Centos默认界面、nginx默认界面,还有就是访问不正常的界面,比如:30X、403、404、50X等等。
如果我们的时间多的话,我们就可以把上面web.txt文件中的ip、域名(都带端口)全部分离出来,可以用这个项目,https://github.com/Secur1ty0/Idregex
问就是好用,而且还可以生成一下fofa、hunter的语法。
如果时间比较紧促,就先可以测活然后再进行host碰撞
web.txt测活选用Tscanplus的内置工具,挺好用的。
再根据上面的小脚本直接分类筛选出不正常的ip、域名,都要带端口
直接开始host碰撞
java -jar HostCollision.jar -ifp ips.txt -hfp hosts.txt
直接上指纹识别
指纹识别
定义
指纹识别就像指纹一样来识别web站点的前端源代码、目录中的信息来识别某个系统的名称、登录框等功能。
意义
用来识别脆弱的易攻破的资产
工具
1、Ehole魔改版
针对没什么waf的资产(edusrc还是不适合用)强推,非常的快!同时还会带有对重点目标进行目录侦察的效果(poc.ini中设置),指纹库也比较强,不过可惜的是状态码的颜色看起来差点感觉。
爆破一些敏感路径,但是也有弊端,因为一般而言,网站都有waf,爆破敏感路径可能会被直接封ip,就老实了
2、简单对比一下,其他的指纹识别工具
P1finger+红队行动下的重点资产指纹识别工具
感觉一般
httpx(有计算favicon.icon的功能)(httpx.exe -l 1.txt -sc -title -tech-detect)
展示效果很醒目,但是指纹库感觉一般
hfinger
展示看起来一般,但是指纹库、识别方式较好,用于快速侦察比较脆弱的目标
TigerV1.0(2).2
感觉指纹库和指纹探查一般
Tidefinger
这工具具有端口探测的功能,但是感觉指纹侦察一般
spray
感觉输出不太舒服,但是指纹库还行
综上所述:
对于waf弱的攻防、测试,带有poc检测的神器ehole魔改,毋庸置疑
但是对于waf比较强的则可以关闭ehole魔改的POC模块,即可
单个站点收集
主要看能不能找一些敏感文件,方式:google黑语法、github泄露、快照泄露
1、google黑语法:
import refrom openpyxl import Workbookcompany_pattern = r'[Unit]: ([u4e00-u9fff]+) [Type]'record_pattern = r'[icpCode]: ([京津沪渝黑吉辽蒙冀晋陕宁甘青新藏川贵云粤桂琼苏浙皖鲁闽赣湘鄂豫][A-Z]?d?-?[ICP备]*d{4,10}号)-'url_pattern = r'www.((?:d{1,3}.){3}d{1,3}|[a-zA-Z0-9-]+.[a-zA-Z]{2,})'with open('result.txt', 'r', encoding='utf-8') as file: content = file.read()companies = re.findall(company_pattern, content)records = re.findall(record_pattern, content)urls = re.findall(url_pattern, content)max_len = max(len(companies), len(records), len(urls))companies.extend([''] * (max_len - len(companies)))records.extend([''] * (max_len - len(records)))urls.extend([''] * (max_len - len(urls)))workbook = Workbook()sheet = workbook.activesheet.title = "Result Data"sheet.append(['公司名', '备案号', '网站地址'])for company, record, url in zip(companies, records, urls): sheet.append([company, record, url])workbook.save('result.xlsx')print("数据已提取并保存到 result.xlsx 文件中。")
0
不限于此:
Google Dorks 获取漏洞赏金(雨苁):https://www.ddosi.org/dork/
懒人dork: https://iamunixtz.github.io/LazyDork/
特别是在edusrc上用得很频繁
import refrom openpyxl import Workbookcompany_pattern = r'[Unit]: ([u4e00-u9fff]+) [Type]'record_pattern = r'[icpCode]: ([京津沪渝黑吉辽蒙冀晋陕宁甘青新藏川贵云粤桂琼苏浙皖鲁闽赣湘鄂豫][A-Z]?d?-?[ICP备]*d{4,10}号)-'url_pattern = r'www.((?:d{1,3}.){3}d{1,3}|[a-zA-Z0-9-]+.[a-zA-Z]{2,})'with open('result.txt', 'r', encoding='utf-8') as file: content = file.read()companies = re.findall(company_pattern, content)records = re.findall(record_pattern, content)urls = re.findall(url_pattern, content)max_len = max(len(companies), len(records), len(urls))companies.extend([''] * (max_len - len(companies)))records.extend([''] * (max_len - len(records)))urls.extend([''] * (max_len - len(urls)))workbook = Workbook()sheet = workbook.activesheet.title = "Result Data"sheet.append(['公司名', '备案号', '网站地址'])for company, record, url in zip(companies, records, urls): sheet.append([company, record, url])workbook.save('result.xlsx')print("数据已提取并保存到 result.xlsx 文件中。")
1
2、网站时光机:
import refrom openpyxl import Workbookcompany_pattern = r'[Unit]: ([u4e00-u9fff]+) [Type]'record_pattern = r'[icpCode]: ([京津沪渝黑吉辽蒙冀晋陕宁甘青新藏川贵云粤桂琼苏浙皖鲁闽赣湘鄂豫][A-Z]?d?-?[ICP备]*d{4,10}号)-'url_pattern = r'www.((?:d{1,3}.){3}d{1,3}|[a-zA-Z0-9-]+.[a-zA-Z]{2,})'with open('result.txt', 'r', encoding='utf-8') as file: content = file.read()companies = re.findall(company_pattern, content)records = re.findall(record_pattern, content)urls = re.findall(url_pattern, content)max_len = max(len(companies), len(records), len(urls))companies.extend([''] * (max_len - len(companies)))records.extend([''] * (max_len - len(records)))urls.extend([''] * (max_len - len(urls)))workbook = Workbook()sheet = workbook.activesheet.title = "Result Data"sheet.append(['公司名', '备案号', '网站地址'])for company, record, url in zip(companies, records, urls): sheet.append([company, record, url])workbook.save('result.xlsx')print("数据已提取并保存到 result.xlsx 文件中。")
2
3、github泄露:(在挖掘企业时有时候有奇效)
import refrom openpyxl import Workbookcompany_pattern = r'[Unit]: ([u4e00-u9fff]+) [Type]'record_pattern = r'[icpCode]: ([京津沪渝黑吉辽蒙冀晋陕宁甘青新藏川贵云粤桂琼苏浙皖鲁闽赣湘鄂豫][A-Z]?d?-?[ICP备]*d{4,10}号)-'url_pattern = r'www.((?:d{1,3}.){3}d{1,3}|[a-zA-Z0-9-]+.[a-zA-Z]{2,})'with open('result.txt', 'r', encoding='utf-8') as file: content = file.read()companies = re.findall(company_pattern, content)records = re.findall(record_pattern, content)urls = re.findall(url_pattern, content)max_len = max(len(companies), len(records), len(urls))companies.extend([''] * (max_len - len(companies)))records.extend([''] * (max_len - len(records)))urls.extend([''] * (max_len - len(urls)))workbook = Workbook()sheet = workbook.activesheet.title = "Result Data"sheet.append(['公司名', '备案号', '网站地址'])for company, record, url in zip(companies, records, urls): sheet.append([company, record, url])workbook.save('result.xlsx')print("数据已提取并保存到 result.xlsx 文件中。")
3
3、目录扫描
这个目录扫描并非全是纯跑目录字典,更别说那些waf比较强的站点,你更不可能全去爆破,最重要的点还有有想象力,根据站点已暴露的目录,去猜其他可能的站点,例如:有/login目录,那也有可能有一个/register站点。
4、中间件
收集方式
请求头、指纹识别暴露 、wappalyzer 、根据报错信息判断 、根据默认页面判断。
5、开发语言
查看网站包
查看站点文件后缀
搜索引擎:site:<域名> <语言>
6、源码查找
可以直接指纹识别CMS、寻找网站框架,根据网站的一些图标、logo、关键字,还有一些特殊的目录,甚至是f12源代码中的作者泄露去寻找源码。
源码可以在github、fofa、搜索引擎、专属源码站点上去寻找
Edusrc信息收集
信息收集重心:学号、身份证、工号、电话号
import refrom openpyxl import Workbookcompany_pattern = r'[Unit]: ([u4e00-u9fff]+) [Type]'record_pattern = r'[icpCode]: ([京津沪渝黑吉辽蒙冀晋陕宁甘青新藏川贵云粤桂琼苏浙皖鲁闽赣湘鄂豫][A-Z]?d?-?[ICP备]*d{4,10}号)-'url_pattern = r'www.((?:d{1,3}.){3}d{1,3}|[a-zA-Z0-9-]+.[a-zA-Z]{2,})'with open('result.txt', 'r', encoding='utf-8') as file: content = file.read()companies = re.findall(company_pattern, content)records = re.findall(record_pattern, content)urls = re.findall(url_pattern, content)max_len = max(len(companies), len(records), len(urls))companies.extend([''] * (max_len - len(companies)))records.extend([''] * (max_len - len(records)))urls.extend([''] * (max_len - len(urls)))workbook = Workbook()sheet = workbook.activesheet.title = "Result Data"sheet.append(['公司名', '备案号', '网站地址'])for company, record, url in zip(companies, records, urls): sheet.append([company, record, url])workbook.save('result.xlsx')print("数据已提取并保存到 result.xlsx 文件中。")
4
还有就是一些学校肯定不止一个域名,他还会存在其他分支,虽然上面的fofa语法也可以检索一些出来,但并不完全
以浙江大学为例,我们可以在企查查上去看
这些资产都隶属浙江大学,都是可以收集的,这里可以参考之前子公司收集的思路结局。拿到了主域名,再参考子域名收集。
供应链信息收集
实在无法破局,采用供应链(多在edu、企业也有)
基本阐述
import refrom openpyxl import Workbookcompany_pattern = r'[Unit]: ([u4e00-u9fff]+) [Type]'record_pattern = r'[icpCode]: ([京津沪渝黑吉辽蒙冀晋陕宁甘青新藏川贵云粤桂琼苏浙皖鲁闽赣湘鄂豫][A-Z]?d?-?[ICP备]*d{4,10}号)-'url_pattern = r'www.((?:d{1,3}.){3}d{1,3}|[a-zA-Z0-9-]+.[a-zA-Z]{2,})'with open('result.txt', 'r', encoding='utf-8') as file: content = file.read()companies = re.findall(company_pattern, content)records = re.findall(record_pattern, content)urls = re.findall(url_pattern, content)max_len = max(len(companies), len(records), len(urls))companies.extend([''] * (max_len - len(companies)))records.extend([''] * (max_len - len(records)))urls.extend([''] * (max_len - len(urls)))workbook = Workbook()sheet = workbook.activesheet.title = "Result Data"sheet.append(['公司名', '备案号', '网站地址'])for company, record, url in zip(companies, records, urls): sheet.append([company, record, url])workbook.save('result.xlsx')print("数据已提取并保存到 result.xlsx 文件中。")
5
结语:在复杂环境下,效率偏低
小程序&公众号
针对一些web打不动的资产,说不定其小程序公众号会有洞可以寻,所以小程序公众号的信息收集必不可少
小程序&公众号定位
1、微信搜索
根据资产名称在微信中搜索,以"华为"为例,其公司全称为"华为技术有限公司"。
企查查
小蓝本
公众号&小程序如何信息收集
主要在模拟器、手机端上实现,不知道为什么,一些信息不能直接在pc端微信上获取,下述是在模拟器的收集过程
1、小程序
对于一些大厂的小程序公众号可能含有上述三个信息,不过最常见的就是”更多资料“
可获取appid、备案号
根据备案号也可以反查其他小程序
在pc端我却是没有找到收集路径,还希望佬们指点指点。
2、公众号
再在企查查等上面去查,获取更多的小程序、公众号
3、抓包方面
抓包测试方面也一起说了,不知道为什么我在模拟器(夜神)搜公众号,总是没有结果,所以我直接在pc端进行抓包测试了,虽然在pc端无法信息收集,但是抓包测试绝对是一把好手!并且我做了对比,pc端和手机端的公众号、小程序的数目没有差别(反正我没有看到差别)。
抓包主要使用:burp+proxifier+pc端微信即可
参考:
小程序逆向
获取接口+资产信息
工具:
1、https://github.com/Siffre/wxappUnpacker
可以关注其中有没有硬编码的密码、企业微信key、公众号key、AK/SK等等,此外app.json里一般都写好了小程序要调用的接口路径,按照常规思路利用攻击即可!
2、pc端小程序目录逆向
3、unveilr逆向
测试方向:逻辑漏洞、文件上传(头像处、身份证上传)、越权
挖掘方法也比较简单,比如在有验证下一步的时候,抓包,查看返回包响应码,尝试修改响应码,或者其他你认为影响返回状态的值(具体情况具体分析),尝试能不能绕过。举个例子,比方说输入验证码,我们先输入正确的验证码,查看返回包特征和状态,然后输入一个错误的验证码,把刚刚正确的返回包特征尝试替换,看看能不能绕过
4、逆向+敏感信息查找
Wxapp
F12调试小程序
开小号调试,可能会被封!
https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python
这个工具的用法也是很简单,我们进去微信之后(最好用小号避免封号),直接运行python main.py -x
然后进入小程序
即可调试
apk信息收集
1、利用工具APPinfoScanner
通常场景下我们扫的只有目标APK文件,这里直接用第一条命令
python app.py android -i 123.apk
结果如下
import refrom openpyxl import Workbookcompany_pattern = r'[Unit]: ([u4e00-u9fff]+) [Type]'record_pattern = r'[icpCode]: ([京津沪渝黑吉辽蒙冀晋陕宁甘青新藏川贵云粤桂琼苏浙皖鲁闽赣湘鄂豫][A-Z]?d?-?[ICP备]*d{4,10}号)-'url_pattern = r'www.((?:d{1,3}.){3}d{1,3}|[a-zA-Z0-9-]+.[a-zA-Z]{2,})'with open('result.txt', 'r', encoding='utf-8') as file: content = file.read()companies = re.findall(company_pattern, content)records = re.findall(record_pattern, content)urls = re.findall(url_pattern, content)max_len = max(len(companies), len(records), len(urls))companies.extend([''] * (max_len - len(companies)))records.extend([''] * (max_len - len(records)))urls.extend([''] * (max_len - len(urls)))workbook = Workbook()sheet = workbook.activesheet.title = "Result Data"sheet.append(['公司名', '备案号', '网站地址'])for company, record, url in zip(companies, records, urls): sheet.append([company, record, url])workbook.save('result.xlsx')print("数据已提取并保存到 result.xlsx 文件中。")
6
app测试得比较少,不太会信息收集,只能当脚本小子了,惭愧惭愧!
国外站点信息收集
国内用到企查查、天眼查、小蓝本这些,去构建“股权树”,梳理公司
国外就可以用到以下网站
https://www.crunchbase.com
以google为例,下面的ORG为相关组织,就是公司,People就是法定代表人
随便点一个组织点进去,下面就是资产入口
使用fofa结合crt证书收集,也很不多,这个主要是用来收集主域名,其他子域名,可以采上述的子域名收集,不过使用工具时,最好搭个代理,这样收集得更多。
偏僻子域名
https://otx.alienvault.com/api/v1/indicators/domain/baidu.com/url_list?limit=100&page=1
试试就知道了,想查什么域名,就替换baidu.com这一项就行,最后面的
政府信息收集
说到政府机构的信息收集,感觉跟企业的话,主要是在获取主域名的时候有点区别,主域名不能再依靠企查查、天眼查了。
提供以下两种方式去收集
1、搜索引擎
以重庆教育委员会为例,我们直接用百度词条,搜“重庆市教育委员会”或者“重庆市教育委员会 百度百科”
直接进点入内设机构,就可以看到相关单位
以第一个管理学校为例
直接再搜他,找到他的官网,看备案号
再到ICP备案
就差不多了。
此外一个小tips,厅级单位打不下来,可以尝试打局级单位,尤其是省会的局级单位,内网有很大可能是通的,可以从下往上打。
自动化信息收集
先上个开胃菜,谈到自动化信息收集,肯定离不开ARL灯塔,这玩意是真好用,基础指纹识别、基础数据包请求响应、站点截图、泄露扫描、Host碰撞、WIH调用(在JS中收集域名,AK/SK等信息)。不过还是需要自己通过收集主域名。
这些都还不错,还可以扩展一点。我这是用docker安装的ARL,有时候朋友们在安装的时候,可能就会因为docker的一些报错整破防了,这里推荐很不错的脚本,里面配备着很多脚本的安装,简直一绝
项目地址:https://gitee.com/yijingsec/LinuxEnvConfig
然后就是一些基础配置了,直接打开config-docker.yaml,直接配置fofa、hunter..的API,或有禁用的域名也改一改。
然后再策略配置的这一块,也可以配置相关的信息收集
配置完直接梭哈就完事了。
不过想要进一步优化灯塔的一些配置的话,可以私信我!
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...