挖掘SRC时如何编写信息收集脚本

admin 2024年5月8日17:51:15评论6 views字数 7243阅读24分8秒阅读模式

朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把“亿人安全设为星标”,否则可能就看不到了啦

原文由作者授权,首发在先知社区

https://xz.aliyun.com/t/14412

0X01前言

笔者在挖掘SRC的时候经常会疯狂寻找资产,但是市面上的信息收集工具都无法满足需求。有些工具收集方法太过于单一,有些信息收集工具要么过于笨重,要么需要购买知识星球获得。于是笔者选择自己去网上学习如何编写信息收集脚本,并把过程记录下来,供大家学习参考。在本文笔者将描述如何快速编写信息收集脚本来收集挖掘SRC所需的大量资产。

0X02信息收集脚本

信息收集脚本可以高度定制化,有助于根据项目需求作出灵活的改变。但与之相对的是编写难度高,还要时时刻刻更新与维护该脚本。在编写脚本中整合多种技术,也会面临很多问题。例如:需要整合常见收集方式包括搜索引擎,API服务,数据库,以及各种在线工具和服务;需要编写的函数或模块,用于处理API调用、请求参数、身份验证以及响应解析;需要编写有关格式的函数或模块,用于不同收集方式获取的数据转换成统一的格式;需要设计异常处理机制来应对,网络请求或数据库查询时会遇到各种错误......

1. 开发框架

为了开始开发脚本,我们首先要构建开发框架。一个完好的开发框架使得开发者能够以模块化方式增添合适的代码,并方便编写脚本的使用说明。因此有一个合适的开发框架这一点很重要,方便大家一次又一次地测试并修改脚本,以避免在写信息收集脚本的时候变得非常混乱。

挖掘SRC时如何编写信息收集脚本

现在我们来编写scan.sh,并构建属于自己的骨架,如下所示:

读取并检查是否存在有效的范围目录

为每次扫描创建扫描目录等目录

计算扫描花费了多长时间

通知用户扫描已完成

vim scan.sh

———————————————————————————————分割线————————————————————————————————————————————

#!/bin/bash
# 设置变量
id="$1"
ppath="$(pwd)"
scope_path="$ppath/scope/$id"
timestamp="$(date +%s)"
scan_path="$ppath/scans/Sid-Stimestamp"
# 域路径不存在,则停止运行
if [!-d"$scope_path" ]; then
echo "Path doesn't exist"
exit 1
fi
mkdir -p "$scan_path"
cd "$scan path"
###扫描###
echo "Starting scan against roots:"
cat"$scope_path/roots.txt"
cp -v "$scope_path/roots.txt" "$scan_path/roots.txtcp
sleep 3
##################################扫描模块###############################
#时间差
end time=$(date +%s)
seconds="$(expr $end_time-$timestamp)"
time=""
if [[ "$seconds"-gt 59 ]]
then
minutes=$(expr $seconds;/60)
time="$minutes minutes"
else
time="$seconds seconds"
fi
echo "Scan $id took $time"
#输出结果

这个时候可以通过指定目标ID后,运行脚本:xxxxxxxxxx ./scan.sh example;以检测脚本运行情况(如下图所示):

挖掘SRC时如何编写信息收集脚本

在多次运行脚本后,会发现到每次扫描都会创建一个新目录,这让每次扫描结果变得容易查找。

2. 资产枚举

资产发现通常需要人工核实,此步骤可以使用Uncover和Whoxy API等自动化工具辅助进行。但是由于是挖掘SRC,这个过程当中自动化工具可能会造成部分企业资产信息的泄露,所以建议手动一个个的确认。信息收集的第一步是资产收集,首先需要确定哪些公司定义为范围内的资产是在企业SRC的公布范围,并在公布范围获取尽可能多的域名。whoxy.com是不错的网站,在Fofa或Shodan上搜索公司的具体名称,也可能会识别没有现有DNS记录的资产的IP地址(如下图所示)。

挖掘SRC时如何编写信息收集脚本

挖掘SRC时如何编写信息收集脚本

通过这些搜索引擎发现的IP执行反向DNS查找,并查看并且通过识别IP、域名或其他未知的URL链接,来确定企业SRC给定的基础设施资产。

3. 子域名枚举

收集域名列表后,就可以执行子域枚举了。子域枚举是指从主域(example.com)中识别有效子域(例如:xxx.example.com)的过程。方法一是DNS暴力破解,DNS暴力破解的速度比前几年呈指数级增长,首选的DNS暴力破解工具是puredns或shuffledns。Shuffledns是Massdns的Golang包装器,可以非常轻松地以非常高的速度执行DNS暴力破解。要让MassDNS发挥作用,我们需要解决如下两个问题,即用于暴力破解的单词列表和DNS解析器单词列表。通过结合数据库中的热门子域以及常见的单词列表进行暴力破解,构建了pry-dns.txt单词列表。

挖掘SRC时如何编写信息收集脚本

将添加subfinder和shuffledns作为前两个函数,效果如下所示:

