背景故事
正如我在年度回顾博客文章中所写的那样,最初,当我开始进行漏洞赏金时,我主要专注于Android应用程序,但是随着时间的流逝,我意识到仅专注于android应用程序不会对我有多大帮助。因为大多数时候程序在范围内通常只有1或2个android应用程序,而这些应用程序有时仅会产生无法复制的bug。因此,在今年年初,我决定扩大搜索范围,并尝试查找Web应用程序上的错误。
现在,如果您倾向于在网站/ Web应用程序上进行漏洞赏金,那么您一定已经听说所有伟大的猎人都说过“recon is important
或”之类的P1 in 1 minute just by recon
话。然后,您将看到侦察中的大多数任务必须自动化,重点放在单词上,has
因为侦察过程中有某些步骤,我们将尝试在所有程序/目标上执行。因此,我决定进行自己的侦察设置,因为它不是一个非常先进的东西,也不是什么大而简单的东西。
基本侦察流程
最初,我编写了一个小脚本,该脚本执行以下操作:-将范围中的所有域存储到一个名为的文件中scope.txt
-运行多个子域枚举工具,例如amass,subfinder等scope.txt
,合并所有输出并给出-If subdomains.txt
subdomains.txt已经存在,然后将新的与旧的进行比较,如果发现任何新的子域,则生成警报。-在该文件上运行massdns和httpx。
在阅读了很多关于侦察方法的博客文章后,我想到了整个想法。几乎每个人都建议拥有VPS(这不是强制性的,但有帮助)。所以我想我可以在VPS的cronjob上设置这个小脚本,然后等待它生成警报。但是那是我想到的时候why not do this with GitHub actions
什么是Github动作?
GitHub Actions借助世界一流的CI / CD,可轻松实现所有软件工作流程的自动化。直接从GitHub构建,测试和部署代码。使代码审查,分支机构管理和问题分类工作按您想要的方式进行。
简而言之,它是的更好替代travis
。如果您有GitHub项目,并且想要运行linter
检查或tests
对每个请求请求进行操作,以确保没有中断,则可以设置一个Github Action来执行此操作。
现在,即使Github Action是为执行更简单的操作(例如运行测试/运行程序)而制作的,它也可以做很多强大的事情,因为最终它实际上是一个虚拟机。可以通过Github Action执行可以在VM上运行的东西(甚至可以在常规设置下运行)。
Github行动进行侦察
让我们看看用一个例子,假设你想运行subfinder
在一个名为scope.txt
其example.com
在里面。这scope.txt
存在于您的Github存储库中。
on: [push] # This is a trigger https://docs.github.com/en/actions/reference/events-that-trigger-workflows
jobs:
build:
# The OS for which will be used.
# You can specify the exact version if you want.
runs-on: ubuntu-latest
# From here we just define all the steps that we have to do.
steps:
- name: Checkout Repo
uses: actions/checkout@master
# Install golang
- name: Setup golang
uses: actions/setup-go@v2
with:
go-version: '^1.14.14'
- name: Setup go tools
run: | go version
GO111MODULE=on go get -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder
- name: Run Subfinder
run: subfinder -silent -dL scope.txt -o subfinder.txt
- name: Save domains
run: | git config --local user.email "[email protected]"
git config --local user.name "MY USERNAME"
git add --all
git commit -m "Add Subdomains.txt"
- name: Push changes
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.TOKEN }}
我在上面的示例中写了一些评论。对我们来说重要的是,steps
这些是我们要求Github Action在VM内部执行的基本操作。
下面我试图详细解释所有步骤:
-
检出您的存储库文件
- name: Checkout Repo
uses: actions/checkout@master
这是预定义的操作,即action / checkout。这将基本上所有复制您的GitHub库到虚拟机的文件,这意味着如果你有称为文件scope.txt
存储库中的话反而会使得一个文件名为scope.txt
在/home/
虚拟机的目录中(其中一个将运行我们的工作)。
-
设定golang
既然subfinder
是写的,golang
我们需要在虚拟机中安装go。
- name: Setup golang
uses: actions/setup-go@v2
with:
go-version: '^1.14.14'
的安装页面subfinder
显示go版本1.14+
是必需的,因此我们在这里进行安装1.14.14
。顺便说一句,这actions/setup-go
也是一个预定义的GitHub操作,您可以在此处找到。
-
安装subfinder并运行它
- name: Setup go tools
run: | go version
GO111MODULE=on go get -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder
直到这一步,我们必须在环境中安装subfinder。因此,如果您必须从normal
文件系统的角度来思考,您可以将其想像成一个虚拟机,其中有一个虚拟机,该/home
目录中有一个目录,我们有一个目录名为go
(假设所有go软件包都安装在其中)名为的目录go/
。在此过程中,我们安装了一个名为的工具subfinder
。另外,在/home
目录中是一个名为scope.txt
。
现在是我们跑步的时候了 subfinder
- name: Run Subfinder
run: subfinder -silent -dL scope.txt -o subfinder.txt
这将在VM上执行命令,并生成其中包含所有子域的文件。
-
将文件推回仓库
现在,一旦子查找器生成了输出,您显然希望看到该输出。最好的选择就是将文件推回到您的仓库中。
- name: Save domains
# if you don't want to push all the files back then you can also mention it like `git add subdomains.txt`
run: | git config --local user.email "[email protected]"
git config --local user.name "MY USERNAME"
git add --all
git commit -m "Add Subdomains.txt"
- name: Push changes
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.TOKEN }}
这两个步骤基本上是将所有新生成的文件(即添加subdomains.txt
到GitHub存储库),然后推送该文件。这类似于add, commit, push
git中normal的工作方式。
如果您注意到最后一行,它说secrets.TOKEN
这是您可以从GitHub设置生成的秘密令牌。要了解如何生成和添加令牌,请阅读此内容。
这是如何使用Github操作运行简单命令的基础。现在,在讨论如何做复杂的事情之前,我想谈谈此设置的局限性。
局限性
由于Github Action并非用于Bug搜寻或任何大型任务,因此它有其自身的局限性。非常重要的是:
-
工作流程中的每个作业最多可以运行6个小时的执行时间。
-
赶时间限制会导致工作失败
-
这意味着我们无法在可能需要超过6个小时的子网中运行masscan
-
您可以在一小时内通过存储库中的所有操作最多执行1000个API请求
-
一小时内仅允许1000个API请求。
-
因此,如果要对子域进行Github Dorking,则需要找到一种有效的方法来在每个请求中获取更多数据。
-
您每个月仅获得某些分钟的Github Action。
-
对于GitHub专业版用户,您可以获得3000分钟(即每月50个小时的Github Action)
-
对于普通用户,我认为每月限制为2000分钟左右
除此之外,还有其他一些限制,您可以在此处阅读有关限制的信息。
现在,关于的最后一个限制minutes per month
是唯一听起来可能有问题的东西,但实际上并非如此。我进行了一些测试,发现如果您有5个目标(网站)scope.txt
并运行,amass + subfinder + findomain
然后将输出传递给massdns
,httpx
则整个工作将在2分钟内完成(绝不超过2分钟)。
如果我们做数学,那么一个月内大约有730个小时,假设您每5个小时运行一次作业,这意味着146
一个月内的运行时间。假设每项工作需要2分钟,那将总共是292
几分钟。而作为普通用户,您有2000分钟的时间,因此您仍然会有〜1708分钟的Github Actions。现在,要完全耗尽限制,您可以在不同的时间间隔运行很多作业。其中一些如下:
-
每44分钟执行一次2分钟的工作,到月底,您的配额还剩10分钟左右。
-
每10个小时执行一次27分钟的工作,到月底,您的配额还剩下〜21分钟。
如果我算错了数学,请告诉我😂
好的,这些只是一些统计信息,但总的来说,您仍然可以在GitHub Actions上运行相当多的工具。
对过程的建议
-
如果你们中的任何一个决定尝试一下,那么我建议您按照时间表设置一个工作或多个工作。
-
请参阅Github的文档,了解如何安排活动
-
不要运行像masscan / nmap或ffuf这样的大型列表
-
不必
steps
为每个命令添加一个小的bash脚本,而是在设置步骤之后运行它们。
前任:
- name: Setup go tools
run: | go version
GO111MODULE=on go get -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder
GO111MODULE=on go get -v github.com/projectdiscovery/httpx/cmd/httpx
- name: Subdomain enumeration
run: bash recon.sh
在内部,recon.sh
您可以使用侦察过程中所需的所有工具或逻辑。
注意:在脚本中使用它们之前,请不要忘记安装所有工具。
-
使用webhooks进行通知。像在脚本中一样,添加
curl
命令以在发生某些情况时发送警报。
例如:假设您希望在获得新的子域时收到通知,以便可以添加一些内容
curl -X POST -H 'Content-type: application/json' --data '{"text":"Found new Subdomains"}' YOUR_WEBHOOK_URL
这只是您制作bash脚本的一个示例。
GitHub操作的好处
我的意思是,你们中的很多人可能已经在VPS /家庭服务器上进行了完美的设置,但是如果您刚刚开始,那么使用此设置可能会有很多好处。
-
设置Github Action非常简单
-
看起来可能很困难,但实际上并非如此
-
无需记录您的东西。
-
我知道可以在其中找到cron日志,
/var/log/syslog
但是我只是为了争辩而说这。 -
如果您在VPS上设置了cron作业,则必须保留该cron的日志,以防万一它可能在某个时候失败,这将有助于调试脚本/代码
-
但是如果使用Github Action,如果任何步骤失败,它将显示导致失败的详细错误。
-
免费
-
您不必每月支付任何费用,即使没有成为PRO Github用户也可以执行此操作
-
资料可用性
-
但是作为反论点,我想说的是,如果您使用ffuf运行ffuf,
-mc all -ac
那么就有可能会加载大量数据,因此最好的选择是将其保存在存储库中的文件中😄😄 -
您可以安装Github Android / iOS应用,然后跟踪找到的所有数据
-
在这里,您可以说我们可以通过在松弛状态下通过Webhooks发送数据来完成相同的操作
结论
我认为,使用Github Actions确实可以很好地进行侦察(一定程度上)。我有我的私人设置,可以为我做检查工作,然后还有另一个cronjob,它将数据从存储库中提取到我的系统中,在这里我可以正确地分析数据。我也对数据分析有个想法,即您可以使用另一个脚本,也可以将其包含在侦查脚本中,该脚本将所有工具的输出转换为markdown
,然后以这种方式推送更改,从而可以美化所有数据,并且很容易经过。
本文始发于微信公众号(Khan安全团队):Github Action进行侦察
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论