前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >高效率开发Web安全扫描器之路(一)

高效率开发Web安全扫描器之路(一)

原创
作者头像
汤青松
发布于 2022-11-30 03:44:52
发布于 2022-11-30 03:44:52
3870
举报
文章被收录于专栏:PHP技术大全PHP技术大全

一、背景

经常看到一些SRC和CNVD上厉害的大佬提交了很多的漏洞,一直好奇它们怎么能挖到这么多漏洞,开始还以为它们不上班除了睡觉就挖漏洞,后来有机会认识了一些大佬,发现它们大部分漏洞其实是通过工具挖掘的,比如说下面是CNVD上面的白帽子大佬

我想成为大佬要怎么做

我一直觉得自己是一个有梦想的人,我也想有一天自己的ID能出现在排行榜中,于是我凭借着自己那一点开发知识,认真研究了一下市面上的安全工具,以及怎么开发安全工具。

安全工具分析

经过我得研究发现市面上的安全工具其实只有两类,一类是面向某个漏洞的工具比如SQLMap,另外一个一类是综合扫描工具,比如AWVS;

作为一个只想挖漏洞的我,我更偏向于综合型的扫描器开发,可是综合型的扫描器开发难度真的很大,要清晰地了解各种漏洞的原理,而且还需要把他们使用代码去实现,如果是我一个人从头开发我压根做不到啊。

但我并不打算放弃,我准备集结天下之利器,为我扫描器所用;理想是有了,但现实是我要怎么实现,这可真实苦恼了我。

二、 要做的东西

我想要做的扫描器核心目的就是要使用简单,另外就是我可以随心所欲的修改;我希望是我只要给他一个URL地址,它就可以帮我扫描网站的漏洞,以及这个主机本身的漏洞

细致的拆解了一下,我觉得最需要的功能有这几个

  1. 能自动收集URL地址,爬虫收集和爆破收集
  2. 能从URL中提取主机IP
  3. 能快速检测常见的热门POC
  4. 能自动识别网站的指纹信息
  5. 能对IP进行端口快速扫描
  6. 能对端口的banner识别出服务
  7. 能检测出SQL注入漏洞
  8. 能检测出反射性XSS漏洞
  9. 能够通过指纹信息,使用对应的POC工具
  10. 能够快速扩展功能,且不影响整体逻辑

第一版本差不多就是这些功能吧,功能虽然不算多,但如果完全从头开始实现开发时间可不少。

三、思路分析

为了达到高效率的同时又能自主可控,我决定做一个有水平的缝合侠,简单理解就是我要把很多工具巧妙的融入到我开发的工具来,这里需要考虑的第一个问题是每个工具的使用方法、输入的参数、输出的结果都是不一样的,工具A的结果工具B不一定认识。

要解决这个问题,说简单也简单说难也难,总之我是摸着石头过河成功了;原理是自己给每个工具做一个壳,外部要调用工具A需要先调用工具A的壳,然后才会传到工具A,当工具A返回了结果,工具A的壳也会最先拿到,然后将结果解析出来并按照统一的格式输出就可以了。

通过这个简单的办法,我相当于把其他的安全工具变成了我得一个函数,我需要的时候调用这个函数就可以了。

按照我前面提到的需求,我梳理了一下要试用的工具有这几个:

序号

序号

需求

工具

1.

爬去URL的有

RAD

2.

爆破URL的有

DIRMAP

3.

提取主机IP

正则

4.

快速检测热门POC

xray

5.

识别网站的指纹

dismap

6.

对IP端口快速扫描

masscan

7.

能对端口的banner识别出服务

nmap

8.

能检测出SQL注入漏洞

sqlmap

9.

能检测出反射性XSS漏洞

xsser

这些工具都是比较常见的工具,我第一步需要对他们的使用方法熟悉,以xray工具为例

xray的使用命令如下所示

代码语言:txt
AI代码解释
复制
./xray_linux_amd64 webscan --url "http://192.168.1.100/" --json-output /tmp/11.json

