pikachu之sql注入

目錄

XX型注入

insert/update注入

delete注入

"http header"注入

基于boolian的盲注

基于時間的盲注

寬字節注入(wide byte注入)


pikachu靶場的字符型注入中xx' or 1=1#可以得到所有用戶的信息。

XX型注入

首先輸入1'探測一下。

然后返回這樣一條報錯信息,注意near ''1'')' ,紅色部分是表示內容為字符串的一對單引號,實際報錯內容應該是'1''),然后這個橙色部分單引號應該是我們輸入的導致報錯的單引號,事實上還缺一個括號閉合,報錯信息省略了,所以數據格式大概是('你的輸入')。

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 ''1'')' at line 1

輸入1') order by 3#報錯,經過嘗試有兩列內容。

輸入1' union slect database(),2#爆庫,接下來一一操作便是。

insert/update注入

首先注冊一個用戶。

隨后點擊修改信息,并且在性別后面加一個單引號。

提交后成功報錯。

接下來想查看有幾列,發現一直失敗,這個時候轉向報錯注入。

輸入1' and extractvalue(1,concat(0x7e,(select database()),0x7e))#,成功拿到數據庫名,接下來慢慢測吧哈哈,除了這個函數還可以用updatexml,它具有三個參數。

回到注冊頁面,注冊一般使用insert語句,可能存在insert注入,insert格式如下:

用戶輸入1' or updatexml(1,concat(0x7e,(select database()),0x7e),0) or '

原來的

('百度','https://www.baidu.com')變成

('1' or updatexml(1,concat(0x7e,(select database()),0x7e),0) or '','https://www.baidu.com')

其中紅色單引號是原本'百度'的一對單引號。

delete注入

首先上傳一份javascript惡意腳本,然后成功上傳。

這個時候嘗試上傳1',發現也沒有報錯。

接下來刪除js腳本,頁面沒有變化。

但是當我們刪除1'時候,提示我們刪除失敗,數據庫掛了好好好,大概就是刪除帶有插入惡意符號的語句可能會觸發sql注入。

我們重新上傳1' order by 3#,隨后刪除看看,但是發現無論列數設置多少頁面都沒變化,但是就是在刪除的時候存在sql注入,怎會回事呢?我們刪除的時候抓包看一看。

這里猜測大概在id這里存在sql注入

將id設置為id=75',發現出現了報錯。

接下來輸入id=75 and 1=1

接下來,發現遇到了這個。

那么大概一些東西被過濾了,猜測是空格,將空格替換成/**/,隨后刪除成功。

隨后輸入id=77/**/and/**/1=2,發現不行,哎這個是數字型注入啊。

隨后輸入id=78/**/order/**/by/**/2,竟然不存在,然后嘗試1也不行,那么轉成報錯注入方向。

輸入id=79/**/and/**/updatexml(1,concat(0x7e,(select/**/database()),0x7e),0)

發現爆出了數據庫名,除了這個paylaod還可以,在這里無論最終真值與否,右邊的語句都會報錯都會返回信息,所以關系不大。

id=79/**/or/**/updatexml(1,concat(0x7e,(select/**/database()),0x7e),0)

id=79/**/&&/**/updatexml(1,concat(0x7e,(select/**/database()),0x7e),0)

id=79/**/||/**/updatexml(1,concat(0x7e,(select/**/database()),0x7e),0)

"http header"注入

在這里我們登錄了一個賬號,發現返回了我的ip,user agent,http accept,端口號,由于我的信息都寫入了數據庫,所以這幾個跟數據庫相關的部分都可能存在sql注入。?

刷新頁面抓包,首先在ip位置測試sql注入,然后返回了錯誤,但是并不是sql語句的報錯,這里不存在。

接著在user agent后面加入一個單引號,發現sql語句報錯,那么這里存在sql注入。

隨后再次嘗試,在accept后面追加單引號來測試,然后sql語句報錯,那么這里也存在sql注入。

隨后在cookie測試,發現cookie這三個參數都存在sql注入。

在cookie處利用報錯注入輸入' and updatexml(1,concat(0x7e,(select database()),0x7e),0)#

基于boolian的盲注

kobe' and '1'='1

kobe' and '1'='2

可以通過這個查看頁面變化,但是這個頁面只有這兩種情況,怎么輸入最后都沒有出現sql語句報錯,這里可以嘗試布爾盲注入。

輸入kobe' and length(database())>10#

但是輸入kobe' and length(database())=7#,可以看出回顯,那么可以通過這種辦法猜測出數據庫名字的長度。

輸入kobe' and ascii(substr(database(),1,1))>100#,說明數據庫名字的第一個字符的ASCII值大于100。

