般若安全中心
般若的正确读音是bore,项目名就不改啊
文章
https://www.freebuf.com/sectool/176414.html
https://www.freebuf.com/column/221910.html
fortify设置
由于fortify模板一个漏洞类别默认输出漏洞数目为5,需要将其设置为无限输出。 模板文件可在fortify目录下Core/config/reports找到 修改DeveloperWorkbook.xml里面<title>Results Outline</title>编辑limit="5"为limit="-1"即可
安装教程
该系统环境是python3.6运行的,3.7会显示错误。说一下注意事项,我这个dockerfile里面没有安装mysql,因为centos7的一些问题,mysql我是设置了外连,也就是你只需要在config.json设置MySQL的主机,账号,密码就可以直接使用
演示视频:https://www.bilibili.com/video/av82354379
安装步骤
第一步,你需要将fortify的linux版本复制到和dockerfile同一个目录下(如果想要改名字改路径的,可以到config.json改)
第二步,设置一台mysql服务器,可以是自己虚拟机上面的MySQL,mysql创建一个数据库,我的是banruo,然后将mysql的连接信息在config.json修改
第三步,运行dockerfile就可以进行连接查看。
下面直接dockerfile,假如没有fortify,只是用里面渗透测试系统,可以直接注释掉那段fortify的配置。在banruo目录下有一个config.json文件,里面有所有的配置,在生成docker的时候,把config.json复制出来,修改里面的内容。
#dockerfile
FROM centos:7
COPY fortify_linux /opt/fortify_linux
RUN yum update -y
RUN yum install epel-release -y
RUN yum install -y git wget python36 gcc python36-libs python36-tools python36-devel zlib-devel rpm-build openssl-devel python redis
#django
RUN cd /opt && git clone https://github.com/yingshang/banruo.git
RUN cd /opt/banruo && pip3 install -r requirements.txt
RUN cd /opt/banruo && python3 manage.py makemigrations && python3 manage.py migrate
#这个是fortify的运行程序
RUN mkdir /data && mkdir /data/fortify && mkdir /data/fortify/report && chmod +x /data -R
RUN chmod +x -R /opt/fortify_linux/ && ln -s /opt/fortify_linux/bin/sourceanalyzer /usr/local/bin/sourceanalyzer && ln -s /opt/fortify_linux/bin/ReportGenerator /usr/local/bin/ReportGenerator
#sqlmap
RUN mkdir /opt/taskid
RUN cd /opt && git clone https://github.com/sqlmapproject/sqlmap
RUN ln -s /opt/sqlmap/sqlmapapi.py /usr/bin/sqlmapapi && ln -s /opt/sqlmap/sqlmap.py /usr/bin/sqlmap
#config.json
COPY config.json /opt/banruo/banruo/
#ENTRYPOINT redis-server & && cd /opt/ && python3 manage.py celery -A banruo worker -l info --beat & && python3 manage.py runserver 0.0.0.0:8000
需要添加run.sh运行脚本
#run.sh
redis-server &
cd /opt/banruo && python3 manage.py celery -A banruo worker -l info --beat &
cd /opt/banruo/ && python3 manage.py runserver 0.0.0.0:8000
config.json
{
"setting": {
"MYSQL": {
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_DATABASE": "banruo",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "123456"
},
"SQLMAP": {
"SQLMAP_LIMIT_RUN": 15,
"SQLMAP_DBMS": "",
"SQLMAP_REQUESTFILE_PATH": "/opt/taskid/",
"SQLMAP_VERBOSE": 1,
"SQLMAP_PROXY": "",
"SQLMAP_LEVEL": 5,
"SQLMAP_RISK": 3,
"SQLMAP_THREADS": 1,
"SQLMAP_PARMEXCLUDE": "Host,User-Agent,Accept-Language,Referer,Cookie",
"SQLMAP_PROXYFILE": "",
"SQLMAP_RETRIES": 5,
"SQLMAP_API_SERVER": [
"http://127.0.0.1:55000",
"http://127.0.0.1:55001",
"http://127.0.0.1:55002",
"http://127.0.0.1:55003"
]
},
"PROXY": {
"PROXY_LISTEN_HOST": "0.0.0.0",
"PROXY_LISTEN_PORT": 9999,
"PROXY_LISTEN_MODE": "regular",
"EXCLUDE_STATIC_FILE": [
".js",
".txt",
".mp3",
".css",
".jpg",
".png",
".gif",
".woff",
".ico",
".pdf",
".mp4"
]
},
"FORTIFY": {
"fortify_path": "/data/fortify/",
"report_path": "/data/fortify/report/",
"filter_title": [
"Injection",
"Cross-Site Scripting"
]
},
"GITLAB": {
"GIT_PATH": "/opt/git-list",
"GIT_USERNAME": "[email protected]",
"GIT_PASSWORD": "abc123456",
"GIT_API_CHOICE": 1,
"GIT_ADDRESS": "http://test.com/api.json",
"GIT_PARM": "giturl"
}
"CHANDAO": {
"OPENEDBY": 1,
"PRODUCT_ID": 1,
"CHAODAO_MYSQL_HOST": "192.168.1.210",
"CHAODAO_MYSQL_USER": "root",
"CHAODAO_MYSQL_PASSWORD": "123456",
"CHAODAO_MYSQL_DATABASE": "zendao",
"CHAODAO_MYSQL_PORT": 3306,
"EMAIL_RECEIVERS": [
"[email protected]"
]
},
"EMAIL": {
"MAIL_HOST": "smtp.163.com",
"MAIL_USER": "[email protected]",
"MAIL_PASSWORD": ""
}
}
}
配置说明
- mysql配置(忽略)
- sqlmap配置
- SQLMAP_LIMIT_RUN,限制sqlmap跑的进程数
- SQLMAP_REQUESTFILE_PATH:保存数据包的位置
- SQLMAP_PARMEXCLUDE:排除的参数(level3以上)
- SQLMAP_API_SERVER:连接sqlmapapi,需要多开,因为sqlmap多了之后,一个api服务器跑不动,会死掉
- 代理配置
- EXCLUDE_STATIC_FILE:排除静态文件
- fortify配置
- fortify_path:保存源码位置
- report_path:保存报告的位置
- filter_title:过滤高危的漏洞,比如sql注入,xss
- gitlab配置
- git_api_choice:有两种选择,1,本地文件,里面都写了要扫描的github地址(推荐); 2,接口模式,请求网站获取扫描地址。
- git_address:项目地址列表
- GIT_ADDRESS:模式2,接口地址
- GIT_PARM:模式2,json参数,例如{"giturl":[1,2,3,4]}
- 禅道配置
- OPENEDBY:创建人ID
- PRODUCT_ID:项目的ID
- EMAIL_RECEIVERS:接受禅道提醒的邮箱
- 邮箱配置(忽略)
模拟测试
下载gitlab
docker run -d -p 4443:443 -p 8080:80 -p 2222:22 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab -u root --privileged gitlab/gitlab-ce:latest
下载禅道系统
docker run -it -p 8888:80 --restart always -v /app/zentaopms:/app/zentaopms -v /app/zentao/mysql:/var/lib/mysql -u root --privileged zhuang1125/zendao:11.6.4
下载svn
docker run -d -u root --privileged --restart always -v /srv/SVNRepository:/var/opt/svn -p 3690:3690 garethflowers/svn-server
docker exec -it my-svn-server svnadmin create new-repo
仪表盘
各种图表展示,待完善
代码审计系统
我设计是分四种场景
- 第一种是针对于单个gitlab(github)项目进行扫描审计,只需要输入项目地址,有账号和密码就输入账号和密码。
- 第二种是针对于多个gitlab(github)项目进行扫描审计,有两种扫描选择,一种是选择本地列表,另外一种就是选择接口。
- 第三种是针对svn项目进行扫描审计(不过我几乎没用svn,就没怎么管)
- 第四种是针对压缩包上传进行扫描审计。
可以看到扫描状态和扫描的类型,漏洞数目 点击查看详情就可以看到统计图和漏洞细节 这里面有个风险等级过滤和漏洞标题过滤 下面还有一个已知的问题,就是fortify构建之后,生成的报告目录有问题
有兴趣的人可以试试,用bwapp,https://github.com/raesene/bWAPP 它的源码不在第一层目录下,而是在app目录下,这样会导致最后生成的源码的位置是/opt/data/fortify/bWAPP/test.php,而不是/opt/data/fortify/bWAPP/app/test.php。为什么不解决?因为报告是fortify生成的,假如有两个同名的文件,你怎么知道它是那个目录的?不过最后那边也有路径,所以也无关紧要的 一般情况下,不会出现这种情况的。
运行gitlab系统 进去之后初始化密码,用户是root。 创建一个项目dvwa,往里面导入源码
使用本地文件扫描
[root@1c4e68368d53 banruo]# touch /opt/git-list
[root@1c4e68368d53 banruo]# vim /opt/git-list
[root@1c4e68368d53 banruo]# cat /opt/git-list
http://192.168.17.131:8080/root/dvwa.git
配置文件
"GITLAB": {
"GIT_PATH": "/opt/git-list",
"GIT_USERNAME": "root",
"GIT_PASSWORD": "aA123456",
"GIT_API_CHOICE": 1,
"GIT_ADDRESS": "http://test.com/api.json",
"GIT_PARM": "giturl"
}
接口模式扫描
配置文件
"GITLAB": {
"GIT_PATH": "/opt/git-list",
"GIT_USERNAME": "root",
"GIT_PASSWORD": "aA123456",
"GIT_API_CHOICE": 2,
"GIT_ADDRESS": "http://test.com/api.json",
"GIT_PARM": "giturl"
}
api.json
{"giturl":["http://github.com/dvwa.git"]}
运行禅道系统
https://LOCALHOST_IP:8088
default user/passwd: admin/123456
进入到禅道系统之后,新建一个产品叫安全审计,在项目添加对应的git的项目,添加负责人,可以用一个excel表导入数据库
数据库的配置
将漏洞发送到禅道上面,有个隐藏漏洞功能,就是将漏洞不发送到禅道上面。这里面有个问题,需要在禅道上面有这个项目,比如dvwa这样。
邮件发送功能可以设置定时计划进行发送,提醒开发继续修复漏洞。
配置文件
"CHANDAO": {
"OPENEDBY": 1,
"PRODUCT_ID": 1,
"CHAODAO_MYSQL_HOST": "192.168.17.131",
"CHAODAO_MYSQL_USER": "root",
"CHAODAO_MYSQL_PASSWORD": "123456",
"CHAODAO_MYSQL_DATABASE": "zendao",
"CHAODAO_MYSQL_PORT": 3306,
"CHANDAO_ADDRESS": "http://192.168.17.131:8888",
"EMAIL_RECEIVERS": [
"[email protected]"
]
}
渗透测试系统
①代理抓包 基于mitmproxy==2.0.2,无法用更高级,因为它变成了插件模式。 配置文件,这样的配置,我将监听0.0.0.0:9999,使用的模式是正常的代理模式,还有几种模式跟渗透无关,就没不用了。
"PROXY": {
"PROXY_LISTEN_HOST": "0.0.0.0",
"PROXY_LISTEN_PORT": 9999,
"PROXY_LISTEN_MODE": "regular",
"EXCLUDE_STATIC_FILE": [
".js",
".txt",
".mp3",
".css",
".jpg",
".png",
".gif",
".woff",
".ico",
".pdf",
".mp4"
]
},
在浏览器设置代理之后,就可以随便点击页面,输入数据,下面可以看到已经抓包成功
我设置了两个数据包显示页面,一个是显示全部数据包,一个是过滤重复数据包之后的页面
点击过滤数据包按钮,在过滤数据包一栏可以看到去重之后的数据包
查看数据包选项可以查看完整的数据包
整个数据包处理的流程就到这里,下面你就可以对这些数据包为所欲为。注意停止监听选项无法停止。
可以选择运行状态和漏洞状态
我写了一个更新会话功能,主要面向于两种情况,一种是cookie失效,一种是token失效
注入可以对过滤之后的数据包全部注入测试,也可以只跑没有测试的数据包,还可以选择域名进行测试注入
等到SQLMAP跑完之后,刷新页面就可以看到结果
功能模块
- 代码审计系统
- 单独git扫描
- 接口扫描
- 单独svn扫描
- 压缩包上传扫描
- 对接禅道系统
- 渗透测试系统
- 代理抓包
- 自动化注入
- 自动化xss(待写)
- 越权检测(写了一半)
- 子域名爆破+端口扫描+poc扫描(待写)
- 安全监控系统
- 蜜罐监控+收集样本(写了一半)
- 源代码防泄漏平台(待写)
- 安全资讯系统
- 抓取别人新闻+邮件发送+邮件订阅(待写)