当xray执行完毕之后,他会将结果输出到指定位置,但是数据格式并不是我所期望的,我需要将它的格式读入,然后再转换成我所需要的格式。

这里我用PHP写了一个简单的脚本,他做了这几件事情:

  1. 定义了参数来源位置和结果输出位置
  2. 获取参数中的URL,并执行xray工具
  3. 获取xray的执行结果,并解析成自定义格式
  4. 将最终的结果写入到输出位置

代码示例如下所示

代码语言:txt
AI代码解释
复制
<?php
//获取输入的参数
$inputFile = "/data/share/input_".getenv("xflow_node_id").".json";
$outputFile = "/data/share/output_".getenv("xflow_node_id").".json";

//没有input,直接返回
if (!file_exists($inputFile)) {
    var_dump($outputFile, json_encode(['code' => 0, 'msg' => "{$inputFile}文件不存在", 'data' => []], JSON_UNESCAPED_UNICODE));
    return 0;
}
//读取上游数据
$inputData = json_decode(file_get_contents($inputFile), true);

$url = $inputData['url'];
$data = execTool($url);

//将结果写入到指定位置,供蜻蜓平台导入数据
file_put_contents($outputFile, json_encode($data, JSON_UNESCAPED_UNICODE));


//将工具执行
function execTool($url)
{

    $hash = md5($url);
    $resultPath = "/tmp/{$hash}/tool.json";
    //清理之上一轮的结果
    if (file_exists($resultPath)) unlink($resultPath);
    //创建文件夹
    if (!file_exists(dirname($resultPath))) {
        mkdir(dirname($resultPath), 0777, true);
    }

    $result = [];

    $toolPath = "/data/tools/xray";
    if (!file_exists($toolPath)) die("xray 工具目录不存在:{$toolPath}");

    $path = "cd $toolPath && ";
    // 通过系统命令执行工具
    $cmd = "{$path} ./xray_linux_amd64 webscan --url \"{$url}\" --json-output {$resultPath}";
    echo $cmd;
    exec($cmd, $result);

    $toolResult = file_exists($resultPath) ? file_get_contents($resultPath) : '[]';
    $toolResult = json_decode($toolResult, true);
    print_r($toolResult);
    return $toolResult;
}

再来sqlmap封装的例子,首先需要知道sqlmap的使用的方法,如下所示

代码语言:txt
AI代码解释
复制
sqlmap -u "http://192.168.1.100/index.php?id=1"  --batch  --random-agent 

当sqlmap执行完毕之后,我需要知道他的执行结果在什么位置,并将结果解析出来,按照规范化的格式输出到指定地址。

这里我同样用PHP写了一个脚本,做了这几件事情:

  1. 定义了参数来源位置和结果输出位置<?php //获取输入的参数 $inputFile = "/data/share/input_".getenv("xflow_node_id").".json"; $outputFile = "/data/share/output_".getenv("xflow_node_id").".json"; //没有input,直接返回 if (!file_exists($inputFile)) { file_put_contents($outputFile, json_encode([])); return 0; } //读取上游数据 $list = json_decode(file_get_contents($inputFile), true); print_r($inputFile); print_r($list); $data = []; //处理数据 foreach ($list as $val) { $url = $val['url']; $toolPath = "/data/tools/sqlmap/"; print_r("开始扫描URL:{$url}".PHP_EOL); execTool($url, $toolPath); //录入检测结果 $tempList = writeData($toolPath, $url); print_r("扫描URL:{$url}完成".PHP_EOL); print_r($tempList); $data = array_merge($data, $tempList); } print_r($data); //将结果写入到指定位置,供蜻蜓平台导入数据 file_put_contents($outputFile, json_encode($data, JSON_UNESCAPED_UNICODE)); function writeData($toolPath, $url) { $arr = parse_url($url); $file_path = $toolPath . 'result/'; $host = $arr['host']; $outdir = $file_path . "{$host}/"; $outfilename = "{$outdir}/log"; //sqlmap输出异常 if (!is_dir($outdir) or !file_exists($outfilename) or !filesize($outfilename)) { print_r("sqlmap没有找到注入点: $url"); return []; } $ddd = file_get_contents($outfilename); print_r($ddd); exec("rm -rf $outdir"); return [["raw" => $ddd]]; } function execTool($v, $toolPath) { $arr = parse_url($v); $blackExt = ['.js', '.css', '.json', '.png', '.jpg', '.jpeg', '.gif', '.mp3', '.mp4']; //没有可以注入的参数 if (!isset($arr['query']) or (strpos($arr['query'], '=') === false)) { print_r(["URL地址不存在可以注入的参数".PHP_EOL, $v]); return false; } $file_path = $toolPath . 'result/'; $cmd = "cd {$toolPath} && python3 ./sqlmap.py -u '{$v}' --batch --random-agent --output-dir={$file_path}"; exec($cmd); return true; }
  2. 获取参数中的URL,并执行sqlmap工具
  3. 获取sqlmap的执行结果,并解析成自定义格式
  4. 将最终的结果写入到输出位置

