手把手教你寫網絡爬蟲:Web應用的漏洞檢測實戰篇!

2021-01-09 51Testing軟體測試網

關注我,每周分享軟體測試技術乾貨、面試經驗,想要進入軟體測試學習交流群的可以直接私信我哦~~

在平時工作當中會用到漏洞掃描工具,用戶只需要輸入待檢測網址,點擊一下按鈕就可以等待網站的安全檢測報告了。作為剛入門的安全小白,對其工作原理產生了濃厚的興趣,逐漸深層剝離Web應用漏洞檢測的本質是網絡爬蟲技術與漏洞檢測技術的結合,網絡爬蟲主要爬取網站結構並收集可能存在的攻擊面,漏洞檢測技術則是在爬蟲結果的基礎上進行針對性的修改並重放,根據伺服器響應進行判斷。

在本篇文章中,我們將重點介紹爬蟲技術方面的知識。

1、應用場景

通常我們看到的網頁內容是通過瀏覽器呈現的,Web站點的頁面渲染方式對用戶是透明的,然而不同的Web站點渲染方式對爬蟲的影響是巨大的。對於Web站點來說,其頁面渲染方式主要分為兩個類型,即服務端渲染和客戶端渲染。

其中,服務端渲染是指頁面呈現的內容是由伺服器端完成渲染後再返回至瀏覽器的,有效的信息全部包含在HTML頁面中,爬蟲通過頁面解析即可獲取關鍵數據;而客戶端渲染是指頁面的內容主要由JavaScript操作DOM渲染頁面,其生成邏輯、數據獲取、路由跳轉全部由瀏覽器控制,沒有JavaScript運行環境的爬蟲是無法獲取數據的。

在Web2.0背景下,Web應用的數據交互變得更加複雜,為滿足用戶的交互需求,通常採用服務端和客戶端結合的方式渲染,這就使得爬蟲獲取的關鍵信息非常有限。

圖1 服務端渲染
圖2 客戶端渲染

2、探索爬蟲

通常我們根據是否可以加載JavaScript腳本以及解析Ajax請求將爬蟲分為靜態爬蟲和動態爬蟲。靜態爬蟲對服務端渲染的數據進行下載並解析,獲取所需的數據。靜態爬蟲的邏輯比較簡單,使用Python的requests等庫即可實現頁面下載拿到網頁源碼,再通過Xpath、BeautifulSoup或正則表達式對頁面進行解析之後按照一定的格式進行存儲即可。如我們以中國知網專利數據為例,對頁面表格中的數據進行爬取。

我們需要獲取表格中專利的申請號、公開號、申請人、發明人等關鍵信息進行存儲,具體信息如圖3所示。

圖3 中國知網專利數據

針對上述需求,我們可以使用Python的requests模塊對URL進行請求,使用Xpath對頁面進行解析獲取表格中的數據。代碼如下所示:

import requests

from lxml import etree

url = "http://dbpub.cnki.net/grid2008/dbpub/detail.aspx?dbcode=SCPD&dbname=SCPD2020&filename=CN110637524A"

ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"

headers={'User-agent': ua}

res = requests.get(url,headers = headers)

content = res.text # 獲取HTML的內容

html = etree.HTML(content)

tds = []

for item in html.xpath("//td"):

if item.text:

tds.append(item.text)

print(tds)

然而,隨著前端技術的發展,用戶面前的數據不單純從服務端獲取,用戶的滑鼠點擊、滾動、表單的輸入等行為與瀏覽器產生交互進而觸發事件發起Ajax請求,瀏覽器在不刷新URL的情況下異步的獲取從伺服器端傳來的數據並通過JavaScript操縱DOM對數據進行渲染更新,這部分數據靜態爬蟲是拿不到的。具備Ajax解析能力的動態爬蟲就可以解決這類問題。

通常情況下,動態爬蟲通過模擬瀏覽器的方式對待爬取的URL進行渲染,這樣爬取的原始碼就是真正的網頁代碼,數據提取自然更加全面。目前動態爬蟲技術主要有Selenium和pyppeteer。

Selenium作為一個自動化測試工具,對各種語言都能很好地支持,所以自2014年問世以來,很長一段時間,它一直是瀏覽器自動化的首選。Selenium提供了WebDriver驅動程序,可以直接與瀏覽器通信來控制瀏覽器。

而Phantomjs是一個可編程的無頭瀏覽器,包含了完整的瀏覽器內核,可以解析並渲染JS、處理請求信息等。通常將這兩個工具進行結合,Phantomjs負責提供JavaScript腳本執行環境,Selenium負責驅動Phantomjs無頭瀏覽器渲染、提取頁面並處理請求信息。

但是2017年Selenium宣布不再提供Phantomjs支持,並且Phantomjs停止更新並宣布不再進行維護,取而代之的是其他的無頭瀏覽器,如Chrome、Firefox等。

使用Selenium爬取中國知網專利數據的代碼如下:

from?selenium?import?webdriver # 啟動瀏覽器需要用到

from?lxml?import?etree

driver = webdriver.Chrome(executable_path="chromedriver驅動程序路徑")

url = "http://dbpub.cnki.net/grid2008/dbpub/detail.aspx?dbcode=SCPD&dbname=SCPD2020&filename=CN110637524A"

driver.get(url)

content = driver.page_source

html = etree.HTML(content)

tds = []

for item in html.xpath("//td"):

if item.text:

tds.append(item.text)

print(tds)

Selenium不再支持Phantomjs的幾個月後,Google公司發布了Puppeteer。Puppeteer是Google官方發布的一個通過DevTools協議控制headless Chrome的Node庫。可以通過Puppeteer的提供的API直接控制Chrome模擬大部分用戶操作來進行界面測試或者作為爬蟲訪問頁面來收集數據。而Pyperteer是puppeteer的Python實現,相比於Selenium具有異步加載、速度快的特點。

import asyncio

from lxml import etree

from pyppeteer import launch

async def main():

browser = await launch(

ignoreHTTPSErrors=True,

args=['--no-sandbox'"--disable-gpu",

"--disable-web-security",

"--disable-xss-auditor",# 關閉 XSS Auditor

"--no-sandbox",

"--disable-setuid-sandbox",

"--allow-running-insecure-content",# 允許不安全內容

"--disable-webgl",

"--disable-popup-blocking"],

headless=False,

userDataDir="F:\\pyppeteer"

)

page = await browser.newPage()

await page.setUserAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Mobile Safari/537.36')

url = 'http://dbpub.cnki.net/grid2008/dbpub/detail.aspx?dbcode=SCPD&dbname=SCPD2020&filename=CN110637524A'

await page.goto(url, options={'waitUtil': 'networkidle2','timeout': 10000})

content = page.content()

html = etree.HTML(content)

tds = []

for item in html.xpath("//td"):

if item.text:

tds.append(item.text)

print(tds)

asyncio.get_event_loop().run_until_complete(main())

3、從漏洞檢測的角度看爬蟲技術

基於Web應用的漏洞檢測效果在很大程度上取決於爬蟲結果的覆蓋面,發現有效的URL越多,就越有可能覆蓋到隱藏的注入點。傳統的爬蟲獲取網站隱藏注入點的方式通常是通過正則表達式去提取頁面中已有的URL信息,而這種爬取的方式是片面的、低效的,因為隱藏在Ajax請求URL信息,傳統爬蟲根本無法獲得;在當前URL地址不變的情況下,異步地更新頁面內容使得靜態爬蟲更加雞肋。

在當前Web2.0環境下,用戶與瀏覽器交互頻繁,爬蟲更多關注的是綁定在HTML標籤中的可以觸發的事件信息,這也更加符合人工滲透測試的基本流程和操作模式。就目前模擬瀏覽器的動態爬蟲而言,Selenium相比Pyppeteer更加厚重,從其底層上來說都是通過DevTools Protocol來操縱Chrome,而Selenium本質上來說是WebDriver客戶端,是對DevTool Protocol的二次封裝,相比於Pyppeteer直接實現DevTool Protocol而言在效率上略遜一籌。

需要特殊說明的是,Pyppeteer提供一種網絡攔截的功能,可以對HTTP/S請求進行記錄、修改和攔截,對於漏洞檢測所需要的URL、請求方法以及請求參數這些關鍵信息來說簡直不謀而合。

相關焦點

  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    總目錄 零基礎全能篇(4套課程) 實用編程技巧進價(1套課程) 數據分析與挖掘(8套課程) 辦公自動化(3套課程) 機器學習與人工智慧(7套課程) 開發實戰篇(4套課程) 量化投資(2套課程) 網絡爬蟲(6套課程) 資料庫操作(1套課程) python
  • 如何快速學會Python爬蟲(入門篇)
    Python爬蟲實戰二之爬取百度貼吧帖子3. Python爬蟲實戰三之實現山東大學無線網絡掉線自動重連4. Python爬蟲實戰四之抓取淘寶MM照片5. Python爬蟲實戰五之模擬登錄淘寶並獲取所有訂單6.
  • 通付盾Web爬蟲防火牆與中科曙光伺服器成功完成國產化適配
    近日,通付盾最新升級的網絡應用安全防護產品「通付盾爬蟲防火牆軟體」與中科曙光H系列伺服器完成兼容適配聯合測試,適配檢測結果顯示,通付盾爬蟲防火牆軟體在兼容性、可靠性、穩定性及軟體性能等方面均以優異的成績達到適配標準,滿足用戶應用需求。
  • 網宿科技安全報告 爬蟲肆虐 Web應用攻擊增長翻番
    據說報告顯示,2018年上半年網絡攻擊呈現越演越烈的態勢,其中Web應用攻擊總數環比增長了97.82%,平均每秒就發生31起攻擊。而惡意爬蟲攻擊數量環比增長了55.79%、DDoS攻擊則以809.82Gbps的數字刷新了今年上半年國內已知的攻擊峰值。
  • Web 爬蟲現已合法?
    江湖傳言,網際網路上50%以上的流量都是由爬蟲創造的,很多人都表示:無爬蟲就無網際網路的繁榮。也正因為此,網上各種爬蟲教程風靡不絕,惹各路大神小白觀之參與之。但是,無節制的背後往往隱藏著風險,類似「只因寫了一段爬蟲,公司200多人被抓!」、「程式設計師爬蟲竟構成犯罪?」等報導也時有發生。關於爬蟲合法性的討論,CSDN也在此前的《爬蟲到底違法嗎?這位爬蟲工程師給出了答案》、《不要在爬蟲犯罪的邊緣瘋狂試探!》
  • 通付盾Web爬蟲防火牆聯合中科曙光伺服器打造全新國產化適配新舉措
    來源:北國網前一段時間,通付盾爬蟲防火牆軟體與中科曙光H系列伺服器聯合完成的最新升級網絡安全產品,經過檢測顯示,其在兼容性、可靠性、穩定性及軟體性等方面的表現都非常的優秀,可以為用戶提供更好的使用體驗。
  • Python爬蟲實戰教程——爬取xkcd漫畫
    0 前言Python版本:3.7.0開發工具:IDLE(Python 3.7 64-bit)、Google Chrome1 網絡爬蟲(web crawler)?網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人),是一種按照一定的規則,自動地抓取網絡信息的程序或者腳本。
  • 第7天|10天搞定Python網絡爬蟲,Scrapy爬更快
    說了好幾天用requests進行網絡爬蟲編程了,是時候換成專業,高效率的爬蟲庫--Scrapy了。我之所以一開始用requests,就想告訴你,網絡爬蟲,方法挺多的,合適就行。還有在之前說的各種解析庫,在Scrapy中,也會經常用到,特別是Lxml的XPath。如果之前不說,留到現在還得說。
  • 七種文章偽原創的方法,手把手教你 SEO 文章為原創
    ,但是我們偽原創的文章一定要進行原創檢測 這2個網站都是可以進行剽竊檢測的https://www.copyscape.com/ https://smallseotools.com/ 具體的套路可看下面這篇文章,避免被寫手欺騙,不僅白白浪費錢,還可能拖累網站! 警惕!英文內容創作找國外寫手時,我遇到的一個天坑,可能白白浪費你的錢!
  • 自己開發一套反爬蟲系統難嗎?看過來,手把手教你
    爬蟲,網絡安全最大的威脅之一!根據爬取數據類型而分,爬蟲有不少種類,比如爬取Email地址的、爬取商品價格的、爬取圖片的,而最多的是爬取內容的,內容數據爬蟲是為泛濫的!爬蟲讓很多人對其深感苦惱,今天將用Node.JS實現一種防護性能很強的反爬蟲系統。首先展示防護效果,然後付上完整代碼,以了解實現方法。
  • 手把手教你學ELISA、PCR、免疫組化
    1.手把手教你學ELISAELISA的基礎是抗原或抗體的固相化及抗原或抗體的酶標記。結合在固相載體 表面的抗原或抗體仍保持其免疫學活性,酶標記的抗原或抗體既保留其免疫學活性,又保留酶的活性。根據試劑的來源和標本的情況以及檢測的具體條件,可設計出各種不同類型的檢測方法。2.手把手教你學PCR實時螢光定量PCR,簡稱RT-QPCR,屬於Q-PCR的一種,目前該技術已得到廣泛應用,如:擴增特異性分析、基因定量分析、基因分型、SNP分析等。
  • top白帽子 Gr36_ 手把手教你挖漏洞|2017 先知白帽大會
    雙編碼注入和寬字節注入,這兩種在 PHP 原始碼審計中比較的常見,但是按照經驗,眾測過程中,在黑盒時也可以碰到這種非常規注入,測試注入時如果只是用單引號某次測試中找到某個系統存在 PHP 文件包含漏洞,經過測試發現這個系統沒有任何上傳點,文件包含是本地文件包含,意味著無法通過上傳或者是遠程文件包含拿到
  • 在搜尋引擎領域,有哪些常用的網絡爬蟲?
    網絡爬蟲也有人叫做網絡蜘蛛。但業界內很少叫蜘蛛的,一般都叫做網絡爬蟲,Spider只是個別爬蟲的名稱。 網絡爬蟲是一個自動提取網頁的程序,它為搜尋引擎從Internet網上下載網頁,是搜尋引擎的重要組成。傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。
  • 網絡爬蟲作用有哪些?如何構建網絡爬蟲?
    而網絡爬蟲則是數據採集的主要方法。下面具體為大家介紹網絡爬蟲作用有哪些?如何構建網絡爬蟲?什麼是網絡爬蟲?網絡爬蟲是一種網際網路機器人,它通過爬取網際網路上網站的內容來工作。它是用計算機語言編寫的程序或腳本,用於自動從Internet上獲取任何信息或數據。機器人掃描並抓取每個所需頁面上的某些信息,直到處理完所有能正常打開的頁面。
  • 我是如何通過Web爬蟲找工作的
    那時我不太喜歡社交,因此我決定以我所知道的最佳方法來找工作,即開發一個應用程式,這篇文章就介紹了我是如何做到的。Craigslist我打算通過開發應用程式,幫我在Craigslist在找尋軟體工程師的相關工作。Craigslist是美國著名的大型免費分類廣告網站,你可以在上面找到東西出售,服務信息,社區帖子等內容。
  • 基於Django和翻譯API實現web版的中英文對照翻譯(一)
    考慮到篇幅問題,我在這篇文章裡面暫時只會簡單涉及3方面的內容:翻譯API的調用Django Web應用框架的簡單說明web頁面的效果展示說句題外話,有時候你會發現調用有道翻譯api的翻譯結果,和你自己在其官方web頁面上得到結果有所不同,那是因為有道翻譯內部實際上有多個翻譯版本。在wei頁面上你可以看到所有的版本,但好像有道翻譯api卻只能得到一個固定的翻譯版本。
  • 「Python爬蟲與文本實例技術與應用」培訓班通知
    各科研院所單位:    隨著網際網路的發展,網絡信息呈現指數式增長,要在短時間內獲取大量信息,網絡爬蟲無疑是一種最適合的方法。
  • WEB應用程式保證網絡安全具備什麼特徵
    各種威脅可以影響網站、在線服務、API端點以及企業使用或提供的應用程式。 這些毀滅性的攻擊包括隱私入侵、DDoS攻擊、數據洩露、網站破壞、在線商店關閉、抓取、支付欺詐、在線服務濫用和後門安裝。 埃森哲諮詢公司(Accenture)發布的2019年網絡犯罪成本研究報告顯示,在過去五年裡,網絡攻擊增加了67%。
  • Python開發簡單爬蟲【學習資料總結】
    ;另一方面,會將新的URL補充進URL管理器,若有URL管理器中含有新的URL,則重複上述步驟,直到爬取完所有的URL 6、最後,調度器會調動應用的方法,將價值數據輸出到需要的格式。