前言
每次公司出去做渗透测试,我每次日内网日的都很爽。写报告的时候一直喷自己妈的挖这么多写的好累。
于是想到了使用一个框架,通过接口方法引用phpword把要写的东西放到模版里,这样又省力又简单(真的很讨厌office)。
所以我的期望是,通过前端的表单,把漏洞名称、漏洞详情、修复方法设置成键值对,然后变成变量引入模版中。之后就是省时省力的下载表格发给公司了。然后申请个软著薅公司羊毛。
开始写
现在在上c#的课程,实在听不懂,所以开始写吧。
我这里使用的框架是phpword,根据网上的代码 先测试一遍文件是否有问题
<?php include_once "vendor/autoload.php"; $tmp=new \PhpOffice\PhpWord\TemplateProcessor('a.docx');//打开模板 $tmp->setValue('name','XX教育局');//替换变量 $tmp->setValue('author','小北');//替换变量 // $tmp->setImageValue('picture', ['path' => '1.png','width'=>500,'height'=>500]);//添加图片 $tmp->saveAs('b.docx');//另存为
生成后打开word 发现成功覆盖了变量
之后学习块复制和行复制的有关知识 成功覆盖
类似:
代码如下:
<?php include_once "vendor/autoload.php"; $tmp=new \PhpOffice\PhpWord\TemplateProcessor('a.docx');//打开模板 $tmp->setValue('name','教育局');//替换变量 $tmp->setValue('author','小北');//替换变量 $tmp->setValue('write_time','2021-03-08');//替换变量 $tmp->setValue('objectlist','*');//替换变量 $tmp->setValue('testtime','*');//替换变量 $tmp->setValue('buglevel','高危');//替换变量 $arr=[ ['bug'=>'漏洞1','bug_num'=>'3'], ['bug'=>'漏洞2','bug_num'=>'1'], ['bug'=>'漏洞3','bug_num'=>'1'], ]; $rows=count($arr);//总行数 $tmp->cloneRow('bug',$rows);//复制行 for($i=0;$i<$rows;$i++){ $tmp->setValue("bug#".($i+1),$arr[$i]['bug']);//替换变量 $tmp->setValue("bug_num#".($i+1),$arr[$i]['bug_num']); } $tmp->cloneBlock('WIN_BLOCK',$rows,true,true); for($i=0;$i<$rows;$i++){ $tmp->setValue('bug_name#'.($i+1),$arr[$i]['bug']); $tmp->setValue('bug_detail#'.($i+1),$arr[$i]['bug']); $tmp->setValue('bug_fix#'.($i+1),$arr[$i]['bug']); } // $tmp->setImageValue('picture', ['path' => '1.png','width'=>500,'height'=>500]);//添加图片 $tmp->saveAs('b.docx');//另存为
差不多学习了一遍前端的表单
这里使用layui 作为我们的提交表单 通过表单传递json数据给接口 接口判断值是否不空后循环赋值
这里考虑到漏洞细节的多样性 无法定死 所以删掉漏洞细节的变量 仅仅产生一个除了漏洞细节以外全部都编辑好的word文档 这样也可以省去很多的时间
表单类似
继续开发 开发完补充
回来了~
随便写了个layui的表单
考虑到漏洞不唯一 所以需要动态增加内容 也就是使用js监听点击按钮 点击后追加html代码 然后局部刷新table
最终的效果类似
表单提交
接口解析json
word生成
下载内容后清空文件(可以写个定时的任务清空某目录内容,最好两分钟一删)
继续写前端了
各种学习js 妈的真后悔以前没有好好学js
面向百度编程 总算搞明白js一点了
耗时一晚上才解决 其实最麻烦的是 通过table把动态生成的记录变成数组 然后变成对象 因为我不会
他妈的一直没有搞明白 最后通过下面的代码实现了 大致意思就是通过tables元素逐个获取tr的值
form.on('submit(demo1)', function(data){ var trs = $("#tables tr"); var resultbug = []; for (var i = 1; i < trs.length; i++) { var tds = $(trs[i]).find("td"); var databug={}; databug['name']=tds[0].getElementsByTagName("input")[0].value; databug['bugtype']=tds[1].getElementsByTagName("input")[0].value; databug['bugnum']=tds[2].getElementsByTagName("input")[0].value; databug['bugfix']=tds[3].getElementsByTagName("input")[0].value; resultbug.push(databug); } var arr1 = [] for (let i in data.field) { let o = {}; o = data.field[i]; arr1.push(o) } var arr2 = [] for (let i in resultbug) { let o = {}; o = resultbug[i]; arr2.push(o) }
这个写完了的话,后端开发就容易多了。
也就是设置变量然后更改 测试了一晚上 非常疲惫 可以看到 下载了十八次的docx
但是最终还是做完了 非常方便
剩下的就是照猫画虎 根据大致的代码拓展diy
然后就是设置生成目录 做个脚本两分钟rm一次 防止文档外泄
后记
感谢一些朋友给我的帮助,也补充了一些对象、数组、json之间转换的知识点。
果然编程可以改变世界,写了一天了!又多了一个自己的开发成果,开心~