通过前面xray和sqlmap两个工具封装的例子,你回发现其实每个工具封装的流程都差不多,差一点只是程序的输出结果解析而已,所以到现在位置我解决了扫描器的能力问题。

四、动手实践

现在只需要我把几个功能连接起来就行了,这里需要考虑一个新的问题;sqlmap所需要的参数确是具体的多个URL地址,也就是说在调用sqlmap之前,我需要把URL都收集好再调用sqlmap,这里就有数据依赖问题。

这个问题也好办,我们需要准备三张表: 目标表、功能依赖表、数据存放表。

目标表

ID

URL

create_time

功能表

ID

tool_name

pre_tool_name

create_time

数据表

ID

tool_name

url

result

create_time

我们可以首先从目标表中获取一个要扫描的目标,然后读取所有的功能,for循环功能表,只需判断当前有没有依赖问题,或者依赖问题已经解决,那么就可以得到所需的依赖数据,直接执行功能即可。

执行完成结果可以在结果页面看见,这里是我的执行结果。

伪代码如下所示:

代码语言:txt
AI代码解释
复制
<?php

$id = getTarget();
$toolLst = getToolList();

foreach($toolList as $val){
    //判断当前工具上级依赖为空或者上级工具已执行 
    if($val['pre_tool_name'] == ''   or  上级工具已经执行){
        //开始使用工具对URL扫描
        scanUrl();
        //保存结果
        svaeResult();
        
    } else(){
        //上级工具还没执行完成,先跳过
        continue;
    }
}

这是我写好的脚本,大家可以简单改改应用,目前我写的脚本已经集成到了蜻蜓安全平台里面,你可以一键复制使用

http://qingting.starcross.cn/scenario/detail?id=1931

目前我已经集成了46常见的款工具,放在GitHub中开源,地址:https://github.com/StarCrossPortal/QingTing


作者:汤青松

日期:2022-11-29