最終輸入kobe' and ascii(substr(database(),1,1))=112#,說明數據庫名字第一個字符的ASCII值為112,也就是p

接下來測表名,首先應該同剛剛一樣測試表名的長度,隨后根據表名每位字符的ascii碼確定具體的表名。

基于時間的盲注

這道題我們發現無論怎么輸入,最終都只會生成一個內容,所以我們僅僅可以使用頁面的休息作為參考,那就是基于時間的盲注。

輸入1' and sleep(5)#,頁面停止5秒。

輸入1' and if(length(database())>5,sleep(5),1)#

????????頁面停止5秒

輸入1' and if(length(database())=7,sleep(5),1)#

????????頁面停止5秒,說明數據庫名的長度是7。

輸入1' and if(ascii(substr(database(),1,1))=112,sleep(5),1)#

????????頁面停止5秒,說明數據庫名的第一個字符的ascii碼為112,為p

隨后慢慢測試出數據庫名,測試表的方法一樣,首先測試表的長度,隨后測試表的內容。

寬字節注入(wide byte注入)

以下是寬字節注入簡單學習。

攻擊背景:

  1. 為了防止SQL注入,老式的PHP程序會開啟?magic_quotes_gpc?選項,或者程序員手動使用?addslashes()mysql_real_escape_string()?等函數。

  2. 這些功能會在特殊字符(如單引號?')前加上一個反斜杠(\)?進行轉義。

    • 例如,用戶輸入?ABC',經過轉義后會變成?ABC\'

    • 這樣,當輸入被拼接到SQL語句中時,\'?會被數據庫認為是一個普通的單引號字符,而不是字符串的結束符,從而無法破壞SQL語句結構。

攻擊原理:


“寬字節注入”利用了數據庫連接層的一個特性:當MySQL連接使用?GBKBIG5SJIS?等寬字符集( multibyte character set)時,可能會將兩個字節識別為一個漢字。

  • 關鍵點:在GBK編碼中,%df%5c?是一個合法的漢字。

    • %df?就是我們討論的這個字符。

    • %5c?是反斜杠?\?的URL編碼。

攻擊過程:


假設我們想注入?id=1',但程序會對單引號轉義。

  1. 正常輸入被轉義

    • 輸入:1'

    • 轉義后:1\'?(單引號前被加上了反斜杠?\

    • 最終SQL:SELECT * FROM users WHERE id = '1\'';

    • 這個SQL是合法的,單引號被轉義,注入失敗。

  2. 使用?%df?進行寬字節注入

    • 輸入:%df'?(注意,這里是輸入?%df?這個字符,而不是輸入這三個符號)

    • 轉義機制工作:程序看到單引號?',于是在它前面加一個反斜杠?\

      • 轉義后的數據變成了:%df\'

      • 在十六進制表示下,這就是:df 5c 27?(%df?+?\?+?'

    • 魔法時刻:當數據庫連接使用?GBK?這類寬字符集時,它會將?%df%5c(即?df?和?5c?這兩個字節)“吞并”,理解為一個GBK編碼的漢字?“運”?(yùn)。

    • 最終,數據庫看到的SQL語句變成了:

      sql

      SELECT * FROM users WHERE id = '運'';
    • 看!反斜杠(\)神奇地消失了!?單引號?'?失去了它的保護傘(反斜杠),重新暴露出來,成為了一個未轉義的單引號,成功地閉合了前面的字符串。

    • 現在,攻擊者就可以在這個單引號之后繼續構造Payload,例如:%df' AND 1=1 #?或?%df' UNION SELECT ... #


3. 總結:%df?的意義

  • 目的:它是一個用于觸發寬字節注入精心構造的字節

  • 作用:與系統自動添加的反斜杠(\%5c)結合,形成一個寬字符(如GBK中的“運”),從而“吃掉”用于防護的安全反斜杠,使后續的單引號重新生效。

  • 條件:這種攻擊成功需要兩個前提:

    1. 數據庫連接使用了寬字符集(如?GBK,?BIG5)。

    2. 目標網站使用了轉義函數(如?addslashes)但未使用參數化查詢

所以,%df?是Web安全歷史上一個非常有名的“黑客字符”,它專門用來利用特定環境下的防御漏洞。看到它,安全研究人員立刻就會想到“寬字節注入”。

接下來回到靶場。

首先嘗試1',發現沒有報錯,然后怎么輸入頁面都不變,時間盲注也沒有辦法使用。

這里我們嘗試使用寬字節注入,在pikachu靶場的字符型sql注入中輸入xx' or 1=1#就會返回所有人的信息,那么在這里按理來說,輸入xx%df' or 1=1#應該也可以輸出好多人的信息,但是這里沒有。

但是當我們抓包時,將name改為1%df' or 1=1#時

然后再放包,就出現了所有人的信息,為什么呢?

因為首先如果在輸入框輸入1%df'后面會進行url編碼,將%號url編碼為%25,將單引號url編碼為%27,并且生成斜杠然后url編碼為%5c,所以原來的就變成1%25df%5c%27,但是在GBK編碼中%df%5c?是一個合法的漢字,%25df%5c就不是一個合法的漢字了,從而導致單引號沒有逃逸。

當我們在抓包后輸入時,%就不會被url進行編碼,從而當發現我們輸入單引號時,系統生成斜杠(\),并且對它進行url編碼為%5c,從而%df%5c表示一個漢字,從而剩下了單引號留下。

抓包后輸入1%df' order by 3#后報錯,輸入1%df' order by 2#沒有報錯,那么存在兩列。

輸入1%df' union select 1,database()#

拿到了數據庫名。

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

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

相關文章

TLS(傳輸層安全協議)

文章目錄一、核心概念二、為什么需要 TLS/SSL?三、工作原理與詳細流程握手步驟詳解:1.ClientHello & ServerHello:2.服務器認證 (Certificate, ServerKeyExchange):3.客戶端響應 (ClientKeyExchange, Finished):4.…

【SpringMVC】SSM框架【二】——SpringMVC超詳細

SpringMVC 學習目標: 1.SpringMVC簡介 1)web訪問流程1.web服務器通過瀏覽器訪問頁面2.前端頁面使用異步提交的方式發送請求到后端服務器3.后端服務器采用:表現層—業務層—數據層的架構進行開發4.頁面請求由表現層進行接收,獲取用…

PostgreSQL表膨脹的危害與解決方案

PostgreSQL 的 表膨脹(Table Bloat) 是數據庫中由于 MVCC(多版本并發控制)機制導致的一種常見性能問題,表現為物理存儲空間遠大于實際有效數據量。以下是詳細解釋及其危害:一、表膨脹的產生原因 1. MVCC 機…

Elasticsearch面試精講 Day 5:倒排索引原理與實現

【Elasticsearch面試精講 Day 5】倒排索引原理與實現 在“Elasticsearch面試精講”系列的第五天,我們將深入探討搜索引擎最核心的技術基石——倒排索引(Inverted Index)。作為全文檢索系統的靈魂,倒排索引直接決定了Elasticsearc…

【小白筆記】基本的Linux命令來查看服務器的CPU、內存、磁盤和系統信息

一、 核心概念與命令知識點英文名詞&#xff08;詞源解釋&#xff09;作用與命令CPU (中央處理器)Central Processing Unit&#xff1a;<br> - Central&#xff08;中心的&#xff09;&#xff1a;來自拉丁語 centralis&#xff0c;意為“中心的”。<br> - Process…

51c大模型~合集177

自己的原文哦~ https://blog.51cto.com/whaosoft/14154064 #公開V3/R1訓練全部細節&#xff01; 剛剛&#xff0c;DeepSeek最新發文&#xff0c;回應國家新規 AI 生成的內容該不該打上“水印”&#xff1f;網信辦《合成內容標識方法》正式生效后&#xff0c;De…

CA根證書的層級關系和驗證流程

CA根證書的層級關系和驗證流程&#xff1a;1. 證書層級結構&#xff08;樹狀圖&#xff09; [根證書 (Root CA)] │ ├── [中間證書 (Intermediate CA 1)] │ │ │ ├── [網站證書 (example.com)] │ └── [郵件證書 (mail.example.com)] │ └── [中間證書 (In…

液態神經網絡(LNN)1:LTC改進成CFC思路

從液態時間常數網絡&#xff08;Liquid Time-Constant Networks, LTC&#xff09;到其閉式解版本——閉式連續時間網絡&#xff08;Closed-form Continuous-time Networks, CfC&#xff09; 的推導過程&#xff0c;可以分為以下幾個關鍵步驟。我們將基于你提供的兩篇論文&#…

【圖像處理基石】圖像預處理方面有哪些經典的算法?

圖像預處理是計算機視覺任務&#xff08;如目標檢測、圖像分割、人臉識別&#xff09;的基礎步驟&#xff0c;核心目的是消除圖像中的噪聲、提升對比度、修正幾何畸變等&#xff0c;為后續高階處理提供高質量輸入。以下先系統梳理經典算法&#xff0c;再通過Python實現2個高頻應…

MySQL 多表查詢方法

MySQL 多表查詢方法MySQL 多表查詢用于從多個表中檢索數據&#xff0c;通常通過關聯字段&#xff08;如外鍵&#xff09;實現。以下是常見的多表查詢方式&#xff1a;內連接&#xff08;INNER JOIN&#xff09;內連接返回兩個表中匹配的行。語法如下&#xff1a;SELECT 列名 F…

網絡斷連與業務中斷的全鏈路診斷與解決之道(面試場景題)

目錄 1. 網絡鏈路的“命脈”:從物理層到應用層的排查邏輯 物理層:別小看那一根網線 數據鏈路層:MAC地址和交換機的“恩怨情仇” 工具推薦:抓包初探 2. 網絡層的“幕后黑手”:IP沖突與路由迷霧 IP沖突:誰搶了我的地址? 路由問題:數據包的“迷路”之旅 3. 傳輸層與…

英偉達Newton與OpenTwins如何重構具身智能“伴隨式數采”范式

具身智能的“數據饑荒”&#xff1a;行業痛點與技術瓶頸的深度剖析1.1 具身智能的現狀與核心挑戰Embodied AI的落地之路面臨著多重嚴峻挑戰。在算法層面&#xff0c;實現通用智能仍需人類的持續介入&#xff0c;并且從感知到行動的認知映射尚未完全打通。在硬件層面&#xff0c…

STM32HAL 快速入門(十六):UART 協議 —— 異步串行通信的底層邏輯

大家好&#xff0c;這里是 Hello_Embed。在前幾篇中&#xff0c;我們通過環形緩沖區解決了按鍵數據丟失問題&#xff0c;而在嵌入式系統中&#xff0c;設備間的數據交互&#xff08;如單片機與電腦、傳感器的通信&#xff09;同樣至關重要。UART&#xff08;通用異步收發傳輸器…

使用 C 模仿 C++ 模板的拙劣方法

如下所示&#xff0c;準備兩個宏&#xff0c;一個定義類型&#xff0c;一個定義容器大小。 使用時只要先定義這兩個宏&#xff0c;然后再包含容器頭文件就能生成不同類型和大小的容器了。但是這種方法只允許在源文件中使用&#xff0c;如果在頭文件中使用&#xff0c;定義不同類…

flume接收處理器:構建高可用與高性能的數據鏈路

flume接收處理器&#xff1a;構建高可用與高性能的數據鏈路 在大規模數據采集場景中&#xff0c;單點故障和性能瓶頸是兩大核心挑戰。Flume 通過 Sink Group 接收處理器&#xff08;Processor&#xff09; 機制&#xff0c;提供了強大的故障轉移&#xff08;Failover&#xf…

高級Kafka應用之流處理

40 Kafka Streams與其他流處理平臺的差異在哪里&#xff1f; 什么是流處理平臺&#xff1f; “Streaming Systems”一書是這么定義“流處理平臺”的&#xff1a;流處理平臺&#xff08;Streaming System&#xff09;是處理無限數據集&#xff08;Unbounded Dataset&#xff09;…

Custom SRP - LOD and Reflections

1 LOD Groups 場景中對象越多,場景就越豐富,但是過多的對象,也會增加 CPU 和 GPU 的負擔.同時如果對象最終渲染在屏幕上后覆蓋的像素太少,就會產生模糊不清的像素點/噪點.如果能夠不渲染這些過小的對象,就能解決噪點問題,同時釋放 CPU GPU,去處理更重要的對象. 裁剪掉這些對象…

【Linux篇章】互聯網身份密碼:解密 Session 與 Cookie 的隱藏玩法和致命漏洞!

本篇摘要 本篇將承接上篇HTTP講解&#xff08; 戳我查看 &#xff09;遺留的關于Cookie與Session的介紹&#xff0c;在本篇&#xff0c;將會介紹Cookie的由來&#xff0c;作用&#xff0c;以及缺點等&#xff0c;進而引出Session&#xff0c;最后介紹一下它們的性質等&#xf…

Postman接口測試工具:高效管理測試用例與環境變量,支持斷言驗證及團隊協作同步

之前跟你們聊過能搭知識網絡的 Obsidian&#xff0c;今天換個偏向接口測試的方向 —— 給你們安利一個 Github 上的「Postman」&#xff0c;它是個接口測試工具&#xff0c;官網能直接下載&#xff08;Postman: The Worlds Leading API Platform | Sign Up for Free&#xff09…

可可圖片編輯 HarmonyOS 上架應用分享

可可圖片編輯 HarmonyOS 上架應用分享 介紹 可可圖片編輯 原名 圖片編輯大師&#xff0c;因為上架審核的時候 &#xff0c;提示與一些已有應用重名&#xff0c;為了避免沖突&#xff0c;需要改名字&#xff0c;所以苦心思考了一分鐘&#xff0c;就調整成 可可圖片編輯。 應用…