php项目私有化部署保护代码,ThinkPHP项目安全配置解决方案
前言:
ThinkPHP MVC框架越來被開發者接受,眾多的開發者選擇了這個框架,也有很多的優秀項目使用的ThinkPHP框架。最近整理了一下ThinkPHP項目的一些安全配置。可能并不適用全部項目,大家可以適當的使用如下的安全配置。
前置知識:
web容器和各類組件的版本,這里使用的LNMP 的架構:Nginx1.19 Mysql 5.6 PHP7.4 Centos8.2,這里推薦是PHP的版本7.4
一、ThinkPHP常見的被入侵方式
ThinkPHP RCE
案例分享:
在某些ThinkPhp版本中只有開啟了Debug才會導致命令執行的出現,例如拿ThinkPhp5.1.14舉例
獲取網站的絕對路徑等等敏感信息
開啟了Debug,執行exp
2、通過log日志獲取網站權限
智宇發卡網舉例
此發卡網是可以訪問runtime目錄的,給大家看看目錄
他入口文件和runtime目錄在同一個目錄里面,他也沒設置其他東西,所以可以直接訪問runtime目錄
然后根據runtime目錄的日志存儲的格式runtime/log/年份月份/日.log來存儲的,所以得到runtime/log/202007/22.log來獲取網站日志,在遍歷日志的時候在18號發現了管理員賬號密碼
通過后臺登錄賬號密碼,通過代碼審計發現存在一個比較雞肋的Rce
利用條件
可以開啟日志,或者支持into outfile
GetShell
1
在審計的時候發現了數據庫可以指定其他文件進行數據庫恢復(恢復數據相當于執行SQL語句),下面是利用步驟
1.下載網站備份文件
2.修改SQL語句,添加漏洞利用代碼
3.在文件存儲處添加.sql的后綴,然后在上傳文件的地方上傳.sql文件
4.然后在恢復數據的時候指定這個.sql文件達到寫shell的目的
備份數據庫
下載后修改備份文件并修改文件
漏洞利用代碼(路徑自己設置,后面的注釋不可以刪除)
SET GLOBAL general_log = 'ON';SET GLOBAL general_log_file = 'C:\\wwwroot\\192.168.2.128\\wwwa.php';select '<?php eval($_POST[0]);?>';SET GLOBAL general_log_file = 'C:\\Temp\\a.txt';
文件存儲添加.sql后綴
上傳剛剛修改的.sql文件,例如此處
在點擊上傳圖片的時候,先抓包,添加一個.sql后綴的文件
然后上傳剛剛修改的sql文件,可以得到上傳的路徑
恢復數據GetShell
恢復成功后訪問網站的wwwa.php,密碼是0
另外一個命令執行漏
由于thinkphp框架開發,他存在Thinkphp的Rce漏洞,但是由于路由設置的原因,在進行Rce的時候他每次請求都會帶有路由的子域名參數,例如
可以看見他會帶著當前的域名或者ip先傳入該參數進行執行,所以導致很多函數無法使用,所以大部分函數無法使用,不過還是找到了system這個函數進行命令執行
??????????
二、思考如何防御???
2.1配置防御log目錄泄露
runtime目錄下的文件是ThinkPhp運行時產生的文件,里面包括了日志,緩存,等等的信息,如果可以訪問會導致如下危害:可以看見管理員和其他用戶的登錄日志,會記錄明文賬號和密碼在某些版本可以通過緩存來進行代碼執行
修復方法
偽靜態中添加
location ~* (runtime/|Application/)
{
return 403;
}
2.2?ThinkPHP安全入口限制
案例
https://www.bt.cn/bbs/thread-52183-1-1.html
修復方法
location ~ ^/index.php{
include enable-php-70.conf;
}
location ~* \.(php){
deny all;
}
2.3?使用Nginx防火墻
默認攔截日志防御和ThinkPHP?RCE攻擊
如下:
發起ThinkPHP RCE 請求被攔截
2.3 使用堡塔PHP安全防護
防跨站的危害性
作用
當服務器中有多個網站時這個設置就非常有用,如果服務器中的某個網站被攻擊了,可以避免其他網站也淪陷
案例
例如,如下服務器
當該服務器的的192.168.2.128站點被入侵的時候,如果沒有設置防跨站他是可以訪問其他的網站的內容的
如果設置了防跨站的話,是可以防止這種事情發生的
以看到訪問錯誤,不過單純使用open_basedir是有被繞過的風險,上傳一個帶有如下內容的php文件
訪問該php文件,可以成功獲取到/etc/passwd文件里面的內容
安裝堡塔php安全防護后,進行設置
具體使用說明
https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=49256&highlight=%E5%A0%A1%E5%A1%94php
開啟堡塔php安全防護后,已經成功攔截
2.4?使用企業級防篡改
thinkphp中默認是兩個目錄是存在寫入和刪除的。一個是緩存目錄cache 一個是上傳目錄upload(并不是全部都是通用的根據項目自身去寫規則)。這里我使用的是智宇發卡的程序來做的測試
智宇發卡這個程序就兩個目錄需要寫入和刪除。一個是runtime 目錄和/static/upload 這兩個目錄需要寫入。那么先把企業級防篡改的保護目錄全部清空
只留下這兩個目錄即可。測試一下效果
測試為:寫入不了文件
2.5?webshell防御–OpenRasp
webshell防御的話。這里使用的百度的Openrasp
具體的使用教程
https://www.bt.cn/bbs/thread-49371-1-1.html
直接安裝即可
測試效果如下:
使用方法,在該網站放了一個webshell
執行php代碼,被攔截
成功被攔截
三、ThinkPHP其他安全設置
3.1?關閉debug
在線上環境,開啟Debug模式會導致如下危害
泄露網站敏感信息
在Thinkphp5.0.24版本開啟Debug模式的時候,在特定情況下會導致mysql數據庫賬號密碼泄露
在某些Thinkphp版本要開啟Debug模式才會導致代碼執行漏洞
一般配置文件項目地址中的/application/config.php 文件中
3.2?設置日志輸出
日志文件他存儲在runtime/log/下面,上面也有講解案例和危害,如果我們可以輸出日志的內容就可以避免一些攻擊,一般的日志輸出會輸出大部分的敏感信息,就想上面一樣,登錄的賬號密碼都會被記錄,如果我們只輸出錯誤的信息,就可以避免上面的敏感信息泄露出去
修復方法
只輸出錯誤的日志
或者直接關閉日志的輸出
四、其他安全設置
1、服務器密碼和網站密碼全部分開
2、數據庫密碼和網站密碼。和FTP密碼全部獨立
3、密碼建議為md5的隨機強密碼這樣減少被爆破的風險
五、總結
Thinkphp的MVC的單一入口的解決方案可以解決掉很多的一些安全問題。但是還是需要配合一些安全產品來更多的安全風險
后續我們會持續更新更多的項目的安全策略。敬請期待
如果此文章對你有幫助請轉發至朋友圈中讓更多人能學習
總結
以上是生活随笔為你收集整理的php项目私有化部署保护代码,ThinkPHP项目安全配置解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java如何抽象一辆车,java新职篇:
- 下一篇: php7.0 百度百科,PHP 7.0.