PHPCMS整站系统漏洞分析

合集下载

[漏洞分析]thinkphp5.x全版本任意代码执行分析全记录

[漏洞分析]thinkphp5.x全版本任意代码执行分析全记录

[漏洞分析]thinkphp5.x全版本任意代码执⾏分析全记录0x00 简介2018年12⽉10⽇中午,thinkphp官⽅公众号发布了⼀个更新通知,包含了⼀个5.x系列所有版本存在被getshell的⾼风险漏洞。

吃完饭回来看到这个公告都傻眼了,整个tp5系列都影响了,还是getshell。

(以下截图为后截图,主要是想讲⼀下从⽆到有,如何分析漏洞,整个过程是怎么样的。

)0x01 漏洞原理下午睡醒,赶紧起来分析漏洞。

结合官⽅公告说的由于对控制器名没有⾜够的检测,再查看官⽅git commit信息拉⼀个tp下来,⽤的是tp 5.1.29的版本,windows+phpstudy ⼀把梭,搭建好环境。

在官⽅修改的地⽅加断点(thinkphp\library\think\route\dispatch\Module.php),加载默认的控制器来分析。

请求:http://127.0.0.1/index.php/index/index/index命中断点。

⼀步步跟进controller的⾛向,发现在同⽂件下的 exec函数,实例化控制器跟进controller⽅法,thinkphp\library\think\App.php使⽤parseModuleAndClass⽅法来解析,继续跟进分析⼀下代码,发现会有⼀个判断,当控制器名中包含了反斜杠,就会直接返回,继续跟踪。

此处没有包含,所以会进⼊下⾯的判断,最后使⽤parseClass来解析,跟如parseClass函数发现进过parseName之后index变成了⾸字母⼤写,原因是经过了命名风格转换。

最后会将命名空间等进⾏拼接返回我们带命名空间的完整类名。

跟进,回到了controller⽅法,此时判断类是否存在,不存在会触发⾃动加载类。

之后就是实例化类,使⽤反射来调⽤类的相应⽅法了。

(偷懒省略掉了,主要是介绍⼀下分析的过程)⼤概流程摸清楚了,那么这个漏洞是怎么触发的呢?在跟踪的时候我们发现,类名都是带有完整的命名空间的,⽽命名空间恰好就是使⽤反斜杠来划分,结合那⼀个判断代码:反斜杠是否存在,直接返回类名的操作。

PHP文件包含漏洞详解

PHP文件包含漏洞详解

PHP文件包含漏洞详解(1)一、什么才是”远程文件包含漏洞”?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。

涉及到的危险函数:include(),require()和include_once(),require_once()Include:包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php文件继续执行。

Require:跟include唯一不同的是,当产生错误时候,include下面继续运行而require停止运行了。

Include_once:这个函数跟include函数作用几乎相同,只是他在导入函数之前先检测下该文件是否被导入。

如果已经执行一遍那么就不重复执行了。

Require_once:这个函数跟require的区别跟上面我所讲的include和include_once是一样的。

所以我就不重复了。

php.ini配置文件:allow_url_fopen=off 即不可以包含远程文件。

Php4存在远程&本地,php5仅存在本地包含。

二、为什么要包含文件?程序员写程序的时候,不喜欢干同样的事情,也不喜欢把同样的代码(比如一些公用的函数)写几次,于是就把需要公用的代码写在一个单独的文件里面,比如 share.php,而后在其它文件进行包含调用。

在php里,我们就是使用上面列举的那几个函数来达到这个目的的,它的工作流程:如果你想在 main.php里包含share.php,我将这样写include(“share.php”)就达到目的,然后就可以使用share.php中的函数了,像这个写死需要包含的文件名称的自然没有什么问题,也不会出现漏洞,那么问题到底是出在哪里呢?有的时候可能不能确定需要包含哪个文件,比如先来看下面这个文件index.php的代码:if ($_GET[page]) {include $_GET[page];} else {include ”home.php”;}很正常的一段PHP代码,它是怎么运作的呢?上面这段代码的使用格式可能是这样的:/m4r10/php/index.php?page=main.php或者/m4r10/php/index.php?page=downloads.php结合上面代码,简单说下怎么运作的:1.提交上面这个URL,在index.php中就取得这个page的值($_GET[page])。

安全测评漏洞分析报告

安全测评漏洞分析报告