###扫描###
echo "Starting scan against roots:"
cat "$scope_path/roots.txt"
cp -V "$scope_path/roots.txt" "$scan_path/roots.txt"
cat "$scan_path/roots.txt" | subfinder | anew subs.txt
cat "$scan_path/roots.txt" | shuffledns -w "$ppath/lists/pry-dns.txt" -r "$ppath/lists/resolvers.txt" | anew subs.txt

接下来运行利用了puredns和shuffledns的脚本;以检测脚本运行情况(如下图所示):

挖掘SRC时如何编写信息收集脚本

挖掘SRC时如何编写信息收集脚本

如果脚本运行成功,我们可以看到它为本次扫描创建了另一个文件subs.txt,通过如下图能够发现脚本发现了28711个子域。

挖掘SRC时如何编写信息收集脚本

但是,信息收集脚本还需要考虑通配符DNS记录。通配符DNS是指域上的子域路径始终解析为相同的预设IP地址。例如:可能存在通配符记录:xxx.api.example.com。因此anything.api.example.com将解析为相同的地址。这可能会导致误报或导致我们发现实际上并不存在的子域,从而可能浪费信息收集的时间。为了解决这个问题,我们可以使用Puredns附带的出色的通配符检测功能,具体实现如下所示。

挖掘SRC时如何编写信息收集脚本

利用上述方案,通配符的解析和过滤使我们能够将列表减少到 12039个!我们将在脚本中添加一些更多的被动源,然后我们应该得到如下的结果:

## SETUP
echo "Starting scan against roots:"
cat "$scope_path/roots.txt"
cp -v "$scope_path/roots.txt" "$scan_path/roots.txt"

## DNS Enumeration - Find Subdomains
cat "$scan_path/roots.txt" | haktrails subdomains | anew subs.txt | wc -l
cat "$scan_path/roots.txt" | subfinder | anew subs.txt | wc -l
cat "$scan_path/roots.txt" | shuffledns -w "$ppath/lists/pry-dns.txt" -r "$ppath/lists/resolvers.txt" | anew subs.txt | wc -l

## DNS Resolution -Resolve Discovered
puredns resolve "$scan path/subs.txt" -r "$ppath/lists/resolvers.txt" -w "$scan_path/resolved.txt" | wc -l
dnsx -l "$scan_path/resolved.txt" -json -o "$scan_path/dns.json" | jq -r '.a?[]?' | anew "$scan_path/ips.txt" | wc -l

如果我们使用这些添加的功能进一步枚举,它应该生成以下文件:

dns.json
ips.txt
resolved.txt
roots.txt
subs.txt

挖掘SRC时如何编写信息收集脚本

4.HTTP服务器枚举

信息收集脚本将使用nmap来扫描通过解析发现的子域而发现的IP。如果脚本只想从Nmap结果中发现HTTP服务器,则可以使用 nmap解析器(例如nmaptocsv)来实现。ProjectDiscovery也遇到过这个问题,所以ProjectDiscovery构建了一个名为tew的可移植工具(Tew是用Golang构建的,这意味着它可以编译为二进制文件并在许多不同的系统上运行,而无需任何依赖)。

tew -x nmap.xml
tew -x nmap.xml | httpx
5. 解决虚拟主机问题

只要您确信您的目标没有实现虚拟主机,上述解决方案就可以很好地进行枚举。为了解决这个问题,我向 tew 添加了一个 —vhost 标志,允许它从 DNSx JSON 输出导入 DNS 数据并相应地解析它们。

tew -x nmap.xml -dnsx dns.json —vhost | httpx -json -o http.json

挖掘SRC时如何编写信息收集脚本

DNSx输出中的主机名已自动解析为Nmap XML输出文件中的IP地址和开放端口。在上图当中,信息收集脚本出于可读性目的,不会输出到JSON,但是,信息收集脚本一旦需要将HTTPx输出保存为JSON格式,就需要使用下面的jq oneliner提取 HTTP URL。

cat http.json | jq -r '.url | sed -e 's/:80$//g' -e 's/:443$//g' | anew http.txt

使用sed删除80和443的端口号,因为其可能会影响某些工具的效率,因为服务器的响应与没有端口号时的响应不同,例如重定向。

6.HTTP爬虫

信息收集脚本的下一部分将抓取发现的URL。信息收集脚本可以稍后使用ffuf处理这些以匹配正则表达式,并使用Gospider进行爬取。而且,信息收集脚本也可以轻松使用其他工具(例如:hakrawler或xnLinkFinder等)。

gospider -S http.txt —json | grep "{" | jq -r '.output'

挖掘SRC时如何编写信息收集脚本

7.HTTP抓包

信息收集脚本受Tomnomnom的启发,从HTTP索引页捕获HTTP响应可以作为挖掘SRC的良好方向。本来,可能会使用像Meg这样的工具来完成。但是HTTPx包含此功能,使得可以修改信息收集脚本以在执行枚举时存储响应。

挖掘SRC时如何编写信息收集脚本

信息收集脚本将创建一个名为“responses”的目录。里面将包含所有 HTTP 响应。如果查看这些文件的内部,可以看到包括响应标头在内的所有内容。现在可以grep并检查这些响应,看看它们是否包含任何有价值的内容。

