美文网首页安全技术万网极研社
保护好你的JENKINS实例,别等着黑客来提醒你!(价值5000

保护好你的JENKINS实例,别等着黑客来提醒你!(价值5000

作者: cnRay | 来源:发表于2017-12-22 19:24 被阅读21次

    在levelUp上发表完“Doing Recon Like a Boss”和更新了一篇Hackerone上同样主题的帖子后,我决定开始挖一些公开项目漏洞,看看这种方法是否仍然适用于公开项目。作为其中的一部分,我决定看看SlackSnapchat的漏洞赏金项目,并按照演讲中描述的那样准确地完成侦察任务。

    Step #1 –子域名爆破

    子域收集通常在大型漏洞赏金项目中是一个好的开头,但不幸的是我发现的子域并不是很有趣,所以我决定找到更“有趣”的东西。跳到第二阶段。

    Step #2 – Amazon网络服务(AWS

    Amazon一直都是一个不错的起点,但了解到的是Snapchat很大程度上依赖于Google,而且他们在Hackerone漏洞赏金项目中已经声明了他们的APP是托管在Google上的。那么我们不要继续在s3 buckets上浪费时间了,看看还有什么吧!

    Step #3  – HackerOneSnapchat的披露报告

    作为侦察任务的一部分,我通常喜欢寻找已知或披露的漏洞。我快速浏览了一下他们的Hacktivity并发现如下内容:

    – render.bitstrips.com

    – blog.snapchat.com

    – accounts.snapchat.com

    – fastly.sc-cdn.net

    – sc-corp.net(感谢Shubs

    “sc-cdn.net”和“sc-corp.net”都引起了我的注意。我的第一反应就是子域名爆破,但这是在自欺欺人。这些是corp / cdn域名,而且很有可能大多数这些有趣的子域名都有特定的模式。现在的问题是我该如何发现他们?

    Step #4: Censys / Shodan

    在Censys.io上查找证书一般是个很好的方式。通常我在censys上使用类似于这样的查询条件:

    443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names:domain.com

    在通过暴力破解不能找到有趣的子域名情况下,再用这种方法就足够了。通过这些结果,我发现了一个子域名:REDACTED-jenkins-Environment.sc-corp.net,该域名要求用户登录才能查看具体内容。这个时候,我想知道是否存在生产环境。肯定有很多,让我们找一下吧。为了加速我的进程,我用了能查找以下不同REDACTED-jenkins-$env.sc-corp.net序列列表的脚本:

    “dev, alpha, stage, prod, beta, local,test”。正如我所期望的那样,其中一些结果返回了302响应码,这暗示他们可能需要登录。

    Step #5:从这里我能干什么呢?

    我最初的想法是很明显地尝试登录这个产品实例,但这并没有成功(感谢preben_ve)。因此,让我们下移列表,并在其他实例上尝试相同的方法。这就是所有乐趣开始的地方。算我幸运,我发现的其中一个实例允许我使用gmail帐户登录到Jenkins实例。现在,我已经通过了它们的Jenkins实例身份验证,我认为它可能只给了最小的权限允许我做一些事情,更不用说允许我访问“Script Console(脚本控制台)”了。这时候,我运行了一个允许我从这台服务器读取一份文件的脚本,然后立刻停止所有测试并将细节提交给了Snapchat团队。没有必要执行其他脚本来证明影响,因为我已经可以读取系统上的任意文件了。为了证明RCE(远程代码执行),我在报告中包含了一份允许执行命令的脚本,并要求他们自己冒险进行测试。我们晚一点儿讨论这些脚本。

    Step #6:利用Jenkins漏洞

    我写这篇帖子不只是为了讨论我提交给Snapchat的报告,因为其实大多数信息能通过我在HackerOne上的限制公开披露并做一些简单的侦察猜到。我写这篇帖子的目的是深入探讨利用Jenkins的漏洞,并讨论它是否真的值2万美元。为了实现这个目的,我用自己的Jenkins实例来演示不同的攻击场景(截图与我提交给Snapchat的报告无关):

    Example #1:已知漏洞(只是为了突出一些)

    CVE-2016-9299– Jenkins Java 反序列化远程代码执行漏洞

    CVE-2015-8103– Jenkins CLI – RMI Java 反序列化(Exploit)

    Example #2:访问构建信息:

    通常有权访问Jenkins的构建信息则说民可能会让你访问凭据,api_keys / secrets这里是源码:

    Example #3:插件

    Jenkins

    允许你安装不同的插件,比如Github OAuth,你可以允许用户使用你的组织进行登录,这可能泄露你的Github令牌:

    使用Github API可以访问更多数据。比如:https://api.github.com/orgs/ORG_NAME/repos?access_token=XXXXX

    Example #4: Groovy脚本

    正如我之前提到的,脚本控制台允许你使用一行代码来读取文件:

    通过以下代码你也能在这台服务器上执行一条命令:

    def sout = new StringBuilder(), serr = new StringBuilder()

    def proc = 'ls /etc/'.execute()

    proc.consumeProcessOutput(sout, serr)

    proc.waitForOrKill(1000)

    println "out> $sout err> $serr"

    关键点:

    1. Jenkins允许你有不同的用户权限。这意味着你得通过Jenkins实例登录认证,它不保证你可以执行远程代码。

    2.如果需要通过Github或Google OAuth认证,不要被吓到。

    3.你的访问权限可能有限(没有脚本,构建信息等),但是你可以访问“People”列表中的用户。这也许能让你通过暴力破解的方式获取登录凭证(我没有那么极端)。

    4.通常Jenkins被用于部署,所以查一下IP,主机名等。如果你拿下了Jenkins而且想进一步测试(在漏洞赏金项目中尽量避免,完全没必要而且会违反大多数项目规则),值得注意的是Jenkins服务器最有可能有权限访问生产环境或内网环境。在运行的服务器上找找私钥和主机。

    5.不要在你的报告中使用“公开可访问的Jenkins”,除非你可以利用上面的一个或多个例子。

    6. Snapchat立刻移除了这个实例并奖励了我。他们也非常友善地同意我写这篇关于这个漏洞的帖子。

    感谢阅读,挖洞愉快!

    相关文章

      网友评论

        本文标题:保护好你的JENKINS实例,别等着黑客来提醒你!(价值5000

        本文链接:https://www.haomeiwen.com/subject/swlxgxtx.html