今天是斷更之后的第一更,我們今天就先來學習一下盲注,
首先我們先學習布爾盲注,
它是什么意思呢?
其實這個原理很簡單,它就是通過對輸入的內容進行判斷,
例如:?id=1’ and left(database(),1)=‘s’ #
這個的意思是指對比當前的資料庫名的第一位是否是“s”.
它一般用于資料被帶入了資料庫執行,但是由于網站管理員故意設定的原因使得用戶無法看見回顯,
好的,我們已經大體的講了它的原理與用途,現在我們來深入學習一下,
在學習的開始,我們先來學習幾個函式:
1.substr()
它的用法是:substr(string,start,length)
我們來做兩個實驗來進一步理解一下
首先我們先寫一個簡短的PHP腳本(具體步驟如圖)
<?php
$s=substr(abcd,1,2);
echo "$s";
?>


好,這時我們來訪問一下(如圖)

從圖上我們明顯可以看出我們中間的數是截取的起始點,后面的數是長度,
值得注意的是它是從0開始的(如下例)
abcd
0123
好第一個實驗做完了,我們開始進行第二個,
首先我們還是先寫一個簡短的PHP腳本(具體步驟不給了和之前一樣只是代碼不同)
<?php
$s=substr(abcd,1);
echo "$s";
?>
然后我們再來看看結果(如圖)

這個也很明顯就是從1開始之后的內容全部截取,
好了,通過這兩個實驗我們就可以學會了它的用法.
注:我們一般是用第二種,(沒看懂也可以看看這篇文章https://www.runoob.com/php/func-string-substr.html)
2.left()
left()的用法與substr()的第二種用法差不多,但值得注意的是它是從1開始計數的,
例如:left(database(),1)>’a’ 指的是判斷資料庫名的第一位是否為a,
3.mid()
mid函式的用法和substr()基本上一樣,但還是那個問題它是從1開始計數的,
3.ORD()函式的組合用法
這個函式是把輸入的字串的第一位字符轉換成ASCII碼
例如:
<?php
echo ord("52zg");
?>
這串代碼運行結果是:
把“53”還原剛好就是5

這個函式一般是和之前的幾個函式一起使用,例如:
<?php
echo ord(substr(abcd,1,2));
?>
運行結果就是:

也就是b的ASCII碼(如下圖)

好了在我們學習完了這幾種函式后,我們來學習如何用它們來進行sql注入,
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and left(database(),1)='a' --+
我們知道我們使用資料庫名字的第一個字串是’s’,所以說它肯定會報錯,(如下圖)

但當我們改成正確的代碼后它就不報錯了,(如下圖)

我們就是通過這樣的方式對資料庫進行猜解,(說實話這種很麻煩,一般是工具所使用的方法,例如sqlmap就是用這種方法進行猜解的)
好的,在我們學習了布爾盲注之后我們來學習基于時間的盲注,
它的原理也很簡單,就是通過回顯的所經過的時間來判斷,
它主要是靠sleep()函式,sleep()函式可以改變回顯時間,
首先我們來作個實驗,原始碼是這樣的:
"; sleep(10); } echo"5very2zg"; ?>
(因為CSDN中不好插入視頻,我用截圖的形式展示一下)
當我們輸入?a=1時,由于a不等于5,所以說直接回顯,
當我們再輸入?a=5時,由于a等于5,所以說延遲10秒回顯,(注意這里是再輸入,所以說應在延遲的時間內還是上一次輸入的回顯)
(此為延遲時的回顯)

(此為延遲結束后的回顯)

所以說我們可以通過回顯時間來判斷,
那么我們由此也就可以寫出Payload了
?id=1' and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+
(ps:求各位看官給點評論和關注)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/60763.html
標籤:其他
上一篇:文明爬蟲,從你我做起。
下一篇:Nginx組態檔及編譯引數解釋
