目录
一:背景
最近比较忙,没怎么挖洞,平时我们经常写渗透测试报告,驻场和公司的报告模板又不一样,每次改起来好麻烦,网上也有一些开源的产品,比如0x727的bugreport等,但本着学习java安全的态度,打算自己用纯java开发一个系统,利用下班的时间。经过两个星期终于完成。采用ruoyi-vue前后端分离框架
二:效果
1.管理员首页
管理员,进行用户,菜单的管理,以及首页报表展示
漏洞库管理 添加各种web app漏洞
2.项目管理列表
2.1 项目新增
先添加一个项目,这里主要就是报告的主体信息,选好模板,按照对应的字段填好就行。不同的模板对应不同的字段
3.漏洞管理
当新建好项目之后就可以添加漏洞了
3.1漏洞新增
选择自己的项目,会带出对应的模板,不同的模板,显示对应的输入框和校验条件
漏洞大类选择是web,还是安卓,IOS漏洞
然后漏洞小类会自动带出下面的子类
当我们勾选小类之后,下面的漏洞描述,修复建议,风险等级,则会自动带出来,同时你也可以修改补充,此时我们只需要关注测试漏洞过程就可以
最后我们只要勾选要导出的漏洞,点击导出报告就好,如果选的不是同一个项目的漏洞,还会提示
因为项目已经绑定了模板,所以当我们导出漏洞的时候,系统会自动匹配对应的模板,通过poi-Tl渲染数据生成报告。
4,模板管理
可以增删,改查,没什么说的,
三 总结
后端 基本就是CRUD,没啥麻烦的,麻烦的就是POI-Tl 这个库通过模板生成报告,需要去看看官方的文档,当然也没什么难度官方文档在这里自己看吧
这里简单说明下 测试过程肯定是图文混合的,所以我们要把内容清洗出来
因为ruoyi-vue自带的编辑器文字是<p>包裹,图片是<img>base64的,所以用以下代码把测试过程清洗出来,放到一个List<Map<String, String>> 里
public List<Map<String, String>> clearContent(String content) {
String regex = "<p>(.*?)</p>";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(content);
String regex2 = ".*?<img.*?src=\"data:image/png;base64,(.*?)\"";
List<String> data = new ArrayList<>();
while (matcher.find()) {
data.add(matcher.group(0));
}
List<Map<String, String>> result = new ArrayList<>();
for (String item : data) {
Map<String, String> data2 = new HashMap<>();
// System.out.println(item);
Pattern pattern2 = Pattern.compile(regex2, Pattern.MULTILINE);
Matcher matcher2 = pattern2.matcher(item);
if (matcher2.find()) {
// System.out.println(matcher2.group(1));
data2.put("img", matcher2.group(1));
data2.put("type", "2");
} else {
// System.out.println(item);
data2.put("text", item.replaceAll("<p>", "").replaceAll("</p>", ""));
data2.put("type", "1");
}
result.add(data2);
}
return result;
}
然后取每个漏洞的测试过程,如果是文字就添加文字对象,如果是图片就用
Pictures.ofBase64创建一个图片对象,在设置回给这个漏洞
最后配置config的时候记得把这个listrenderPolicy插件绑定就可以
当然,我们的模板也必须有这个变量,才能正常渲染
如果就搞定了这部分最核心的
反而最麻烦的就是前端了,前端的自控控制,根据
比如根据不同的条件显示字段
根据漏洞大类展示不同的漏洞小类
其他就不一一展示了。