Github Action进行侦察

  • A+
所属分类:安全文章


背景故事

正如我在年度回顾博客文章中所写的那样,最初,当我开始进行漏洞赏金时,我主要专注于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.txtexample.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/[email protected]

# Install golang
- name: Setup golang
uses: actions/[email protected]
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/[email protected]ster
with:
github_token: ${{ secrets.TOKEN }}

我在上面的示例中写了一些评论。对我们来说重要的是,steps这些是我们要求Github Action在VM内部执行的基本操作。

下面我试图详细解释所有步骤:

  • 检出您的存储库文件

- name: Checkout Repo
uses: actions/[email protected]

这是预定义的操作,即action / checkout这将基本上所有复制您的GitHub库到虚拟机的文件,这意味着如果你有称为文件scope.txt存储库中的话反而会使得一个文件名为scope.txt/home/虚拟机的目录中(其中一个将运行我们的工作)。

  • 设定golang

既然subfinder是写的,golang我们需要在虚拟机中安装go。

- name: Setup golang
uses: actions/[email protected]
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/[email protected]
with:
github_token: ${{ secrets.TOKEN }}

这两个步骤基本上是将所有新生成的文件(即添加subdomains.txt到GitHub存储库),然后推送该文件。这类似于add, commit, pushgit中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然后将输出传递给massdnshttpx则整个工作将在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进行侦察

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: