0x00 简介
今天就分享一下公益SRC漏洞的批量挖掘的技巧和所要用到的一些相关的工具和脚本出来和各位师傅交流一下,不足之处还希望师傅们多多指教。
0x01 国内的一些公益src漏洞平台
漏洞盒子:https:
//www.vulbox.com
补天漏洞响应平台:https:
//www.butian.net
CNNVD
信息安全漏洞库:https:
//www.cnnvd.org.cn
教育漏洞提交平台:https:
//src.sjtu.edu.cn
漏洞盒子:
奖励:中等,奖励的话有现金还有积分,积分可以在商城内兑换礼物
通过门槛:门槛比较低,只要是漏洞都收,没有权重或者公司的一些要求,审核不是很严格,刚入门的师傅可以提交到漏洞盒子,练练手,积累一下经验和技巧
审核速度:一般吧,有时候快有时候慢
补天漏洞响应平台:
奖励:中等,可以给现金和kb,kb可以兑换实物奖励
通过门槛:高,需要收录移动百度权重大于等于1或者百度pc权重大于等于1或者谷歌权重大于等于3的网站,edu和gov的站不需要权重
审核速度:快
CNNVD信息安全漏洞库:
奖品:高,可以给你证书
通过门槛:极高,不仅仅要看权重,而且还要看公司的注册资金,好像是通用型的漏洞,厂商注册资金要超过五千万,而且还不能只提交一个,要提交十个案例才可以
审核速度:一般
教育漏洞提交平台:
奖品:高,有大学专门给的证书,和一些礼品
通过门槛:高,必须要edu和教育相关的网站,例如说大学,中学,高中这些
审核速度:一般
这里只列举最简单并且比较知名的一些公益src提交平台,还有一些其他的公益src提交平台,就不一一列举了
0x02 前期的准备工作
一些在线的搜索引擎网站:
(一)资产测绘引擎
fofa资产测绘引擎:
https:
/
/fofa.info/
鹰图资产测绘引擎:
https:
/
/hunter.qianxin.com/
shodan资产测绘引擎:
https:
/
/www.shodan.io/
360
资产测绘引擎:
https:
/
/quake.360.net/
零零信安资产测绘引擎:
https:
/
/0.zone/
谷歌hacker语法:
https:
/
/codeleading.com/article
/8526777820/
以上的搜索引擎网站都是用来收集目标网站信息的一些网络空间资产测绘,可以帮助我们快速的定位到目标的资产,批量获取url进行漏洞挖掘
(二)企业信息查询
爱企查:https:
//aiqicha.baidu.com
天眼查:https:
//www.tianyancha.com
企查查:https:
//www.qcc.com
小蓝本:https:
//www.xiaolanben.com
以上的网站是为了查询网站所属的企业的一些信息,为了方便在提交漏洞的时候填写详细联系方式和公司的地址
(三)域名信息查询
爱站:https:
//www.aizhan.com
站长工具:https:
//tool.chinaz.com
以上的网站是为了查询网站备案信息、网站权重信息、网站的ip信息等
(四)保持一个良好的心态
一个好的心态,和一个灵活的脑袋,心态很重要,保持一个良好的心态,挖洞的时候细心一点,不怕漏洞挖不到。正所谓心细则能挖天下!!!
一些工具和漏洞库
漏洞库
佩奇漏洞文库:
https:
//www
.yuque.com/peiqiwiki/peiqi-poc-wiki
http:
//wiki
.peiqi.tech/
白阁漏洞文库:
https:
//wiki
.bylibrary.cn/%E6%BC%8F%E6%B4%9E%E5%BA%93/
01
-CMS%E6%BC%8F%E6%B4%9E/ActiveMQ/ActiveMQ%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E/
狼组安全团队公开知识库:
https:
//wiki
.wgpsec.org/knowledge/
Morker文库:
https:
//wiki
.
96
.mk/
风炫漏洞库:
https:
//evalshell
.com/
exploit-db漏洞库:
https:
//www
.exploit-db.com/
工具
fofax
fofa_viewer
nuclei
httpx
ip2domain
0x03 批量漏洞挖掘
在线文库查询
使用在线的漏洞文库收集nday或者1day的漏洞payload对网站批量进行漏洞挖掘。用佩奇或者白阁的都可以,只要能找到poc就可以
佩奇文库
白阁文库
这里的话就使用佩奇文库来进行演示,访问漏洞文库,获取对应的语句:
使用上边提到过的网络空间测绘搜索引擎来查找对应的资产,可以使用fofa,shodan,360quake,奇安信hunter,零零信安等测绘引擎搜索相关资产。我比较喜欢用fofa。
一般像OA这种系统框架都是有着清晰的指纹标识,方便从空间搜索引擎中批量寻找到目标,根据产品的漏洞来获取这个产品的资产然后进行批量的测试
使用语句定位到产品,然后就可以看到这些相关的资产。这里随便找一个网站看看是否为我们想要的
注意:任何未授权的测试都要点到为止,表明出漏洞的危害就好了,再往下就不礼貌了。
使用工具批量收集对应的资产网站
fofax:https://github.com/xiecat/fofax
在通过fofa空间测绘搜索引擎搜集到相关资产的时候,这个时候需要把资产给保存下来,进行下一步的操作,我们可以通过fofax或者fofa_viewer工具来将我们刚刚在fofa搜索到的资产进行导出
fofa_viewer:https://github.com/wgpsec/fofa_viewer
同理,通过fofa_viewer进行资产获取,将我们刚刚在fofa搜索到的资产进行导出
批量探测网站存活状态
使用工具httpx对上面收集到的url做一个存活验证,首先筛选出存活的url来,然后再进行测试,不然会浪费我们很多时间,这里我们使用httpx把存活的url保存到文件中
httpx.exe -timeout 15 -l fanwei.txt -o result.txt -mc 200
批量测试漏洞
根据泛微OA E-Cology BshServlet 远程代码执行漏洞漏洞命令执行的特征,我们简单写一个多线程检测脚本
from
os
import
O_EXCL
import
requests
import
threading
def
POC_1
(target_url,ss)
:
vuln_url = target_url +
r"/weaver/bsh.servlet.BshServlet"
headers = {
"User-Agent"
:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
,
"Content-Type"
:
"application/x-www-form-urlencoded"
,
}
try
:
response = requests.get(url=vuln_url, headers=headers, timeout=
5
,verify=
False
)
if
response.status_code ==
200
and
"BeanShell Test"
in
response.text:
with
open(
"存在漏洞的url.txt"
,
'a'
, encoding=
'UTF-8'
)
as
f:
print(
"�33[32m[o] 目标{}存在漏洞"
.format(target_url))
f.write(vuln_url +
"n"
)
else
:
print(
"�33[31m[x] 目标不存在漏洞"
)
except
Exception
as
e:
print(
"�33[31m[x] 请求失败"
, e)
with
open(
"fanwei.txt"
,
"r"
,encoding=
'UTF-8'
)
as
f:
for
i
in
f.readlines():
ss = i.replace(
'n'
,
''
)
ip = i.replace(
'n'
,
''
)
threading.Thread(target=POC_1,args=(ip,ss)).start()
这是运行完脚本之后得到的所有存在漏洞站点的txt文件
随便拿一个验证一下是否真的存在漏洞
也可以使用佩奇文库给的poc批量测试
拿到有漏洞的url之后,我们需要处理一下这些数据,大概一个思路就是:
漏洞url
->根据url(因为有些网站是ip站)反查域名
->根据域名反查域名权重
->根据有权重的域名反查域名备案名称
->根据备案名称查询公司的基本信息,例如公司的所在地方和行业等等,这里下边会提到,请听我娓娓道来。
0x04 域名和权重和公司的批量检测
在提交补天或者其他漏洞平台的时候,可以发现平台会有提到这么一个提交漏洞的规则,那就是公益src的漏洞网站的主站权重需要达到指定的权重值才会收录,那么什么是权重值呢,网站权重是指搜索引擎给网站(包括网页)赋予一定的权威值,对网站(含网页)权威的评估评价。一个网站权重越高,在搜索引擎所占的份量越大,在搜索引擎排名就越好。补天的话是要百度移动权重大于等于1或者百度pc权重大于等于1,或者谷歌权重大于等于3,权重信息以爱站检测为准
爱站:https://rank.aizhan.com/
我们需要对上边收集过来的存在漏洞的url列表去做一个根据ip反查域名,然后域名反查权重这样一个功能,python大法好,学python得永生,这里使用python编写一个根据ip反查域名然后域名反查权重的功能。因为有些是ip站,要想查权重,就要查到ip所对应的域名,所以我们需要一个ip反查域名这么功能的脚本
#-- coding:UTF-8 --
import
re, time
from
urllib.parse
import
urlparse
import
requests
from
fake_useragent
import
UserAgent
from
tqdm
import
tqdm
import
os
# 爱站
def
aizhan_chaxun
(ip, ua)
:
aizhan_headers = {
'Host'
:
'dns.aizhan.com'
,
'User-Agent'
: ua.random,
'Accept'
:
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
,
'Accept-Language'
:
'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'
,
'Accept-Encoding'
:
'gzip, deflate, br'
,
'Referer'
:
'https://dns.aizhan.com/'
}
aizhan_url =
'https://dns.aizhan.com/'
+ str(ip) +
'/'
try
:
aizhan_r = requests.get(url=aizhan_url, headers=aizhan_headers, timeout=
2
).text
aizhan_nums = re.findall(
r'''<span class="red">(.*?)</span>'''
, aizhan_r)
if
int(aizhan_nums[
0
]) >
0
:
aizhan_domains = re.findall(
r'''rel="nofollow" target="_blank">(.*?)</a>'''
, aizhan_r)
return
aizhan_domains
except
:
pass
def
catch_result
(i)
:
ua_header = UserAgent()
i = i.strip()
if
"http://"
not
in
i:
i=
"http://"
+i
try
:
ip = urlparse(i).netloc
aizhan_result = aizhan_chaxun(ip, ua_header)
time.sleep(
1
)
if
(aizhan_result !=
None
):
with
open(
"ip反查结果.txt"
,
'a'
)
as
f:
result =
":"
+ i +
" "
+
" [aizhan]:"
+ str(aizhan_result[
0
])
print(result)
f.write(result +
"n"
)
else
:
with
open(
"反查失败列表.txt"
,
'a'
)
as
f:
f.write(i +
"n"
)
except
:
pass
if
__name__ ==
'__main__'
:
url_list = open(
"待ip反查.txt"
,
'r'
).readlines()
url_len = len(open(
"待ip反查.txt"
,
'r'
).readlines())
#每次启动时清空两个txt文件
if
os.path.exists(
"反查失败列表.txt"
):
f = open(
"反查失败列表.txt"
,
'w'
)
f.truncate()
if
os.path.exists(
"ip反查结果.txt"
):
f = open(
"ip反查结果.txt"
,
'w'
)
f.truncate()
for
i
in
tqdm(url_list):
catch_result(i)
将前边收集到的存在漏洞的url存到一个叫待ip反查.txt的文件里,然后运行脚本
运行结果:
然后拿到解析的域名后,继续对域名权重进行检测,这里采用爱站来进行权重检测,这里是一个批量检测权重的脚本
# -- coding:UTF-8 --
import
requests
import
re
import
getopt
import
sys
import
threadpool
import
urllib.parse
import
urllib.request
import
ssl
from
urllib.error
import
HTTPError,URLError
import
time
ssl._create_default_https_context = ssl._create_stdlib_context
headers={
'Host'
:
'baidurank.aizhan.com'
,
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
,
'Sec-Fetch-Dest'
:
'document'
,
'Accept'
:
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
,
'Cookie'
:
''
}
def
google_simple
(url, j)
:
google_pc =
"https://pr.aizhan.com/{}/"
.format(url)
bz =
0
http_or_find =
0
try
:
response = requests.get(google_pc, timeout=
10
).text
http_or_find =
1
result_pc = re.findall(re.compile(
r'<span>谷歌PR:</span><a>(.*?)/></a>'
), response)[
0
]
result_num = result_pc.split(
'alt="'
)[
1
].split(
'"'
)[
0
].strip()
if
int(result_num) >
0
:
bz =
1
result =
'[+] 谷歌权重:'
+ result_num +
' '
+ j
return
result, bz
except
:
if
(http_or_find !=
0
):
result =
"[!]格式错误:"
+
"j"
return
result, bz
else
:
time.sleep(
3
)
return
google_simple(url, j)
def
getPc
(domain)
:
aizhan_pc =
'https://baidurank.aizhan.com/api/br?domain={}&style=text'
.format(domain)
try
:
req = urllib.request.Request(aizhan_pc, headers=headers)
response = urllib.request.urlopen(req,timeout=
10
)
b = response.read()
a = b.decode(
"utf8"
)
result_pc = re.findall(re.compile(
r'>(.*?)</a>'
),a)
pc = result_pc[
0
]
except
HTTPError
as
u:
time.sleep(
3
)
return
getPc(domain)
return
pc
def
getMobile
(domain)
:
aizhan_pc =
'https://baidurank.aizhan.com/api/mbr?domain={}&style=text'
.format(domain)
try
:
# b = requests.post(url=post_url,headers=headers, proxies=proxy, timeout = 7)
# res = urllib.request.urlopen(aizhan_pc,timeout=10)
# # res = opener.open(aizhan_pc,timeout=10)
# a = res.read().decode('UTF-8')
req = urllib.request.Request(aizhan_pc, headers=headers)
response = urllib.request.urlopen(req,timeout=
10
)
b = response.read()
a = b.decode(
"utf8"
)
result_m = re.findall(re.compile(
r'>(.*?)</a>'
),a)
mobile = result_m[
0
]
except
HTTPError
as
u:
time.sleep(
3
)
return
getMobile(domain)
return
mobile
# 权重查询
def
seo
(name,url)
:
try
:
result_pc = getPc(name)
result_mobile = getMobile(name)
except
Exception
as
u:
# print(u)
result_pc =
'0'
result_mobile =
'0'
print(
'[- 目标{}获取权重失败,自动设为0'
.format(url))
# print('运行正常')
print(
'[+ 百度权重:'
+result_pc+
' 移动权重:'
+result_mobile+
' Url:'
+url)
with
open(
'vul.txt'
,
'a'
,encoding=
'utf-8'
)
as
y:
y.write(
'[百度权重:'
+result_pc+
','
+
"移动权重:"
+result_mobile+
','
+url+
']'
+
'n'
)
return
True
def
exp
(name1)
:
# opts, args = getopt.getopt(sys.argv[1:], '-u:-r:', ['url', 'read'])
# print(name1)
try
:
name = name1[name1.rfind(
'/'
):].strip(
'/'
)
# print(name)
rew = seo(name,name1)
except
Exception
as
u:
# except:
print(u)
print(
'[- 目标{}检测失败,已写入fail.txt等待重新检测'
.format(name1))
# file_fail.write(name1+'n')
with
open(
'fail.txt'
,mode=
'a'
,encoding=
'utf-8'
)
as
o:
o.write(name1+
'n'
)
def
multithreading
(funcname, params=[], filename=
"ip.txt"
, pools=
15
)
:
works = []
with
open(filename,
"r"
)
as
f:
for
i
in
f:
func_params = [i.rstrip(
"n"
)] + params
works.append((func_params,
None
))
pool = threadpool.ThreadPool(pools)
reqs = threadpool.makeRequests(funcname, works)
[pool.putRequest(req)
for
req
in
reqs]
pool.wait()
def
main
()
:
multithreading(exp, [],
"存在漏洞的url.txt"
,
15
)
# 默认15线程
print(
"全部check完毕,请查看当前目录下的vul.txt"
)
if
__name__ ==
"__main__"
:
# st = False
# main(st)
main()
结果:
然后拿着有权重的站,批量根据域名反查备案名称,这里推荐使用一个工具叫ip2domain,该工具可用于对跑到的ip批量查询域名及百度权重、备案信息,快速确定ip所属企业,方便提交漏洞。
工具链接:https://github.com/Sma11New/ip2domain
然后批量查询域名的备案公司
python ip2domain.py -f 存在漏洞的url.txt -t 10 --icp -o 根据域名反查厂商.txt
参数解析:-f 是指定批量查询的文件 -o是查询后的结果保存的文件名 -t是超时时间 --icp是查询网站对应的备案公司名
拿到公司名之后就可以提交漏洞了吗?并不是,这里还有最后一步,那就是,根据公司名去查找公司的基本工商信息,例如说:注册公司的所在地区,所属行业等等,因为提交漏洞的时候需要填写这些信息
所以我们要根据公司名反查公司的所在地区和所属行业等信息,这里推荐企查查或者天眼查
企查查:
天眼查:
从网站中就可以看到公司的基本信息,如注册资金,所属行业,所属地区等信息
然后反查完就可以拿到公益src平台进行提交,有权重的可以交补天漏洞响应平台,没有权重的可以交漏洞盒子
|
原文始发于微信公众号(WK安全):SRC漏洞挖掘上分技巧
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论