安全测评漏洞分析报告安全测评漏洞分析报告一、漏洞描述通过对目标系统进行安全测评,发现以下漏洞:1. SQL注入漏洞:存在SQL注入漏洞,攻击者可以通过构造恶意的SQL语句,绕过应用程序的验证机制,直接操作数据库,获取敏感信息或进行非法操作。

2. XSS跨站脚本攻击漏洞:存在未对用户输入进行过滤和转义处理的情况,攻击者可以通过在页面中注入恶意的脚本,窃取用户的敏感信息,或进行其他恶意操作。

3. 文件上传漏洞:存在未对上传文件进行有效的验证和限制的情况,攻击者可以上传恶意的文件,包括木马程序或向量图等,进行远程执行恶意代码或窃取敏感信息。

二、风险分析1. SQL注入漏洞带来的风险:攻击者通过利用SQL注入漏洞,可以绕过用户身份验证,获取数据库中的敏感信息,如用户密码、用户私密数据等。

攻击者还可以通过修改数据库的内容,执行恶意操作,如删除数据、篡改数据等。

2. XSS跨站脚本攻击漏洞带来的风险:攻击者通过注入恶意的脚本代码,可以窃取用户的敏感信息,如用户的登录凭证、用户的个人信息等。

攻击者还可以通过恶意脚本代码进行钓鱼操作,如欺骗用户输入敏感信息或下载恶意软件等。

3. 文件上传漏洞带来的风险:攻击者通过上传恶意文件,可以在目标服务器上执行任意的恶意代码。

攻击者可以窃取服务器上的敏感信息,如用户私密数据、数据库信息等。

攻击者还可以利用上传的恶意文件,在服务器上进行远程控制,进行其他恶意操作。

三、修复建议1. SQL注入漏洞修复建议:应使用参数化查询和输入过滤来防止SQL注入攻击。

对于用户输入的数据,应使用数据库提供的参数化查询功能,避免将用户输入直接拼接到SQL语句中。

同时,还应对用户输入进行严格的过滤和校验,确保输入的数据符合预期的格式和范围。

2. XSS跨站脚本攻击漏洞修复建议:应对用户输入进行有效的过滤和转义处理。

在展示用户输入的内容时,应将特殊字符进行转义,避免被当做脚本执行。

同时,还应限制用户输入的规范,在输入框中禁止输入HTML标记和JavaScript代码。

Jieqi(杰奇)CMSV1.6PHP代码执行0day漏洞EXP漏洞预警-电脑资料

Jieqi(杰奇)CMSV1.6PHP代码执行0day漏洞EXP漏洞预警-电脑资料

Jieqi(杰奇)CMSV1.6PHP代码执行0day漏洞EXP漏洞预警-电脑资料杰奇网站管理系统(简称JIEQI CMS,中国国家版权局著作权登记号:2006SR03382)是一套模块化的网站架设系统,具备简单灵活、性能卓越、安全可靠等特性,。

我们为大家提供了目前最流行的杰奇小说连载系统、杰奇原创漫画系统及数字出版解决方案,并提供各类网站定制服务。

该系统存在多个远程安全漏洞,今天报告的这个是1.6版本的一个远程代码执行漏洞,应该有2年多历史了。

需要有一个能创建圈子的用户。

