经常看到一些SRC和CNVD上厉害的大佬提交了很多的漏洞,一直好奇它们怎么能挖到这么多漏洞,开始还以为它们不上班除了睡觉就挖漏洞,后来有机会认识了一些大佬,发现它们大部分漏洞其实是通过工具挖掘的,比如说下面是CNVD上面的白帽子大佬
我想成为大佬要怎么做
我一直觉得自己是一个有梦想的人,我也想有一天自己的ID能出现在排行榜中,于是我凭借着自己那一点开发知识,认真研究了一下市面上的安全工具,以及怎么开发安全工具。
经过我得研究发现市面上的安全工具其实只有两类,一类是面向某个漏洞的工具比如SQLMap,另外一个一类是综合扫描工具,比如AWVS;
作为一个只想挖漏洞的我,我更偏向于综合型的扫描器开发,可是综合型的扫描器开发难度真的很大,要清晰地了解各种漏洞的原理,而且还需要把他们使用代码去实现,如果是我一个人从头开发我压根做不到啊。
但我并不打算放弃,我准备集结天下之利器,为我扫描器所用;理想是有了,但现实是我要怎么实现,这可真实苦恼了我。
我想要做的扫描器核心目的就是要使用简单,另外就是我可以随心所欲的修改;我希望是我只要给他一个URL地址,它就可以帮我扫描网站的漏洞,以及这个主机本身的漏洞
细致的拆解了一下,我觉得最需要的功能有这几个
第一版本差不多就是这些功能吧,功能虽然不算多,但如果完全从头开始实现开发时间可不少。
为了达到高效率的同时又能自主可控,我决定做一个有水平的缝合侠,简单理解就是我要把很多工具巧妙的融入到我开发的工具来,这里需要考虑的第一个问题是每个工具的使用方法、输入的参数、输出的结果都是不一样的,工具A的结果工具B不一定认识。
要解决这个问题,说简单也简单说难也难,总之我是摸着石头过河成功了;原理是自己给每个工具做一个壳,外部要调用工具A需要先调用工具A的壳,然后才会传到工具A,当工具A返回了结果,工具A的壳也会最先拿到,然后将结果解析出来并按照统一的格式输出就可以了。
通过这个简单的办法,我相当于把其他的安全工具变成了我得一个函数,我需要的时候调用这个函数就可以了。
按照我前面提到的需求,我梳理了一下要试用的工具有这几个:
序号
这些工具都是比较常见的工具,我第一步需要对他们的使用方法熟悉,以xray工具为例
xray的使用命令如下所示
当xray执行完毕之后,他会将结果输出到指定位置,但是数据格式并不是我所期望的,我需要将它的格式读入,然后再转换成我所需要的格式。
这里我用PHP写了一个简单的脚本,他做了这几件事情:
代码示例如下所示
再来sqlmap封装的例子,首先需要知道sqlmap的使用的方法,如下所示
当sqlmap执行完毕之后,我需要知道他的执行结果在什么位置,并将结果解析出来,按照规范化的格式输出到指定地址。
这里我同样用PHP写了一个脚本,做了这几件事情:
//没有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($data);
//将结果写入到指定位置,供蜻蜓平台导入数据
file_put_contents($outputFile, json_encode($data, JSON_UNESCAPED_UNICODE));
function writeData($toolPath, $url)
{
}
function execTool($v, $toolPath)
{
}
<?php
$id = getTarget();
$toolLst = getToolList();
foreach($toolList as $val){
//判断当前工具上级依赖为空或者上级工具已执行
if($val['pre_tool_name'] == '' or 上级工具已经执行){
//开始使用工具对URL扫描
scanUrl();
//保存结果
svaeResult();
}
```
这是我写好的脚本,大家可以简单改改应用,目前我写的脚本已经集成到了蜻蜓安全平台里面,你可以一键复制使用
http://qingting.starcross.cn/scenario/detail?id=1931
目前我已经集成了46常见的款工具,放在GitHub中开源,地址:https://github.com/StarCrossPortal/QingTing
作者:汤青松
日期:2022-11-29
微信:songboy8888
序号 |
需求 |
工具 |
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_linux_amd64 webscan
-
-
url
"http://192.168.1.100/"
-
-
json
-
output
/
tmp
/
11.json
.
/
xray_linux_amd64 webscan
-
-
url
"http://192.168.1.100/"
-
-
json
-
output
/
tmp
/
11.json
<?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;
}
<?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
-
u
"http://192.168.1.100/index.php?id=1"
-
-
batch
-
-
random
-
agent
sqlmap
-
u
"http://192.168.1.100/index.php?id=1"
-
-
batch
-
-
random
-
agent
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(
"开始扫描URL:{$url}"
.PHP_EOL);
execTool($url, $toolPath);
/
/
录入检测结果
$tempList
=
writeData($toolPath, $url);
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!