起因
最近要用到fofa爬蟲
,為什么要用爬蟲不用api
,問就是窮,想起來之前寫過一個相關的腳本:Fofa-python-腳本,是很久以前寫的了,之前寫的時候有點問題,昨天重新修改了一下,記錄一下整個過程
關於fofa
在其他大佬博客上摘抄的FOFA簡介及使用教程
FOFA 是白帽匯推出的一款網絡空間搜索引擎,它通過進行網絡空間測繪,能夠幫助研究人員或者企業迅速進行網絡資產匹配,例如進行漏洞影響范圍分析、應用分布統計、應用流行度等。
FOFA 搜索引擎檢索到的內容主要是服務器,數據庫,某個網站管理后台,路由器,交換機,公共ip的打印機,網絡攝像頭,門禁系統,Web服務 ……
FOFA 這類搜索引擎又有另一個名字:網絡空間測繪系統。—— 它們就像是現實生活中的衛星地圖那樣,一點點勾勒出公共網絡空間的樣子,每一個網站、每一台公共環境下的服務器……當一個高危漏洞爆發,FOFA系統便能向衛星定位地址一樣,通過特征迅速找到全網的脆弱設備。
網站:https://fofa.so/ FOFA不僅提供了在線搜索還提供了FOFA Pro客戶端版本
簡單來說就是跟國外的shodan
,國內的ZoomEye
一樣是網絡空間測繪工具
流程
登陸 -> 輸入關鍵字 -> 爬取 -> 保存
登陸
登陸流程比較復雜,為了簡單暴力直接使用cookie
,每次使用時需要在 config.py
文件中修改 cookie
值
此外config.py
里面還存儲了一些全局的配置信息
輸入關鍵字
在頁面輸入我們需要查找的關鍵字,例如 aaa
跳轉網頁為:https://fofa.so/result?q=aaa&qbase64=YWFh&file=&file=
可以看出來qbase64
是關鍵字base64
的編碼,經過測試只需要這兩個關鍵字即可進行搜索
https://fofa.so/result?page=&qbase64=
page
為頁碼,qbase64
為關鍵字的base64編碼
關鍵字轉base64
編碼關鍵代碼如下
searchbs64 = quote(str(base64.b64encode(config.SearchKEY.encode()), encoding='utf-8'))
使用quote
對URL進行編碼,防止出現錯誤
爬取
使用正則表達式顯示該關鍵字在fofa
中一共有多少頁
pagenum = re.findall('>(\d*)</a> <a class="next_page" rel="next"', html)
print("該關鍵字存在頁碼: "+pagenum[0])
先讓用戶確定爬取的開始和結束頁碼
config.StartPage=input("請輸入開始頁碼:\n")
config.StopPage=input("請輸入終止頁碼: \n")
使用xpath
提取頁面url
urllist=tree.xpath('//div[@class="re-domain"]//text()')
urllist = [value.strip('\n').strip(' ').strip('\n') for value in urllist if len(value.strip('\n').strip(' ').strip('\n')) != 0]
print(urllist)
保存
保存在 hello_world.txt
文件中
doc = open("hello_world.txt", "a+")
for i in range(int(config.StartPage),int(pagenum[0])):
print("Now write " + str(i) + " page")
pageurl = requests.get('https://fofa.so/result?page=' + str(i) + '&qbase64=' + searchbs64, headers=config.header)
tree = etree.HTML(pageurl.text)
urllist=tree.xpath('//div[@class="re-domain"]//text()')
urllist = [value.strip('\n').strip(' ').strip('\n') for value in urllist if len(value.strip('\n').strip(' ').strip('\n')) != 0]
print(urllist)
for j in urllist:
print(j)
doc.write(j+"\n")
if i==int(config.StopPage):
break
time.sleep(config.TimeSleep)
doc.close()
完成
END
全部代碼放在 github
上:https://github.com/Cl0udG0d/Fofa-script