<?php print_r('+---------------------------------------------------------------------------+Jieqi CMS V1.6 PHP Code Injection Exploitby flyh4tmail: phpsec at hotmail dot comteam: +---------------------------------------------------------------------------+'); /** * works regardless of php.ini settings*/ if ($argc < 5) { print_r('+---------------------------------------------------------------------------+Usage: php '.$argv[0].' host path usernamehost: target server (ip/hostname)path: path to jieqicms uasename: a username who can create groupExample:php '.$argv[0].' localhost /jieqicmsv1.6/ vipuser1 password+---------------------------------------------------------------------------+'); exit; } error_reporting(7); ini_set('max_execution_time', 0); $host = $argv[1]; $path = $argv[2]; $username = $argv[3]; $password = $argv[4]; /*get cookie*/ $cookie_jar_index = 'cookie.txt'; $url1 = "http://$host/$path/login.php"; $params = "password=$password&username=$username&usecookie=86400&submit=%26%23160%3B%B5%C7%26%23160%3B%26%23160%3B%C2%BC%26%23160%3B&action=login&jumpreferer= 1"; $curl1 = curl_init(); curl_setopt($curl1, CURLOPT_URL, $url1); curl_setopt($curl1, CURLOPT_COOKIEJAR, $cookie_jar_index); curl_setopt($curl1, CURLOPT_POST, 1); curl_setopt($curl1, CURLOPT_POSTFIELDS, $params); ob_start(); $data1 = curl_exec($curl1); if ($data1 === FALSE) { echo "cURL Error: " . curl_error($ch); exit('exploit failed'); } curl_close($curl1); ob_clean(); /*get shell*/ $params ='-----------------------------23281168279961Content-Disposition: form-data; name="gname" '; $params .="';"; $params .='eval($_POST[p]);//flyh4t-----------------------------23281168279961Content-Disposition: form-data; name="gcatid" 1-----------------------------23281168279961Content-Disposition: form-data; name="gaudit" 1-----------------------------23281168279961Content-Disposition: form-data; name="gbrief" 1-----------------------------23281168279961--'; $url2 = "http://$host/$path/modules/group/create.php"; $curl2 = curl_init(); $header =array( 'Content-Type: multipart/form-data; boundary=---------------------------23281168279961' ); curl_setopt($curl2, CURLOPT_URL, $url2); curl_setopt($curl2, CURLOPT_HTTPHEADER, $header); curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookie_jar_index); curl_setopt($curl2, CURLOPT_POST, 1); curl_setopt($curl2, CURLOPT_POSTFIELDS, $params); ob_start(); curl_exec($curl2); curl_close($curl2); $resp = ob_get_contents(); //$rs就是返回的内容ob_clean(); preg_match('/g=([0-9]{1,4})/', $resp, $shell); //print_r($shell); //print_r($resp); $url = "http://$host/$path/files/group/userdir/0/$shell[1]/info.php"; echo "view you shell here(password:p)\r\n" ; echo $url;作者:fly@wolvez。

网站安全漏洞报告

网站安全漏洞报告

网站安全漏洞报告概述本报告旨在汇报关于网站安全方面存在的漏洞问题。

通过对该网站的审查和测试,我们发现了以下的安全漏洞。

漏洞详情1. CSRF漏洞:网站存在跨站请求伪造(Cross-Site Request Forgery,CSRF)漏洞。

攻击者可以伪造用户请求,从而执行未经授权的操作。

建议立即修复此漏洞,加入合适的防护措施。

2. XSS漏洞:网站存在跨站脚本攻击(Cross-Site Scripting,XSS)漏洞。

攻击者可以注入恶意脚本代码,从而盗取用户信息或篡改页面内容。

建议对用户输入进行合适的过滤和转义,以防止XSS攻击。

3. 密码安全性弱:网站的用户密码安全性较弱。

建议采用更强的密码策略,如要求用户使用包含字母、数字和特殊字符的复杂密码,并加强密码加密算法。

4. 未安全处理敏感数据:网站在处理敏感数据时存在安全漏洞,如明文存储用户密码、未加密传输敏感信息等。

建议采用合适的加密算法,确保敏感数据的安全处理。

建议措施为了确保网站的安全性,我们建议采取以下措施进行漏洞修复和加强防护。

1. 及时修复漏洞:根据提供的漏洞详情,立即修复存在的漏洞,并确保修复措施的有效性和完整性。

2. 强化用户密码策略:要求用户使用复杂密码,并进行密码强度校验。

同时,定期提示用户修改密码,增加密码的安全性。

3. 注入攻击防护:对用户输入进行严格的过滤和转义,以防止XSS等注入攻击。

确保用户输入的数据安全性。

4. 加密敏感数据:在存储和传输敏感数据时,采用适当的加密算法,确保数据的机密性和完整性。

总结本报告总结了网站存在的安全漏洞问题,并提供了相应的修复和加强防护的建议措施。

请尽快采取措施修复漏洞,以确保网站的安全性和用户的信息安全。

PHP网站常见的安全漏洞

PHP网站常见的安全漏洞

PHP网站常见的安全漏洞PHP网站常见的安全漏洞目前PHP网站常见的漏洞有五种,分别是Session文件漏洞、SQL注入漏洞、脚本命令执行漏洞、全局变量漏洞和文件漏洞。

下面为大家简单介绍一些。

1、session文件漏洞Session攻击是黑客最常用到的攻击手段之一。

当一个用户访问某一个网站时,为了免客户每进人一个页面都要输人账号和密码,PHP 设置了Session和Cookie用于方便用户的使用和访向。

2、SQL注入漏洞在进行网站开发的时候,程序员由于对用户输人数据缺乏全面判断或者过滤不严导致服务器执行一些恶意信息,比如用户信息查询等。

