python實(shí)現(xiàn)web郵箱掃描的示例(附源碼)
信息收集是進(jìn)行滲透測(cè)試的關(guān)鍵部分,掌握大量的信息對(duì)于攻擊者來(lái)說(shuō)是一件非常重要的事情,比如,我們知道一個(gè)服務(wù)器的版本信息,我們就可以利用該服務(wù)器框架的相關(guān)漏洞對(duì)該服務(wù)器進(jìn)行測(cè)試。那么如果我們掌握了該服務(wù)器的管理員的郵箱地址,我們就可以展開(kāi)一個(gè)釣魚(yú)攻擊。所以,對(duì)web站點(diǎn)進(jìn)行郵箱掃描,是進(jìn)行釣魚(yú)攻擊的一種前提條件。
下面,我們利用python腳本來(lái)實(shí)現(xiàn)一個(gè)web站點(diǎn)的郵箱掃描爬取。目的是在實(shí)現(xiàn)這個(gè)腳本的過(guò)程中對(duì)python進(jìn)行學(xué)習(xí)
最后有完整代碼
基本思路
- 我們向工具傳入目標(biāo)站點(diǎn)之后,首先要對(duì)輸入進(jìn)行一個(gè)基本的檢查和分析,因?yàn)槲覀儠?huì)可能會(huì)傳入各種樣式的地址,比如http://www.xxxx.com/、http://www.xxxx.com/123/456/789.html等等,我們需要對(duì)其進(jìn)行簡(jiǎn)單的拆分,以便于后面鏈接的爬取
- 通過(guò)requests庫(kù)爬取目標(biāo)地址的內(nèi)容,并且在內(nèi)容通過(guò)正則表達(dá)式中尋找郵箱地址
- 查找爬取的網(wǎng)站中的超鏈接,通過(guò)這些超鏈接我們就能進(jìn)入到該站點(diǎn)的另外一個(gè)頁(yè)面繼續(xù)尋找我們想要的郵箱地址。
- 開(kāi)工:
該腳本所需要的一些庫(kù)
from bs4 import BeautifulSoup #BeautifulSoup最主要的功能是從網(wǎng)頁(yè)抓取數(shù)據(jù),Beautiful Soup自動(dòng)將輸入文檔轉(zhuǎn)換為Unicode編碼 import requests #requests是python實(shí)現(xiàn)的最簡(jiǎn)單易用的HTTP庫(kù) import requests.exceptions import urllib.parse from collections import deque #deque 是一個(gè)雙端隊(duì)列, 如果要經(jīng)常從兩端append 的數(shù)據(jù), 選擇這個(gè)數(shù)據(jù)結(jié)構(gòu)就比較好了, 如果要實(shí)現(xiàn)隨機(jī)訪問(wèn),不建議用這個(gè),請(qǐng)用列表. import re #是一個(gè)正則表達(dá)式的庫(kù)
獲取掃描目標(biāo)
user_url=str(input('[+] Enter Target URL to Scan:')) urls =deque([user_url]) #把目標(biāo)地址放入deque對(duì)象列表 scraped_urls= set()#set() 函數(shù)創(chuàng)建一個(gè)無(wú)序不重復(fù)元素集,可進(jìn)行關(guān)系測(cè)試,刪除重復(fù)數(shù)據(jù),還可以計(jì)算交集、差集、并集等。 emails = set()
對(duì)網(wǎng)頁(yè)進(jìn)行郵箱地址爬取(100條)
首先要對(duì)目標(biāo)地址進(jìn)行分析,拆分目標(biāo)地址的協(xié)議,域名以及路徑。然后利用requests的get方法訪問(wèn)網(wǎng)頁(yè),通過(guò)正則表達(dá)式過(guò)濾出是郵箱地址的內(nèi)容。'[a-z0-0.-+]+@[a-z0-9.-+]+.[a-z]+',符合郵箱格式的內(nèi)容就進(jìn)行收錄。
count=0 try: while len(urls): #如果urls有長(zhǎng)度的話進(jìn)行循環(huán) count += 1 #添加計(jì)數(shù)器來(lái)記錄爬取鏈接的條數(shù) if count ==101: break url = urls.popleft() #popleft()會(huì)刪除urls里左邊第一條數(shù)據(jù)并傳給url scraped_urls.add(url) parts = urllib.parse.urlsplit(url) # 打印 parts會(huì)顯示:SplitResult(scheme='http', netloc='www.baidu.com', path='', query='', fragment='') base_url = '{0.scheme}://{0.netloc}'.format(parts)#scheme:協(xié)議;netloc:域名 path = url[:url.rfind('/')+1] if '/' in parts.path else url#提取路徑 print('[%d] Processing %s' % (count,url)) try: head = {'User-Agent':"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11"} response = requests.get(url,headers = head) except(requests.exceptions.MissingSchema,requests.exceptions.ConnectionError): continue new_emails = set(re.findall(r'[a-z0-0\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+', response.text ,re.I))#通過(guò)正則表達(dá)式從獲取的網(wǎng)頁(yè)中提取郵箱,re.I表示忽略大小寫(xiě) emails.update(new_emails)#將獲取的郵箱地址存在emalis中。
通過(guò)錨點(diǎn)進(jìn)入下一網(wǎng)頁(yè)繼續(xù)搜索
soup = BeautifulSoup(response.text, features='lxml') for anchor in soup.find_all('a'): #尋找錨點(diǎn)。在html中,<a>標(biāo)簽代表一個(gè)超鏈接,herf屬性就是鏈接地址 link = anchor.attrs['href'] if 'href' in anchor.attrs else '' #如果,我們找到一個(gè)超鏈接標(biāo)簽,并且該標(biāo)簽有herf屬性,那么herf后面的地址就是我們需要錨點(diǎn)鏈接。 if link.startswith('/'):#如果該鏈接以/開(kāi)頭,那它只是一個(gè)路徑,我們就需要加上協(xié)議和域名,base_url就是剛才分離出來(lái)的協(xié)議+域名 link = base_url + link elif not link.startswith('http'):#如果不是以/和http開(kāi)頭的話,就要加上路徑。 link =path + link if not link in urls and not link in scraped_urls:#如果該鏈接在之前沒(méi)還有被收錄的話,就把該鏈接進(jìn)行收錄。 urls.append(link) except KeyboardInterrupt: print('[+] Closing') for mail in emails: print(mail)
完整代碼
from bs4 import BeautifulSoup import requests import requests.exceptions import urllib.parse from collections import deque import re user_url=str(input('[+] Enter Target URL to Scan:')) urls =deque([user_url]) scraped_urls= set() emails = set() count=0 try: while len(urls): count += 1 if count ==100: break url = urls.popleft() scraped_urls.add(url) parts = urllib.parse.urlsplit(url) base_url = '{0.scheme}://{0.netloc}'.format(parts) path = url[:url.rfind('/')+1] if '/' in parts.path else url print('[%d] Processing %s' % (count,url)) try: head = {'User-Agent':"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11"} response = requests.get(url,headers = head) except(requests.exceptions.MissingSchema,requests.exceptions.ConnectionError): continue new_emails = set(re.findall(r'[a-z0-0\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+', response.text ,re.I)) emails.update(new_emails) soup = BeautifulSoup(response.text, features='lxml') for anchor in soup.find_all('a'): link = anchor.attrs['href'] if 'href' in anchor.attrs else '' if link.startswith('/'): link = base_url + link elif not link.startswith('http'): link =path + link if not link in urls and not link in scraped_urls: urls.append(link) except KeyboardInterrupt: print('[+] Closing') for mail in emails: print(mail)
實(shí)驗(yàn)………………
以上就是python實(shí)現(xiàn)web郵箱掃描的示例(附源碼)的詳細(xì)內(nèi)容,更多關(guān)于python web郵箱掃描的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python中使用iterrows()對(duì)dataframe進(jìn)行遍歷的實(shí)例
今天小編就為大家分享一篇python中使用iterrows()對(duì)dataframe進(jìn)行遍歷的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06PyTorch?TensorFlow機(jī)器學(xué)習(xí)框架選擇實(shí)戰(zhàn)
這篇文章主要為大家介紹了PyTorch?TensorFlow機(jī)器學(xué)習(xí)框架選擇實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10python自動(dòng)填寫(xiě)問(wèn)卷星問(wèn)卷以及提交問(wèn)卷等功能
這篇文章主要給大家介紹了關(guān)于python自動(dòng)填寫(xiě)問(wèn)卷星問(wèn)卷以及提交問(wèn)卷等功能的相關(guān)資料,包括使用Selenium庫(kù)模擬瀏覽器操作、定位元素、填寫(xiě)表單等,通過(guò)本文的學(xué)習(xí),讀者可以了解如何利用Python自動(dòng)化技術(shù)提高問(wèn)卷填寫(xiě)效率,需要的朋友可以參考下2023-03-03詳解Python prometheus_client使用方式
本文主要介紹了Python prometheus_client使用方式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02python將ansible配置轉(zhuǎn)為json格式實(shí)例代碼
這篇文章主要介紹了python將ansible配置轉(zhuǎn)為json格式實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05Python實(shí)現(xiàn)多張圖片合成文字的效果
前段時(shí)間看到有人問(wèn)如何使用Python實(shí)現(xiàn)多張圖片組成文字的效果?覺(jué)得還挺有意思,于是嘗試做了一下,剛好趕上端午節(jié),所以打算從網(wǎng)上下載1000張王心凌的照片,組成端午安康的字樣,感興趣的可以了解一下2022-06-06keras獲得某一層或者某層權(quán)重的輸出實(shí)例
今天小編就為大家分享一篇keras獲得某一層或者某層權(quán)重的輸出實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python爬蟲(chóng)scrapy框架的梨視頻案例解析
這篇文章主要介紹了python爬蟲(chóng)scrapy框架的梨視頻案例解析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02pytorch nn.Conv2d()中的padding以及輸出大小方式
今天小編就為大家分享一篇pytorch nn.Conv2d()中的padding以及輸出大小方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01