使用TP6开发一套渗透测试报告生成系统

安服日常工作,每次客户现场扫描发现漏洞很多,可每次晚上都要加班输出报告。 有时一种类型漏洞较多,写的混,还要重新输入,所以有了开发渗透测试报告生成的想法。 正常思路: 添加项目-》添加资产-》添加漏洞-》导出报表

一、前期准备

1.功能

普通用户:登录、添加项目、添加资产、添加漏洞、添加漏洞类型

管理员:管理用户、项目审核、日志查看、报告模板管理

2.工具

架构: thinkphp6+mysql+PearAdmin+PHPOffice

开发: PHPStorm、Navicat、ApiPost7

二、开发过程

1.API接口

通过Api.php 控制器 调取参数act通过parse_name转换驼峰格式

Route::rule("api/v1/:act","Api/index","POST")->ajax()->pattern(['act' => '.*']);

例如: /api/v1/pte/bug_list

则调用 Pte.php 控制器 bugList方法

Api.php 控制器处理逻辑

<?php
public function index()
{
        $request = request()->param('act');
        $request = explode("/",trim($request,"/"));
        if(count($request) == 1){
            $controller = "Common"; # 默认控制器
            $method = parse_name($request[0],1,false);
        }elseif(count($request) == 2){
            $controller = parse_name($request[0],1,true);
            $method = parse_name($request[1],1,false);
        }else{
            return error("Route not exists.");
        }
        try {
            $controller = 'appapi'.$controller;
            $controllerClass = invoke($controller);
            if (($controllerClass instanceof Base) === false) {
                return error("Extend 'Base' controller.");
            }
        } catch (ClassNotFoundException $e) {
            return error("Controller not exists.");
        }
        if(method_exists($controllerClass,$method)){
            $controllerClass->$method();
        }else{
            return error("Method not exists.");
        }
}
?>

2.漏洞列表

<?php
# fileName: Pte.php
public function bug_list()
{
  	$info = Db::name("pte_list")
            ->where("id",$this->post['id'])
            ->find();
    $info or $this->error("项目信息不存在!");
		$bugType = [
      "Web安全" ,
      "网络传输安全"  ,
      "业务逻辑安全"   ,
      "中间件安全" ,
      "服务器安全"
    ];
    $list = Db::name("pte_bug")
      ->field("id,pte_id,bug_level,bug_type,(select `name` from sf_pte_bug_type where id = bug_type_info) as `bug_info`")
      ->where("is_delete",0)
      ->where("pte_id",$this->post['id'])
      ->order("create_time","DESC")
      ->order("id","DESC")
      ->withAttr("create_time",function ($val) {
          return date("Y-m-d H:i:s",$val);
      })
      ->withAttr("bug_type",function ($val) use( $bugType ) {
          return $bugType[intval($val-1)];
      })
      ->select();
  		return result($list);
}
?>

 

3.生成报告

使用的是PHPWORD框架

使用composer安装框架

# 下载安装程序 
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" 
# 安装composer 
php composer-setup.php 
# 删除安装程序 
php -r "unlink('composer-setup.php');" 
# 移动安装的程序 
sudo mv composer.phar /usr/local/bin/composer 
# 拉取phpword框架(--ignore-platform-reqs 参数是不指定版本的【推荐】) 
composer require --ignore-platform-reqs phpoffice/phpword 
然后直接包含程序就可以了
<?php
    include_once "vendor/autoload.php";
    $doc = new PhpOfficePhpWordTemplateProcessor('../template/pte.docx');
    $doc->setValue('unit_name',"XXX单位");
    $doc->setValue('today_time',"2021-07-06");
    $doc->setValue('project_name',"XXX项目");
    $doc->setValue('todayTime',date("Ymd",time()));
    $doc->setValue('create_user',"Admin");
    $doc->setValue('unit_people',"甲方对接人");
    $doc->setValue('yeMei',date("Ym",time()));
    $doc->setValue('start_time',"2021-07-01");
    $doc->setValue('end_time',"2021-07-06");
?>

创建模板 然后使用框架引入 然后使用变量替换

报告模板

报告模板

漏洞模板

漏洞模板

从 ${FX_BUG_INFO} 到 ${/FX_BUG_INFO} 创建的块 可以根据漏洞数量进行复制

<?php
# 复制块方法
# $bugInfo 变量为从数据库查询出的数据数组
$rows=count($bugInfo);
# 复制块
$doc->cloneBlock('FX_BUG_INFO',$rows, true, true);
for($i=0;$i<$rows;$i++){
    $doc->setValue("fx_bug_type_info#".($i+1),$fx_bug_num_ord.' '.$bugInfo[$i]['type']);
    ........... 
}
?>

三、页面功能

1.登录

使用TP6开发一套渗透测试报告生成系统

2.首页

使用TP6开发一套渗透测试报告生成系统

3.项目列表

使用TP6开发一套渗透测试报告生成系统

4.添加资产

使用TP6开发一套渗透测试报告生成系统

5.漏洞列表

使用TP6开发一套渗透测试报告生成系统

使用TP6开发一套渗透测试报告生成系统

四、已知问题

目前已知的BUG 不能直接生成目录 需要下载后手动更新一下

如果复制块时候发现无法复制时候 复制删除块失效

在开头添加代码(这是个坑 坑了我一下午的时间)

ini_set('pcre.backtrack_limit', 999999999);

五、参考文档

  1. PHPWORD中文手册
  2. PHPWord复制块cloneBlock及删除块deleteBlock无效的解决办法

 

 

 

 

版权声明:
来源:微风飘呀飘
链接:https://www.ti0s.com/30.html
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录