挖掘SRC时如何编写信息收集脚本

运行编写的信息收集脚本;以检测脚本运行情况(如下图所示):

## SETUP
echo "Starting scan against roots:"
cat "$scope_path/roots.txt"
cp -v "$scope_path/roots.txt" "$scan_path/roots.txt"

## DNS Enumeration - Find Subdomains
cat "$scan_path/roots.txt" | haktrails subdomains | anew subs.txt | wc -l
cat "$scan_path/roots.txt" | subfinder | anew subs.txt | wc -l
cat "$scan_path/roots.txt" | shuffledns -w "$ppath/lists/pry-dns.txt" -r "$ppath/lists/resolvers.txt" | anew subs.txt | wc -l

## DNS Resolution -Resolve Discovered
puredns resolve "$scan path/subs.txt" -r "$ppath/lists/resolvers.txt" -w "$scan_path/resolved.txt" | wc -l
dnsx -l "$scan_path/resolved.txt" -json -o "$scan_path/dns.json" | jq -r '.a?[]?' | anew "$scan_path/ips.txt" | wc -l

## Port Scanning & HTTP Server Discovery
nmap -T4 -vv -iL"$scan_path/ips.txt"--top-ports 3000 -n --open -0X "$scan_path/nmap .xml"
tew -x "$scan_path/nmap.xml" -dnsx "$scan_path/dns.json" --vhost -o "$scan_path/hostport.txt" | httpx -sr -srd "$scan_path/response" -json -o "$scan_path/http.json"
cat "$scan_path/http.json" | jq -r '.url' | sed -e 's/:80$//g' -e 's/:443$//g' | sort -u>"$scan_path/http.txt"

## Crawling
gospider -s "$scan_path/http.txt" --json | grep "{" | jq -r '.output?' | tee "$scan_path/crawl.txt"
8.Javascript分析

在学习编写信息收集脚本过程中,通过学习使用HTTPx将响应存储到文件中,举一反三戛,信息收集脚本也可以应用同样的原理来快速存储javascript文件。现在已经有了一个javascript文件的目录,可以使用grep或trufflehog来探索这些文件。

cat crawl.txt | grep ".js" | httpx -sr -srd js

挖掘SRC时如何编写信息收集脚本

运行编写的信息收集脚本;以检测脚本运行情况(如下图所示):

## SETUP
echo "Starting scan against roots:"
cat "$scope_path/roots.txt"
cp -v "$scope_path/roots.txt" "$scan_path/roots.txt"

## DNS Enumeration - Find Subdomains
cat "$scan_path/roots.txt" | haktrails subdomains | anew subs.txt | wc -l
cat "$scan_path/roots.txt" | subfinder | anew subs.txt | wc -l
cat "$scan_path/roots.txt" | shuffledns -w "$ppath/lists/pry-dns.txt" -r "$ppath/lists/resolvers.txt" | anew subs.txt | wc -l

## DNS Resolution -Resolve Discovered
puredns resolve "$scan path/subs.txt" -r "$ppath/lists/resolvers.txt" -w "$scan_path/resolved.txt" | wc -l
dnsx -l "$scan_path/resolved.txt" -json -o "$scan_path/dns.json" | jq -r '.a?[]?' | anew "$scan_path/ips.txt" | wc -l

## Port Scanning & HTTP Server Discovery
nmap -T4 -vv -iL"$scan_path/ips.txt"--top-ports 3000 -n --open -0X "$scan_path/nmap .xml"
tew -x "$scan_path/nmap.xml" -dnsx "$scan_path/dns.json" --vhost -o "$scan_path/hostport.txt" | httpx -sr -srd "$scan_path/response" -json -o "$scan_path/http.json"
cat "$scan_path/http.json" | jq -r '.url' | sed -e 's/:80$//g' -e 's/:443$//g' | sort -u>"$scan_path/http.txt"

## Crawling
gospider -s "$scan_path/http.txt" --json | grep "{" | jq -r '.output?' | tee "$scan_path/crawl.txt"

## Javascript
Pullingcat "$scan_path/crawl.txt"| grep ".js"| httpx -sr -srd js

0X03总结

本文介绍了如何编写信息收集脚本,以快速收集挖掘SRC所需的大量资产。脚本涉及资产枚举、子域名枚举、HTTP服务器枚举、HTTP爬虫、HTTP抓包、JavaScript分析等方面,编写的信息收集脚本可以极大地简化和加速SRC挖掘过程。然而,编写信息收集脚本也有一些挑战,例如:脚本需要定期维护和更新,以确保准确性和效率;脚本可能依赖于外部工具或API,这些工具或API可能会更改或不可用;脚本的性能可能因目标的大小和复杂性而异等。总的来说,编写信息收集脚本是一个不错的技能,可以显着提高SRC挖掘的效率和有效性。

原文始发于微信公众号(亿人安全):挖掘SRC时如何编写信息收集脚本

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月8日17:51:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   挖掘SRC时如何编写信息收集脚本https://cn-sec.com/archives/2720317.html

发表评论

匿名网友 填写信息