Mooder团队内部贡献平台

小介绍:Mooder是一款开源、安全、简洁、强大的(安全)团队内部知识分享平台,基于Django、全封闭保证私密性、支持Markdown、支持Postgres/Mysql/Sqlite等多种数据库、支持Docker-compose一键化安装与更新,易于二次开发。

今天开源的一个小玩意,上个月到这个月陆陆续续写的,这几天下班以后也会写几行这个,进行产品上的微调,然后修一些BUG。本来是给自己团队写的一个东西,但想想感觉应该有很多团队都需要这个,于是就开源了。

项目地址: https://github.com/phith0n/mooder

文档地址: https://phith0n.github.io/mooder/

为什么会有Mooder

有的人把Mooder理解为一个漏洞平台:团队成员可以提交漏洞,管理员进行审核与评分,最后能够兑换礼品或兑换其他人的漏洞。

但我把它理解为一个“团队贡献”平台,绝不是分享漏洞,而是分享知识。最初我在设计Minos的时候就有这样的想法,只可惜后面走偏了,把Minos做成一个社区了。后来我想想,还是需要这么一个东西,于是我又写了Mooder。

一个团队需要有自己独一无二的内容,才能吸引更多人才,而这个平台将是承载这些内容的载体。

做Mooder的初衷是为了团队内部的交流。由于众所周知的原因,国内大量社区关闭,安全技术知识的学习变得愈加困难,更多的团队将交流方式变为QQ群、微信群。 而QQ、微信等及时通信工具并不是一个交流技术的好地方,团队仍然需要一个内部社区。

Mooder从设计之初想法就是“封闭”,也就是说该社区严格控制内部隐私,仅拥有邀请码的用户可以登录社区,管理员在后台也能够踢出、删除一个用户,保证了社区的私密性。

另外,Mooder的核心理念的“贡献知识”。团队成员可以将自己挖掘的通用漏洞、编写的EXP、提交到其他SRC的漏洞详情、众测中挖到的漏洞等等作为一个“贡献”提交到Mooder中,然后由管理员进行审核并给予rank与积分。通过该“积分”,团队成员也可以购买其他成员提交的贡献,或者去礼品中心换取礼品等。

通过这样的“知识交换”,让团队能够更快地成长。

一些小预览

用户登录

Mooder支持登录、邀请码注册、找回密码、登录激活。

14771503767534.jpg

注册:

14771504018411.jpg

查看贡献

贡献列表,列出所有贡献:

14771625072267.jpg

详情页面,根据贡献的私密程度判断用户是否可读。

用户在提交贡献的时候可以选择该贡献的可见性:公开、出售或私密。公开的贡献,所有平台注册用户均可查看;出售的贡献,其他用户需要付出一定价格购买,才能查看当前贡献,而贡献提交者将可以或者这笔费用;私密的贡献,除贡献作者与审核员外任何人无法查看。

14771633699604.jpg

提交与审核贡献

提交贡献支持Markdown编辑详情,支持上传图片与附件,支持预览:

14771640307945.jpg

管理员后台审核贡献:

14771646828798.jpg

礼品中心

团队负责人可以在后台进行礼品上架,用于奖励乐于分享的成员。前台礼品中心:

14771642294411.jpg

用户填写收货地址进行礼品兑换:

14771643208498.jpg

管理员后台查看购买记录:

14771644863318.jpg

虚拟物品可以直接通过“管理员回复”发货:

14771645409644.jpg

后台管理

审核员后台,可以方便地进行贡献(漏洞)的审核,也能极好的控制权限——可以控制审核员只能审核贡献、运营人员只能修改礼品与发货。

后台首页显示一些统计信息:

14771672317703.jpg

一键生成邀请码:

14771672824582.jpg

增加内部应用:

14771673315964.jpg

用户奖惩:

14771674114435.jpg

查看用户奖惩日志:

14771674539378.jpg

赞赏

喜欢这篇文章?打赏1元

评论

回复

你好,我想问一下,我后台新建的账号在前台无法登录怎么办..

墨雪飘影 回复

@狼 因为admin后台填的密码没加密,数据库存的要加密,你可以复制一份超管的密文,然后登录后再改。

zzc 回复

请问我使用docker-compose 一键安装没有看见生成的密码。。需要进入数据库吗, 还是有一个随机,或者默认账号密码

天津网站建设 回复

感谢博主分享

