Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/opensec-cn/conote-community
Conote 综合安全测试平台社区版。
https://github.com/opensec-cn/conote-community
django pentesting
Last synced: 21 days ago
JSON representation
Conote 综合安全测试平台社区版。
- Host: GitHub
- URL: https://github.com/opensec-cn/conote-community
- Owner: opensec-cn
- Archived: true
- Created: 2021-12-09T15:21:55.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2024-08-15T14:49:58.000Z (4 months ago)
- Last Synced: 2024-08-15T16:48:57.421Z (4 months ago)
- Topics: django, pentesting
- Language: CSS
- Homepage: https://phithon.gitbooks.io/conote/content/
- Size: 4.24 MB
- Stars: 364
- Watchers: 9
- Forks: 64
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-hacking-lists - opensec-cn/conote-community - Conote 综合安全测试平台社区版。 (CSS)
README
**Archived: 请使用2.0版本 ,CoNote 1.0版本不再维护。**
# CoNote 综合安全测试平台(社区版)
CoNote是一个内部使用的工作台,它会让我们的安全测试过程变得非常方便,于2021年12月推出社区版。
使用说明:
演示视频:
[![conote](img/2.png)](https://www.youtube.com/watch?v=WqbjJ8NISys)
![](img/3.png)
搭建文档尚不完善,尽情期待,有能力的同学可以先自行研究。
## 全局配置与环境变量
conote使用.env来配置环境变量,我们需要先将文件`.env.default`复制成`.env`。
具体值的意义,请参考conf/settings.py以及conf/settings_deploy.py。
## 主域名
conote平台需要一个主域名,如`note.leavesongs.com`,用户可以通过这个域名访问管理页面。
主域名不用在配置文件里配置。
## 子域名
每个用户将被分配一个子域名,这个域名用于:
1. 记录Web日志
2. 记录DNS日志
3. 存放并访问用户笔记在配置文件中配置如下选项,指定根域名(每个用户分配到的子域名将是`xxxx.2m1.pw`):
```python
O_SERVER_DOMAIN = '2m1.pw'
```这个域名如何配置解析,在下一节进行说明。
## DNS 配置
因为要记录DNS日志,所以我们需要将conote配置成一个DNS服务器。
首先,选择两个域名`ns1.leavesongs.com`、`ns2.leavesongs.com`(随意即可,无要求),A记录指向conote服务器IP。
然后,在配置文件中增加如下选项:
```python
O_NS1_DOMAIN = 'ns1.leavesongs.com'
O_NS2_DOMAIN = 'ns2.leavesongs.com'
O_SERVER_IP = '45.32.43.49'
O_ADDITION_ZONE = ''
```然后,在`O_SERVER_DOMAIN`域名(也就是`2m1.pw`)的注册商处,配置DNS服务器为`ns1.leavesongs.com`和`ns2.leavesongs.com`。
`O_ADDITION_ZONE`中可以配置一些额外的DNS区域,比如MX记录等。
## 配置用户自定义DNS域名
conote可以允许用户配置自定义的DNS记录,用于测试Rebind漏洞。
选择一个`O_SERVER_DOMAIN`的子域名(不要和用户的子域名重复),如`s.2m1.pw`。增加如下配置:
```python
O_REBIND_DOMAIN = 's.2m1.pw'
```不再需要额外配置,因为conote的DNS服务器会接管这个域名。
## 配置短域名
conote支持短域名模块,我们可以注册一个短域名,如`mhz.pw`,然后增加如下配置:
```python
O_SHORT_DOMAIN = 'mhz.pw'
```然后需要在域名解析商处将这个域名指向conote的IP地址。
当然,也可以配置为`O_SERVER_DOMAIN`的另一个子域名,如`a.2m1.pw`。但这时候,我们就需要修改`O_ADDITION_ZONE`,为这个子域名添加一个A记录,因为此时即conote充当域名解析商的角色。
## 配置XSS平台域名
conote支持xss平台,除了名字不同,配置同上一节:
```python
O_XSS_DOMAIN = 'tj.2m1.pw'
```## 配置第三方登录
CoNote现在使用的是第三方登录,如果要对接自己的OAuth平台,我们可以略微修改代码。
首先在.env中修改OAuth的配置项:
```
CLIENT_ID=xxxx
CLIENT_SECRET=xxxx
CALLBACK_URL=http://note.leavesongs.com/auth/callback/
# 将callback_url中的example.com修改成conote平台主域名即可,path不要修改。
```然后在`app/ucenter/views.py`中,修改如下三个url:
```python
authorization_base_url = 'https://auth.tricking.io/o/authorize/'
token_url = 'https://auth.tricking.io/o/token/'
profile_url = 'https://auth.tricking.io/api/profile/'
```第一个是获取code的url,第二个是用code兑换access_token的url,第三个是获取用户信息的url。
然后修改一下同文件中的RegisterView类:
```python
class RegisterView(generic.CreateView):
model = User
fields = [
'username',
'email'
]
template_name = 'registration/register.html'def dispatch(self, request, *args, **kwargs):
try:
session = OAuth2Session(client_id, token=request.session['oauth_token'])
self.user_data = session.get(profile_url).json()
except BaseException as e:
return render(request, '500.html', context=dict(errors=str(e)))user = User.objects.filter(auth_id=self.user_data['auth_id']).first()
if user:
self.login(user)
return redirect(resolve_url(settings.LOGIN_REDIRECT_URL))
else:
return super().dispatch(request, *args, **kwargs)def get_initial(self):
return dict(
username=self.user_data['username'],
email=self.user_data['email']
)def login(self, user):
auth_login(self.request, user)
self.request.session.pop('oauth_token', None)
self.request.session.pop('oauth_state', None)@transaction.atomic
def form_valid(self, form):
form.instance.set_unusable_password()
form.instance.auth_id = self.user_data['auth_id']
user = form.save()
self.login(user)
return redirect(resolve_url(settings.LOGIN_REDIRECT_URL))
# ...
```其中`self.user_data`是获取到的用户信息,修改成你的平台提供的信息即可。
## 配置Docker
拉取新的镜像:
```
docker pull php:7.2-fpm-alpine
docker pull php:5.6-fpm-alpine
```如果希望限制容器内tmp文件夹大小,请先创建一个文件系统,步骤如下:
```bash
# 创建一个大小为64M的文件
dd if=/dev/zero bs=1024 count=64000 of=/usr/local/tmpfile# 对文件进行格式化
mkfs.ext4 /usr/local/tmpfile# 建立目录
mkdir /data/tmp# 修改/etc/fstab
vim /etc/fstab
# /usr/local/tmpfile /data/tmp ext4 rw,user,auto,noexec 0 0# 或手工挂载
mount -o loop /usr/local/tmpfile /data/tmp
```然后,配置settings.py:
```python
SANDBOX_ROOT = os.path.join(BASE_DIR, 'media', 'sandbox')
DOCKER_CONFIG = {
'php-5.6': {
'image': 'php:5.6-fpm-alpine',
'container_name': 'conote_php56',
'network_name': 'network_01',
'subnet': '10.233.101.0/24',
'gateway': '10.233.101.254',
'ip': '10.233.101.10',
'tmp': '/data/tmp/php56'
},
'php-7.2': {
'image': 'php:7.2-fpm-alpine',
'container_name': 'conote_php72',
'network_name': 'network_02',
'subnet': '10.233.102.0/24',
'gateway': '10.233.102.254',
'ip': '10.233.102.10',
'tmp': '/data/tmp/php72'
}
}
```Docker启动后,还需要将tmp目录权限修改为0777。
如果不用限制/tmp目录的大小,则无需上述操作,且settings中tmp的值为`None`。
### 下载gvisor
conote利用[gvisor](https://github.com/google/gvisor)来控制沙箱,所以需要下载gvisor的二进制文件并配置docker:
下载二进制文件:`wget https://storage.googleapis.com/gvisor/releases/nightly/latest/runsc -O /usr/local/bin/runsc`,并给其添加可执行权限`chmod +x /usr/local/bin/runsc`,然后修改docker配置文件`/etc/docker/daemon.json`(如果不存在则创建之):
```
{
"runtimes": {
"runsc": {
"path": "/usr/local/bin/runsc"
}
}
}
```最后重启docker即可。
## 配置匿名邮箱与SMTP模块
在DNS服务商处(或conote的DNS配置处),设置MX记录指向服务器IP。
```python
1m6.win. IN MX 5 note.leavesongs.com.
```然后在settings中设置:
```python
O_MAIL_DOMAIN = '1m6.win'
```用`./manage.py mailserver`启动smtp服务器,将监听0.0.0.0:25。
## 运行conote
conote分为4部分:
1. web端
2. dns服务器
3. 后台任务
4. smtp服务器所以需要分成4个服务运行。systemd文件如下:
```
# Conote
[Unit]
Description=Conote web application
After=network.target[Service]
PIDFile=/run/gunicorn/conote.pid
RuntimeDirectory=gunicorn
User=root
Group=root
WorkingDirectory=/home/conote
Restart=always
ExecStart=/bin/bash /home/conote/conote.sh --pid /run/gunicorn/conote.pid
ExecStop=/bin/kill -s TERM $MAINPID[Install]
WantedBy=multi-user.target
``````
# dns server
[Unit]
Description=Conote dns application
After=network.target[Service]
User=root
Group=root
WorkingDirectory=/home/conote
Restart=always
ExecStart=/home/conote/env/bin/python manage.py dnsserver[Install]
WantedBy=multi-user.target
``````
# huey
[Unit]
Description=Conote huey background tasks
After=network.target[Service]
User=root
Group=root
WorkingDirectory=/home/conote
Restart=always
ExecStart=/home/conote/env/bin/python manage.py run_huey[Install]
WantedBy=multi-user.target
``````
# smtpd
[Unit]
Description=Conote email server
After=network.target[Service]
User=root
Group=root
WorkingDirectory=/home/conote
Restart=always
ExecStart=/home/conote/env/bin/python manage.py mailserver[Install]
WantedBy=multi-user.target
```