微信:songboy8888

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
必读!2020年Behance图形设计指南出炉
静电说:前一段时间,我们翻译并发布了[译文]重磅!Behance官方最全2020设计趋势 ,12月份Behance再度发力,总结了2020年图形设计的趋势及指南。图形设计指南是对设计趋势的进一步细化和整理,结合Behance上海量的设计作品数据,相信会为你带来帮助。我们特别翻译了这篇Behance图形设计指南for 2020,供大家阅读。
用户5009027
2019/12/17
9670
必读!2020年Behance图形设计指南出炉
[原创译文] 10种帮你改善UI设计质量的窍门
静电说:这几天静电在公众号里做了预告,我们将会花几天时间来翻译国外作者Danny Sapio的一系列文章。前天的不可不知的10条UI设计经验法则 不知道大家有没有从中获得一些启发呢?今天咱们继续:10种帮你改善UI设计质量的窍门。一起来看看吧!
用户5009027
2019/11/15
7430
18个配色(色彩搭配)资源网站——设计师福利
原文出处: 4A广告创意分享 01. Material Palette —— 帮你生成并导出Material Design配色模板 链接地址:http://www.materialpalette
wangxl
2018/03/08
1.6K0
18个配色(色彩搭配)资源网站——设计师福利
2019-2020 设计趋势·图形篇
腾讯ISUX isux.tencent.com 社交用户体验设计 为和大家分享关于设计趋势的见解,ISUX研究了2019-2020的设计趋势。没有必要去遵循年度设计趋势报告,但是否意识到这一趋势,对设计师而言却非常重要。首先我们总结了平面设计的总体趋势,然后是最近延展出来的IP形象,同时也对从Zepeto app 和 Memoji开始的,最近扩展出来的角色设计趋势有所研究,最后则是UX趋势的分析。 ISUX has done a design trend research to shar
腾讯ISUX
2019/05/16
1.1K0
2019-2020 设计趋势·图形篇
干货!UX设计师必知的7条设计法则全解析
作为UI/UX设计师,除了专注视觉效果之外,更应该关注产品的易用性,可访问性以及交互方式。如果你没有遵循这些,那再好的设计也可能会被完全浪费。所以,为了改善咱们的产品,下面列出了7条设计师必知的设计法则,大家要全部理解哦。
用户5009027
2020/05/09
7500
干货!UX设计师必知的7条设计法则全解析
ICLR 2020 | 基于值函数的规划和强化学习的控制架构(视频直播)
本文对 MIT 完成的,被ICLR 2020录用的论文《Harnessing Structures for Value-Based Planning and Reinforcement Learning》进行解读,相关工作已经开源。
AI科技评论
2020/04/20
9120
ICLR 2020 | 基于值函数的规划和强化学习的控制架构(视频直播)
GEE Paper
01.Gainers and losers of surface and terrestrial water resources in China during 1989-2016 (2020)
遥感大数据学习
2022/09/20
3510
GEE Paper
60个设计师必备APP(上)
尽管安卓手机上免费的app极具诱惑力,iPhone仍然是设计圈首选的智能手机。对设计师而言,好用的不仅是最好的iPad app,苹果的Marvel也是相当便利的设计工具。组合使用最好的iPhone app将为创意工作室创造更多可能性-更重要的是,不断超越。
宇相
2018/08/06
9220
60个设计师必备APP(上)
我是个Java开发者,我到底要不要学大数据开发?
一入编程深似海,从此女神是路人。没办法,这行就这样。你不学Spring,总不是跑去学JVM/微服务架构/分布式去了,不断学习根本避免不了。所以关键在于把时间投在学什么上比较划算。
程序猿DD
2019/05/24
7370
2019年UI和UX十大设计趋势
我们仿佛已经达到了工具全面,技术进步。这个时候,能否理解产品和用户如何交互将会起到关键作用。 所以,让我们进入2019年UI和UX设计趋势。(我们也会指出每个趋势中的不足之处,防止被滥用)
mixlab
2019/05/05
5370
2019年UI和UX十大设计趋势
[新] 2020年最佳移动应用UI设计趋势
译者:Winterbure / Violet 原文:Django Stars
用户5009027
2020/06/19
7650
[新] 2020年最佳移动应用UI设计趋势
2020-2021 设计趋势ISUX报告 · 用户体验篇
前言 身为用户体验设计师,无时无刻不被世界上的新事物冲刷着认知——互联网红利下降带来变化莫测的商业动向、循着摩尔定律野蛮生长日新月异的新技术、各类亚文化群体催生出多元复杂的圈层文化、脑洞口味越来越独特的年轻人,甚至眼下席卷全球的黑天鹅事件…… 任何一个新事物的悄悄冒头,都有可能在未知的将来影响着用户体验设计师。我们能做的是,在起初感受到微微震幅时,便沿着震感逐步寻找源头,并思考未来的发展走向。赶在变化降临前先拥抱变化。 本文通过研究近一两年科技、社会文化以及自身用户体验领域的变化,从用户体验
腾讯ISUX
2020/07/03
9930
2019年UI和UX设计趋势
正如从早期的网页设计,到如今的自适应设计,这种思维模式会影响到我们生产的所有事物,而不仅仅是单独产品。我们需要选择更好的设计方式。但尽管如此,我们还是远远没有达到我们未来的目标,下面就让我们进入2019年的UI和UX设计趋势。
晓吾
2020/04/08
4250
2019年UI和UX设计趋势
99%的人都需要:最牛数据分析+Python入门教程资料,不花一分钱,免费领!
程序员作为曾经备受羡慕的高薪群体,如今也面临着“保饭碗”的巨大压力,许多想要入坑的新人也处于观望态势。
乔戈里
2019/11/21
4350
打造设计师的“第二张脸”:25个精选作品集网站赏析
对于设计师来说,作品集不只是实力的最好证明,更是求职时的金牌敲门砖。一份集特色、美观、实用于一体的作品集,往往能在设计师求职过程中发挥重要的作用。如今,越来越多的设计师选择将作品集放在线上,以个人网站的形式展示。那么如何做出一个好的个人作品集网站呢?别着急,小摹为大家精选了25个优秀的作品集网站,一定能让你灵感爆表。
奔跑的小鹿
2022/01/20
1.7K0
打造设计师的“第二张脸”:25个精选作品集网站赏析
2020-2021 设计趋势ISUX报告 · 运营篇
前言 互联网市场环境瞬息万变,在玩法层出不穷的今天,运营活动从来要求创新以及出其不意,以此来实现拉新、促活、回流、营收等产品设计目标,一个个运营活动也在不断塑造品牌认知、提升品牌价值。 与此同时,快速变化的技术也在影响着运营活动的落地实现方式。市场变化背后,自有根源和连接,本文尝试探求变化的脉络,从全局视野观察,形成运营体验设计趋势判断。 我们将运营体验设计归纳为3个大层面:基础层、风格层、策略层,拆解各个层面的模块内容、元素、玩法,从字体、图形、色彩、动效、空间等多个维度出发,同时考虑技术趋势等
腾讯ISUX
2020/07/15
9090
2022年8大色彩趋势新鲜出炉!这些配色方案值得你使用
静电说:近期知名媒体GraphicMama总结了2022年流行的八种配色方案,静电经过翻译分享给大家,希望给大家的UI配色带来帮助。
用户5009027
2022/10/27
9400
2022年8大色彩趋势新鲜出炉!这些配色方案值得你使用
ffplay使用
简单的说,ffplay 是一个使用了 ffmpeg 和 sdl 库的、一个简单的可移植的媒体播放器。
全栈程序员站长
2022/07/04
6220
设计师都在看的全球设计网站,你居然还不知道!
设计师需要拥有无限的创意和熟练的技巧,并且对行业的前景和客户的心理有一定的了解。要能达到“陌生化”之前,肯定是有知识储备,专业能力的前提要求,以及创新能力。
网站小运营
2023/02/22
4290
01.创建型:单例设计模式
创建型:单例设计模式1目录介绍01.单例模式介绍02.单例模式定义03.单例使用场景04.思考几个问题05.为什么要使用单例06.处理资源访问冲突07.表示全局唯一类01.单例模式介绍单例模式是应用最广的模式也是最先知道的一种设计模式,在深入了解单例模式之前,每当遇到如:getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式的实现。单例模式特点构造函数不对外开放,一般为private通过一个静态方法或者枚举返回单例类对象确保单例类的对象有且只有一个,尤其是在多线程的环境下确保单例类对象
杨充
2022/09/07
3760
推荐阅读
相关推荐
必读!2020年Behance图形设计指南出炉
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文