1.PHP框架thinkPHP6的新闻p新与安装——详细步骤
2.宝塔面板搭建小说CMS管理系统源码实测 - ThinkPHP6.0
3.ThinkPHP5.1 源码分析(四)- 门面Facade
4.laravelåthinkphpçåºå«ï¼
5.ThinkPHP多语言rce复现分析
PHP框架thinkPHP6的与安装——详细步骤
要成功安装并使用PHP框架thinkPHP6,您将遵循以下详细步骤。源码首先,闻系您需要下载和安装Composer,统源这是新闻p新PHP包管理系统。访问Composer中文网或Packagist中国全量镜像官网获取最新版本的源码项目源码打包Composer。
安装完成后,闻系打开命令提示符或终端窗口。统源为了确保您拥有最新版本的新闻p新Composer,执行以下命令:
composer selfupdate
下一步是源码使用Composer下载thinkPHP6.0的源代码。在Composer官网中搜索关键词"topthink/think",闻系然后复制并执行以下命令以下载和安装thinkPHP:
composer create-project topthink/think
完成安装后,统源您需要打开安装目录。新闻p新通常,源码goapp源码目录中会有一个名为"think"的闻系文件夹。使用本地服务器中的php命令启动它,输入以下命令:
php think run
启动后,您将看到一个提供网址的输出:.0.0.1:。在浏览器中访问此网址,您将看到thinkPHP的默认界面。至此,您已成功下载并安装了thinkPHP6。
如果您遵循以上步骤,您将能够轻松地在您的项目中使用thinkPHP6框架。
宝塔面板搭建小说CMS管理系统源码实测 - ThinkPHP6.0
在此分享一套基于ThinkPHP6.0开发的小说CMS管理系统源码。这套系统的功能与前几日介绍的漫画CMS颇为相似,主要服务于小说内容管理。tokio 源码
这套系统的安装极为便捷,支持直接通过域名一键完成。然而,值得注意的是,管理后台并无手动添加小说的功能,用户须从作者中心处通过添加或上传小说来实现。以下是所使用的技术栈与部分功能的实际演示。
对于这份源码的获取,有两条途径可以选择:一是通过扫描左侧的小程序码,二是如果你需要其他特定的资源,可以扫描右侧二维码并详细表达你的需求。
ThinkPHP5.1 源码分析(四)- 门面Facade
门面为容器中的类提供了一个静态调用接口,提升可测试性和扩展性,柜面源码简化了代码结构。
在`test()`方法中,通过调用`Config::get()`方法获取`'app'`下的所有配置。这里实际上并未直接在`Config`类或其父类`Facade`中调用`get`方法。而是通过`__callStatic()`函数,创建了`Config`类的一个实例并调用其`get`方法。实例化过程在`createFacade()`方法中完成,该方法返回`'config'`作为实际调用的类名。`__callStatic`和`self::`的区别在于前者用于调用静态方法,后者用于访问类内部属性。
测试用例展示了如何自定义门面类的实现。在项目同级目录创建`facade`自定义目录,并在`common`目录中定义`Allen`和`Nikki`类。sername源码自定义门面类通过`getFacadeClass()`方法返回类名,如`'app\common\Allen'`。通过`bind()`方法可以将别名与类绑定,简化调用。在`provider.php`中定义绑定关系,使得`'allen'`作为别名同样生效。
框架的基础类库之所以能直接返回`config`、`app`等,是因为在容器类实例化类时,已预先定义了这些绑定关系。`provider.php`中的定义在初始化流程中通过`bindTo`方法与容器类属性进行合并,使得调用门面类时能够直接使用。
总结,门面的核心功能在于通过静态调用接口,简化类的调用,提升代码可读性和可维护性。通过容器类的管理,实现了灵活的类实例化和方法调用。自定义门面类和框架内类的调用机制,展示了ThinkPHP5.1源码中门面设计的高效性和灵活性。
laravelåthinkphpçåºå«ï¼
thinkphp主è¦æä»ä¹ç¨
1ãèä¸å¯ä»¥å¾æ¹ä¾¿çæ§å¶æ³¨å ¥çåºæ¬å®å ¨æªæ½ãåç§å¤åçæ¹æ³ä¹é常好ç¨ï¼æ¯å¦ajaxãcookieçç2åç§åè½é½å ¨ãæ³è¦é«å¤§ä¸ï¼æ²¡é®é¢ï¼thinkphpçåç§åè½é½é常é½å ¨ï¼ä»ä¹ä¸ä¼ ãéªè¯ç ãå页ãé«éç¼åã模åéªè¯balabalaå ¨é½æã
2ãæ¨å¥½ï¼ææ¥ä¸ºæ¨è§£ThinkPHPæ¯ä¸ä¸ªå è´¹å¼æºçãå¿«éç®åçãé¢å对象çãMVCç»æçè½»é级PHPå¼åæ¡æ¶ï¼æ¯ä¸ºäºææ·Webåºç¨å¼ååç®åä¼ä¸åºç¨å¼åèè¯ççã项ç®åç«äºå¹´åï¼éµå¾ªApache2å¼æºåè®®åå¸ã
3ãthinkphpæ¯ç¼ç¨è¯è¨phpçä¸ä¸ªæ¡æ¶ï¼æ¡æ¶å°±æ¯å·¥å ·éåä½ï¼æé«å¼åæççã
4ãThinkphp模åç±»ç主è¦ä½ç¨æ¯ï¼å®æä¸å¡é»è¾å¤çï¼å æ¬å¯¹æ°æ®è¡¨çå¢å æ¹æ¥ï¼CUEDï¼æä½ã对å¤ççæ°æ®è¿è¡å°è£ ï¼å¯¹å段åå±æ§è¿è¡éªè¯ï¼å®æ对象åå±æ§çè¿æ»¤çåè½ã
5ãä¸è¬æ åµä¸æ¯ä¸ä¸ªè¡¨å¯¹åºä¸ä¸ªmodelç±»ï¼ä¸ç¨ä¹æ¯å¯ä»¥çã
6ãè¿ä¸ªæ¯ä¸ä¸ªactionç±»ï¼æåä¸å¥$this-display(Publicï¼text)ï¼æ¯æ¾ç¤ºpublicä¸çtext模æ¿ãä¹å°±æ¯è¯´å æ§è¡è¿ä¸ªç±»çè¿ä¸ªæ¹æ³ï¼ç¶åæ¾ç¤ºæ¨¡æ¿ã模æ¿ç¨å°çåéå°±ä»è¿éè°ç¨assignåé è¿å»ã
thinkphpä¸phpçåºå«
æ»çæ¥è¯´ï¼ç»æ¢¦ï¼dedecmsï¼ãphpcmsé½æ¯cmså 容管çç³»ç»ï¼thinkPHPæ¯PHPçä¸ç§å¼åæ¡æ¶ï¼cmsç¸å¯¹ç®åï¼è®°ä½å¯¹åºçè°ç¨æ ç¾ï¼å°±æ¯ç®åçå¥æ¨¡æ¿ï¼ä¸ç¨å¼ååå°ï¼äºæ¬¡å¼åé¤å¤ï¼ï¼æ¨¡ååªè½æ¯cmsæä¾ç模åã
åºæ¬ä¸å¤æ°cmsé½æ¯åºäºæ¡æ¶å¼åçï¼å ¶ä¸æäºcmsç³»ç»å°±æ¯åºäºthinkPHPæ¡æ¶å¼åèµ·æ¥çï¼æ以å¯ä»¥è¯´ç¨äºå¼å项ç®çæ¡æ¶ï¼æ¯é¡¹ç®çå身ã--就好æ¯ç³ç åæ¿å±ã
æä¸å¾ä¸æ¿è®¤ThinkPHPæ¯ä¸ä¸ªæ¯å½å æ¡æ¶è¿è¥æ¹é¢çæ¦æ ·ï¼å½FleaPHP/QeePHPæç«çé£éµï¼æ说è¿FleaPHP/QeePHPä¼åçï¼ã
æ人说tpæ¯è¾èè¿ï¼æè§å¾è¿æ¯å®çä¼ç¹ï¼å 为强大æ以æèè¿ï¼å¦ææ¯é常å°ç项ç®ï¼æè§å¾ç¡®å®ä¸å¤ªéåï¼åºè¯¥ä½¿ç¨æ´è½»é级çæ¡æ¶ã
ç®åphpå¼åç½ç«,æ为æµè¡çæ¡æ¶æ¯åªå 个?CakePHPCakePHPæ¯ä¸ä¸ªå¿«éå¼åPHPçæ¡æ¶ï¼å ¶ä¸ä½¿ç¨äºä¸äºå¸¸è§ç设计模å¼å¦ï¼AssociationDataMappingï¼FrontController以åMVCã
ä¸é¢æ们èä¸èæ¯è¾æµè¡çä¸ä¸ªphpå¼åæ¡æ¶ãLavarelï¼è¿æ¯ä¸æ´å¥è¯æ³ç®æ´ï¼å¥½ç解çwebå¼åæ¡æ¶ã主è¦çä¼å¿éä¸ä½ç°å¨åæçæ¯æãææ¡£çå ¨å¤ï¼è¿ææ´»è·ç社åºä¸ã
Canphpæ¯ä¸ä¸ªä¸å½å¼æºçphpæ¡æ¶ï¼ä¸»è¦ç设计ç念就æ¯ä¸ºäºè¿½æ±ç®åï¼åå°phpåå¦è çå¦ä¹ ææ¬ï¼èä¸è¿½æ±é«æçï¼æ¨¡çç±»ä¸æä¾å ¶ä»æ ç¾ï¼ç´æ¥åºç¨phpçæºä»£ç ï¼è¿æå®æ¯å¾®å æ ¸è®¾è®¡ï¼ç§»æ¤æ§å¼ºï¼æ¾æ£è¦åçç¹ç¹ï¼è½éæå°ä½ ä»»ä½ä¸ä¸ªç³»ç»éé¢ã
CakePHPå¼åæ¡æ¶å¦æä½ ä»ç¶éè¦ç¼åé¢åPHP4å ¼å®¹ç代ç ï¼CakePHPå°æ¯ä¸ä¸ªé常ä¸éçéæ©ï¼å¨PHP4&5çMVCå¼æ¡æ¶å表éé¢ï¼CakePHPé½æ¾ç»æ¯ææµè¡çã
PHP常ç¨æ¡æ¶æï¼thinkphpï¼å½äººå¼åï¼ææ¡£æ¯è¾å ¨ï¼ä¸æææ¡£ãå ¥é¨æ¯è¾ç®åãåæ³å¿«ãlaravelï¼å½å¤äººåçï¼å ¥é¨é¨æ§é«ãè±è¯ææ¡£ï¼ç¤¾åºæ¯è¾æ´»è·ãsymfonyï¼å½å¤äººåçãé¨æ§æ¯è¾é«ï¼è±è¯ææ¡£ã
ææµè¡çPHPæ¡æ¶ï¼Symfonyï¼LaravelåYiiãSymfonySymfonyæ¯ä¸å¥å¯éå¤ä½¿ç¨çPHPç»ä»¶ï¼å®å 许å¼åè 人åå建å¯æ©å±çï¼é«æè½çåºç¨ç¨åºãå®æ个ç»ä»¶å¯ä»¥éæ©ï¼å¼å人åå¯ä»¥æ足å¤çèªç±å¨RADç¯å¢ä¸è¿è¡è¯éªåå·¥ä½ã
ä¼ä¸å¼åç¨tp6è¿æ¯hyperf1ãç¼ç¨è¯è¨ç±»åä¸åï¼TP6æ¯ä¸ç§åºäºPrologè¯è¨çé»è¾ç¼ç¨è¯è¨ï¼èJavaæ¯ä¸ç§åºäºé¢å对象ç¼ç¨çéç¨ç¼ç¨è¯è¨ãåºç¨åºæ¯ä¸åï¼TP6主è¦ç¨äºäººå·¥æºè½ãèªç¶è¯è¨å¤çåä¸å®¶ç³»ç»çé¢åï¼èJavaå广æ³åºç¨äºä¼ä¸çº§åºç¨åWebåºç¨å¼åã
2ãæ²¡å¿ è¦ãtp6æ²¡å¿ è¦ç¨å¤åºç¨ï¼å 为æ¬å°±æ¯åå ¥å£èªå¨å¤åºç¨æ¨¡å¼ï¼å¹¶ä¸ä¸éè¦ä½¿ç¨composeræ¥å¼å¯å¤åºç¨æ¨¡å¼æ©å±ï¼tp6åå¸å¼é¨ç½²å¤ä¸ªæ°æ®åºï¼å®ç°è¯»åå离ãtp6çåå¸å¼é¨ç½²è¯»ååä»ç¶æ¯ä¸ä¸ªç³»ç»ã
3ãtp6loadåimportæ¯PHPå¼åä¸é常常ç¨ç两个å½æ°ãtp6loadç¨äºå 载类æ件ï¼èimportåæ¯éè¿åå空é´å 载类æ件ã
4ãå¯ä»¥æ¯å¯ä»¥ï¼ä½æ¯ä¸æ¨èï¼commonéé¢æ¾çæ¹æ³æ´å¤çæ¯å ¬ç¨çæ¹æ³ï¼æ¯å¦å¾å¤æ¨¡åé½ä¼è°ç¨çæ¹æ³ãå æ¤ï¼å¦æä¸ä¸ªæ¹æ³åªæ¯ä¸ªå«æ¨¡å使ç¨çè¯ï¼å»ºè®®å°å®æ¾å°æ¨¡å对åºçå é¨å³å¯ï¼è¿æ ·æ´æ¹ä¾¿ä»£ç çéæåè¿ä»£ï¼æ´åºè²ã
5ãè¿å 个çåéçè¯åºè¯¥æ¯åç¡çè·¯ç±å¨æ好ï¼è ¾è¾¾åTPæ¯å ¥é¨çº§å®¶ç¨è·¯ç±å¨ãå¦ææ¯å¯¹ç½éæå¾é«è¦æ±çè¯å¯ä»¥èèæç§æè 软路ç±ãå¦ææ¯ä½å¸¦å®½ç¯å¢çè¯å 个çåçè·¯ç±å¨é½å·®ä¸å¤çã
phpæ¡æ¶åªä¸ªå¥½ç¨,容æä¸æ1ãSpeedPHPæ¡æ¶æ¯ä»å®é è¿è¡çåä¸ç³»ç»ä¸åå ¶ç²¾åèæçï¼å¨ç¨³å®æ§åè¿è¡é度ä¸é½é常åºè²ï¼åæ¶æçæ¸ æ°çæ¶æï¼æ´æå©äºæé«å¢éå¼åæçï¼æç¨ä¼å¤ï¼å ¥é¨å®¹æï¼å·ç§°æéååå¦è çPHPæ¡æ¶ï¼å¿«éå¸¦ä½ è¿å ¥PHPé«æçè¡åã
2ãLavarelï¼è¿æ¯ä¸æ´å¥è¯æ³ç®æ´ï¼å¥½ç解çwebå¼åæ¡æ¶ã主è¦çä¼å¿éä¸ä½ç°å¨åæçæ¯æãææ¡£çå ¨å¤ï¼è¿ææ´»è·ç社åºä¸ãå¦ä¹ Lavarelï¼éè¦å 对PHPè¯è¨ãé¢å对象ãæ°æ®åºçæä½æä¸ä¸ªåºæ¬çå¦ä¹ åºç¡ã
3ãæ¨è使ç¨thinkphpï¼è¿ä¸ªæ¯è¾ç®åï¼ä¸ææ¯è¾å¿«ThinkPHPæ¯ä¸ä¸ªå¿«éãå ¼å®¹èä¸ç®åçè½»é级å½äº§PHPå¼åæ¡æ¶ï¼è¯çäºå¹´åï¼ååFCSï¼å¹´å æ¦æ£å¼æ´å为ThinkPHPï¼ä»¥ä¸ç®ç§°TPï¼ãä½ä¸ºå½äº§æ¡æ¶ï¼å¨å½å ã
4ãé¢ä¸»å¦ææ¯ä¸ä¸ªåæ¥è§¦PHPçæ°äººçè¯ï¼å¯è½ä¼è§å¾æ¡æ¶å¾å¤ï¼å个æ¡æ¶é½æåèªçç¹ç¹ï¼é¾ä»¥ææ¡ï¼å ¶å®è½ç¶æ¯ä¸ªæ¡æ¶çç¹ç¹ä¸ä¸æ ·ï¼ä½æ¯æ¡æ¶çæè·¯é½æ¯å·®ä¸å¤çï¼å¦æä½ ç¨çäºï¼å°±ä¼è§å¾ä»ä¹æ¡æ¶é½å·®ä¸å¤ã
5ãä»MVCï¼DAO/ï¼widgetsï¼cachingï¼ç级å¼RBACï¼Webæå¡ï¼å°ä¸»ä½åï¼INåLNï¼Yiiæä¾äºä»æ¥Web0åºç¨å¼åæéè¦çå ä¹ä¸ååè½ãèä¸è¿ä¸ªæ¡æ¶çä»·æ ¼ä¹å¹¶ä¸å¤ªé«ãäºå®ä¸ï¼Yiiæ¯æææççPHPæ¡æ¶ä¹ä¸ã
6ãä½ å¥½ï¼å ¶å®ç°å¨ä¸»æµçPHPæ¡æ¶é½åæä¼å¿ï¼èä¸é½å¯ä»¥å®æphpå¼åè çåºæ¬è¦æ±ãä½æ¯å ¶å®å¨ä½¿ç¨çä¸ï¼æ¯ä¸ªåºåé½æ¯ä¸ä¸æ ·çãå¨ä¸å½ï¼thinkphpç使ç¨çè¯å®æ¯æé«çï¼èå¨å¤å½å个æ¡æ¶ç使ç¨çä¹ä¸ä¸æ ·ã
ThinkPHP多语言rce复现分析
前言
最近对 ThinkPHP 多语言远程代码执行 (RCE) 漏洞进行了一番深入学习,该漏洞在特定版本的 ThinkPHP 中存在,本文将详细分析其利用条件、环境搭建、漏洞流程以及漏洞复现的过程。
一、漏洞信息
利用该漏洞,需满足以下条件:
1. 确保已安装 ThinkPHP,并知道 pearcmd.php 文件的位置(默认为 /usr/local/lib/php/pearcmd.php,Docker 版本镜像中 pear 默认已安装)
2. 需开启 php.ini 中的 register_argc_argv 选项(Docker 的 PHP 镜像是默认开启的)
3. ThinkPHP 需开启多语言功能
影响范围:
主要影响 ThinkPHP 版本在 6.0.1、5.0.0、5.1.0 以下至对应补丁修复版本的用户。
二、环境搭建
首先,从 GitHub 下载 ThinkPHP 源码(例如,版本为 6.0.),解压后,通过 composer 安装依赖。在 app/middleware.php 文件中取消注释以开启多语言功能。接着,通过 go-pear.phar 或 Docker 安装 pear。
三、漏洞分析
漏洞主要在于 LoadLangPack 类中的 handle 函数,该函数先通过 detect() 方法检查请求参数是否设置了语言,之后将设置值返回并用于切换语言集。在传递给 load() 函数后,参数又传入 parse() 函数,直接用 include 包含文件,此为漏洞触发点。从获取参数到传入 parse() 函数前,均未对内容进行过滤。
四、漏洞复现
在测试环境中(macOS、PHP 7.3、Apache 2.4),通过以下步骤进行复现:
1. 验证 pearcmd 的存在,获取正确路径(当前环境为 /usr/local/pear/share/pear/pearcmd.php)。
2. 了解如何利用 pear,在开启 register_argc_argv 选项后,参数将作为 $_SERVER['argv'] 的一部分传入。
3. 使用 poc 测试,在 /tmp 目录下写入 admin.php 文件,确保正确写入,验证参数解析过程。
4. 利用文件包含访问写入的文件,实现漏洞复现。
注意,除了使用 config-create 命令,还可以使用 Install 命令进行下载操作。若喜欢本文,别忘了点赞与收藏。关注雷石安全实验室,获取更多网络安全知识与技术文章。