Python爬虫实战:自动获取SeeBug漏洞库POC脚本
本文介绍使用Python自动抓取SeeBug漏洞库POC文件的实现方法。通过抓包分析发现下载链接规律,利用Queue和Threading模块构建多线程爬虫。重点解决Referer验证及反爬限制,通过设置延时和动态Headers确保请求稳定,最终实现批量下载POC文件。
这里分享一个用于自动抓取www.seebug.org网站上POC(Proof of Concept)文件的简单脚本。
首先,我们需要对目标网站进行基本的抓包分析,以了解其请求机制。
遇到的第一个挑战是SeeBug要求用户登录才能下载POC。解决这个问题相对简单,只需捕获返回状态码为200的页面,并提取其中的Headers信息即可。
此处省略具体的Headers内容,但下文将详细说明Headers中需要修改和注意的关键字段。
headers = {
'Host':******,
'Connection':'close',
'Accept':******,
'User-Agent':******,
'Referer':'https://www.seebug.org/vuldb/ssvid-',
'Accept-Language':'zh-CN,zh;q=0.8',
'Cookie':***********
}
通过上述分析,我们发现Headers中的“Referer”字段是后续需要重点处理的部分。
那么,具体该如何修改这个字段呢?
首先,通过点击下载链接进行抓包,我们发现SeeBug的POC下载链接具有非常整齐的格式:
'https://www.seebug.org/vuldb/downloadPoc/xxxxx',
链接末尾只需添加一个五位数即可,且这五位数是连续编号的。
这意味着逻辑很直观。当我尝试修改这五位数再次发起请求时,并未返回预期的200状态码。检查Header后,发现“Referer”字段存在问题:
'Referer':'https://www.seebug.org/vuldb/ssvid-xxxxx'
也就是说,Referer字段中的五位数也必须随之变化,以匹配下载链接中的编号。这样,我们的GET请求头部构造就完成了。
接下来讨论线程处理的问题。
我们使用了Queue和threading模块进行多线程处理。需要注意的是,不能追求过快的速度,否则容易触发网站的反爬虫机制。
因此,我们导入了time模块并增加time.sleep(1),即每次请求后休眠1秒。线程数设置为2个(虽然这样多线程的优势不明显,但这样编写代码更稳妥)。
# coding=utf-8
import requests
import threading
import Queueimport time
headers = {
******
}
url_download = 'https://www.seebug.org/vuldb/downloadPoc/'
class SeeBugPoc(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self._queue = queue
def run(self):
while not self._queue.empty():
url_download = self._queue.get_nowait()
self.download_file(url_download)
def download_file(self,url_download):
r = requests.get(url = url_download,headers = headers)
print r.status_code
name = url_download.split('/')[-1]
print name
if r.status_code == 200:
f = open('E:/poc/'+name+'.txt','w')
f.write(r.content)
f.close()
print 'it ok!'
else:
print 'what fuck !'
time.sleep(1)
'''
def get_html(self,url):
r = requests.get(url = url,headers = headers)
print r.status_code
print time.time()
'''
def main():
queue = Queue.Queue()
for i in range(93000,93236):
headers['Referer'] = 'https://www.seebug.org/vuldb/ssvid-'+str(i)
queue.put('https://www.seebug.org/vuldb/downloadPoc/'+str(i))
#queue用来存放设计好的url,将他们放入一个队列中,以便后面取用
threads = []
thread_count = 2
for i in range(thread_count):
threads.append(SeeBugPoc(queue))
for i in threads:
i.start()
for i in threads:
i.join()
if __name__ == '__main__':
main()
具体代码如下所示。
通过控制range()函数中的两个五位数参数,用户可以指定想要扫描的POC库的起始和结束编号(即对应的五位数编码)。
关于返回的状态码,如果项目不提供POC下载、POC文件不存在,或者POC需要兑换积分才能下载,则无法返回正常的200状态码(常见的非正常状态码包括404、403、521等)。
当然,如果持续出现521状态码,建议刷新网页重新获取Header,并相应修改代码中的配置。
最后,通过判断状态码,将状态为200的文件保存下来即可。
(
作者自谦代码较为简单,如有不足之处请见谅。
如果发现错误或有任何疑问,欢迎留言讨论。
)
以上就是Python爬虫自动获取SeeBug POC的完整实例分享,希望能对大家有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