黑客可以根据恶意程序返回的结果获取相应的信息。

这就是月行胃的SQL注入漏洞。

3、脚本执行漏洞脚本执行漏洞常见的`原因是由于程序员在开发网站时对用户提交的URL参数过滤较少引起的,用户提交的URL可能包含恶意代码导致跨站脚本攻击。

脚本执行漏洞在以前的PHP网站中经常存在,但是随着PHP版本的升级,这些间题已经减少或者不存在了。

4、全局变量漏洞PHP中的变量在使用的时候不像其他开发语言那样需要事先声明,PHP中的变量可以不经声明就直接使用,使用的时候系统自动创建,而且也不需要对变量类型进行说明,系统会自动根据上下文环境自动确定变量类型。

这种方式可以大大减少程序员编程中出错的概率,使用起来非常的方便。

5、文件漏洞文件漏洞通常是由于网站开发者在进行网站设计时对外部提供的数据缺乏充分的过滤导致黑客利用其中的漏洞在Web进程上执行相应的命令。

假如在lsm.php中包含这样一段代码:include($b.”/aaa.php”.),这对黑客来说,可以通过变量$b来实现远程攻击,可以是黑客自已的代码,用来实现对网站的攻击。

可以向服务器提交 a.php include=http://lZ7.0.0. 1/b.php,然后执行b.php的指令。

下载全文。

常见的操作系统漏洞及解决方法

常见的操作系统漏洞及解决方法

常见的操作系统漏洞及解决方法操作系统功能强大,但同样也会有漏洞会被病毒利用。

下面由店铺整理了常见的操作系统漏洞及解决方法,希望对你有帮助。

常见的操作系统漏洞及解决方法常见的操作系统漏洞一、SQL注入漏洞SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。

在设计程序,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。

通常情况下,SQL注入的位置包括:(1)表单提交,主要是POST请求,也包括GET请求;(2)URL参数提交,主要为GET请求参数;(3)Cookie参数提交;(4)HTTP请求头部的一些可修改的值,比如Referer、User_Agent等;(5)一些边缘的输入点,比如.mp3文件的一些文件信息等。

SQL注入的危害不仅体现在数据库层面上,还有可能危及承载数据库的操作系统;如果SQL注入被用来挂马,还可能用来传播恶意软件等,这些危害包括但不局限于:(1)数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。

作为数据的存储中心,数据库里往往保存着各类的隐私信息,SQL注入攻击能导致这些隐私信息透明于攻击者。

(2)网页篡改:通过操作数据库对特定网页进行篡改。

(3)网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。

(4)数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被篡改。

(5)服务器被远程控制,被安装后门。

经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

(6)破坏硬盘数据,瘫痪全系统。

解决SQL注入问题的关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。

通常使用的方案有:(1)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。

漏洞分析报告

漏洞分析报告

漏洞分析报告
标题:漏洞分析报告
1. 引言
介绍分析报告的目的和背景,概述所分析的漏洞的重要性和
影响。

2. 漏洞概述
提供漏洞的基本信息,包括漏洞类型、风险级别、受影响系
统/应用程序和相关的CVE标识。

3. 漏洞分析
对漏洞进行详细分析,包括以下方面内容:
- 漏洞触发条件:介绍漏洞被利用的触发条件,例如输入特
定的数据、特定的用户权限等。

- 漏洞利用方式:描述黑客可以如何利用漏洞来攻击系统/应
用程序。

- 漏洞影响范围:分析漏洞可能造成的影响,例如数据泄露、权限提升或系统崩溃等。

- 漏洞利用示例:提供一个具体的漏洞利用示例,以帮助读
者更好地理解漏洞。

- 漏洞修复建议:针对漏洞提出相应的修复建议,包括修补
程序、配置改进或安全策略调整等。

4. 漏洞验证
通过实际验证,证明漏洞存在,以确保分析结果的准确性和
可靠性。

可以提供漏洞验证过程中使用的测试环境和操作步骤。

5. 漏洞报告
包括对漏洞的推广,包括将该漏洞报告给相关的安全厂商、开发者或组织,以便他们及时修复漏洞。

6. 结论
总结分析报告的主要内容,指出漏洞的严重程度和紧急性,并提出应对策略。

7. 参考文献
引用文献、工具和其他资源,以支持分析报告中提出的观点和建议。

注意事项:
- 报告应该简明扼要,但又包含必要的详细信息。

- 报告应具备逻辑结构,以便读者能够轻松理解。

- 报告应采用客观、中立的态度,不带有个人偏见或情绪化的词语。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PHPCMS整站系统漏洞分析
(原始稿件,已发表于2010年黑客手册第一季)
(廖坚先)Bykid@广东科干
今天要跟大家分享这个漏洞是版本为phpcms2008SP3 _gbk_20100125的整站系统的,这是个包含漏洞。

立刻进正题,最后再总结分析;
漏洞还是出现在最容易被忽视的wap模块,打开wap文件夹下的index.php文件,关键代码如下:
第14行也就是“include './include/'.$action.'.inc.php';”,程序员很放心的直接把用户提交的$action变量放进了包含文件的路径中,虽然后缀被限制成“.inc.php”,但是有没有想过管理员的管理模块的文件也是后缀为“.inc.php”的呢?而且很多这些模块文件都是用常量“IN_PHPCMS”作为防止直接访问的标识,同时管理员的管理模块的访问权限的检查是在整站根目录的admin.php文件进行的,那样我也就可以放心的包含了。

还有一点值得高兴的是因为是“变异”的包含文件所以有的变量是没有初始化的也就是我们可以控制了。

但“杯具”的是很多模块的功能小模块是通过“switch($action)”来运行的,也就是这类型的文件我们只能找“default”语句块来利用了。

经过双手都数不清双击打开文件检查,找到了一个不算完美的利用方法。

可以包含的文件是“include/fields/box/field_add.inc.php和field_delete.inc.php”,“fields”下的文件都是对表中的字段操作的文件。

这次要进行操作的字段是“phpcms_member_cache”表(PS:这个表是phpcms_member的镜像表,真搞不懂为什么要搞出这个表来)中的“password”字段。

为什么我会说不完美呢,因为是操作的是password字段,不是一个记录,但是却可以达到进入管理后台的目的。

field_add.inc.php和field_delete.inc.php关键代码如下:
接下来说我的思路,首先是通过“field_delete.inc.php”删掉password字段,然后再通过“field_add.inc.php”添加一个默认值为admin的MD5值的password字段,这样所有的记录的password都是admin了(很郁闷吧),不过最后还是可以把“phpcms_member”重新复制到“phpcms_member_cache”表中的。

实践是检验真理的唯一标准。

实践用的是“phpcms2008sp3_gbk_091230”,但打过“phpcms2008_patch_gbk_100125”补丁。

实践要用到的文件如图一:
首先运行“drop_cache_password.bat”删掉删掉password字段,相关文件“drop_cache_password.bat”(内容如图二)和“drop.txt”(内容如图三)。

“drop.txt”提交了变量action(包含的文件),tablename(表的名称),field(字段)。

执行之后如图四表明成功删除表,:
接下来运行“add_cache_password.bat”,相关文件“add_cache_password.bat”(内容如图五)和“add.txt”(内容如图六)。

“add.txt”增加提交了变量fieldtype(字段的类型),maxlength(类型的最大长度),defaultvalue (默认值),执行之后如图七表明成功。

现在看看表“phpcms_member_cache”有没有被改掉,如图八:
最后上传“recoverCache.php”到phpcms的根目录恢复“phpcms_member_cache”表。

如图九运行成功:
再看看“phpcms_member_cache”表如图十:
漏洞的修补,最简单的修补方法是也用switch($action)语句,毕竟wap下要包含的文件就四个;修改后的代码如下(PS:代码没有测试,短短几个语句我觉得是没问题的):
$lang = include './include/lang.inc.php';
if(preg_match('/(mozilla|m3gate|winwap|openwave)/i', $_SERVER['HTTP_USER_AGENT'])) {
header('location:../');
}
wmlHeader($PHPCMS['sitename']);
$action = isset($action) && !empty($action) ? $action : 'index';
switch($action) //修改后代码--开始
{
case 'index':
include './include/index.inc.php';
case 'list':
include './include/list.inc.php';
case 'show_info':
include './include/show_info.inc.php';
case 'show_news':
include './include/show_news.inc.php';
}//修改后代码—结束
$html = CHARSET != 'utf-8' ? iconv(CHARSET, 'utf-8', $html) : $html;
echo str_replace('<br/>', "<br/>\n", $html);
wmlFooter();
?>
最后,大家要是有兴趣可以找更加完美的利用方法。

我只是想证明这个漏洞的严重性,所以就不去继续找更好的方法了。

相关文档
最新文档