test 回复

按照docker方式安装运行后 报500错误

[Mon Jan 22 16:55:57.974032 2018] [wsgi:error] [pid 128:tid 139745119360768] django.setup(set_prefix=False)
web_1 | [Mon Jan 22 16:55:57.974054 2018] [wsgi:error] [pid 128:tid 139745119360768] File "/usr/local/python/lib/python3.5/site-packages/django/__init__.py", line 24, in setup
web_1 | [Mon Jan 22 16:55:57.974071 2018] [wsgi:error] [pid 128:tid 139745119360768] apps.populate(settings.INSTALLED_APPS)
web_1 | [Mon Jan 22 16:55:57.974092 2018] [wsgi:error] [pid 128:tid 139745119360768] File "/usr/local/python/lib/python3.5/site-packages/django/apps/registry.py", line 112, in populate
web_1 | [Mon Jan 22 16:55:57.974110 2018] [wsgi:error] [pid 128:tid 139745119360768] app_config.import_models()
web_1 | [Mon Jan 22 16:55:57.974132 2018] [wsgi:error] [pid 128:tid 139745119360768] File "/usr/local/python/lib/python3.5/site-packages/django/apps/config.py", line 198, in import_models
web_1 | [Mon Jan 22 16:55:57.974150 2018] [wsgi:error] [pid 128:tid 139745119360768] self.models_module = import_module(models_module_name)
web_1 | [Mon Jan 22 16:55:57.974173 2018] [wsgi:error] [pid 128:tid 139745119360768] File "/usr/local/python/lib/python3.5/importlib/__init__.py", line 126, in import_module
web_1 | [Mon Jan 22 16:55:57.974190 2018] [wsgi:error] [pid 128:tid 139745119360768] return _bootstrap._gcd_import(name[level:], package, level)
web_1 | [Mon Jan 22 16:55:57.974212 2018] [wsgi:error] [pid 128:tid 139745119360768] File "/app/accounts/models.py", line 11, in <module>
web_1 | [Mon Jan 22 16:55:57.974229 2018] [wsgi:error] [pid 128:tid 139745119360768] from archives.models import check_image_extension
web_1 | [Mon Jan 22 16:55:57.974250 2018] [wsgi:error] [pid 128:tid 139745119360768] File "/app/archives/models.py", line 123, in <module>
web_1 | [Mon Jan 22 16:55:57.974266 2018] [wsgi:error] [pid 128:tid 139745119360768] class Comment(models.Model):
web_1 | [Mon Jan 22 16:55:57.974289 2018] [wsgi:error] [pid 128:tid 139745119360768] File "/app/archives/models.py", line 127, in Comment
web_1 | [Mon Jan 22 16:55:57.974305 2018] [wsgi:error] [pid 128:tid 139745119360768] parent = models.ForeignKey('self', verbose_name='\xe7\x88\xb6\xe8\xaf\x84\xe8\xae\xba', blank=True, null=True)
web_1 | [Mon Jan 22 16:55:57.974346 2018] [wsgi:error] [pid 128:tid 139745119360768] TypeError: __init__() missing 1 required positional argument: 'on_delete'

phithon 回复

@test 应该是版本的关系,django 2.0 以后有些代码不兼容

test 回复

@phithon 我已经改好了 非常实用

fly 回复

请问你的GitHub关了嘛?项目地址404

phithon 回复

@fly 号被封了

lllllll 回复

@fly https://github.com/myDreamShadow/mooder 只找到了这个

test 回复

P牛就是厉害,这得多少年的技术积攒才有如今的实力啊

rise 回复

大神,windows下能安装吗,怎么安装

phithon 回复

@rise:不能。

yiyang 回复

好想加入你们的团队。。

skip 回复

一个月业余时间就搞定了,老手就是厉害。面对其它一些第三方库,新手上手的时间以及将各种组件结合到一起前能够工作,这之间会耗费大量时间,这一方面我想是大头。

小小小小天使 回复

想二次开发来着,但是对django表示不熟悉

hancool 回复

期待能成为信息安全爱好者的知识库(eg:比如drops.leavesongs.com)

grt1st 回复

@hancool 可以魔改一下23333

阿图装修 回复

看着挻不错的啊,等我有公司架设一个哈。

Luca 回复

深深的膜拜

独自等待 回复

多谢大牛提供。

HackBraid 回复

学习了~

captcha