看我是如何利用升级系统一键GetShell

程序下载地址:https://pan.baidu.com/s/1VdoPLqNP6V6aguodza9uQQ

马子文件下载地址:https://pan.baidu.com/s/1fwDQ7fdiqsv_Azr9Ii89mg提取码:dm8q

版本:V4.9.015

简介:PHPOK企业站系统(以下简称系统或本系统),采用PHP+MYSQL语言开发,是一套成熟完善的企业站CMS系统。本系统函盖功能全面,自定义功能强大,扩展性较好、安全性较高。可以轻松解决大部分企业站需求。

0x01 程序安装到复现

1.第一步安装系统

2.第二步这里要创建数据库,不然他不会自动创建。

3.第三步完成安装,然后我们点击进入后台。

4.第四步进入后台-》程序升级-》升级配置

5.第五步,服务端构建代码,创建`index.php`放在网页根目录

[PHP]纯文本查看复制代码

?

6.第六步,后台-》程序升级-》在线升级,我这里改下代表是我服务器的升级软件

7.第七步,我们点击升级,在用D盾监听下目录是否上传成功木马文件。

8.第八步,访问木马文件,看看是否能访问成功

0x02 代码审计

漏洞所在文件:

漏洞文件代码:(只贴上相关代码)

首先我们看第369行,,这里我们看到他这里是接收变量中的值,那么就是把接收的值转换成类型。

第370行,判断变量是否有赋值,如果没有复制那么就提示一个数据。

第373行,,函数代表空格转换成。

第374行,,这里可以看到调用本身文件中的方法,那我们进入这个方法看看,在文章的第465行。

第465行,,函数代表检查文件或目录是否存在。

第470行,,申明一个空数组。

第471行,,函数代表引入一个文件,如果没有找到这个文件只会提示个警告不会终止错误。

第478行,,函数代表检查文件或目录是否存在。

第486行,,函数代表字符串切割,并且判断不等于那么就进入487行区间。

第489行,,URL地址拼接,函数代表空格转换成,函数代表移除字符串两侧的空白字符。

第493行,,判断外部传入的是否等于1或者等于4。

第494行,,这里使用了3元运算符。

第495行,,这里代表是获取当前访问的网址。

第496行,,获取客户端Ip

第497行,,URL地址拼接,函数代表空格转换成。

第498行,,也是URL地址拼接。

第499行,,函数代表判断是否有某函数。

第502行,,获取服务器PHP版本。

第506行,,获取服务端mysql版本号。

第511行,,这里是设置CURL请求的超时时间。

第513行,,设置请求IP。

第515行,,请求URL地址,返回内容。

下面就是返回数据,那么我们回到第一张图片。

第375行,,这里代表是把接收到的内容转换成数据。

第376行,,判断不等于。

第379行,,判断是否为空。

第382行,,把接收到的值,从转换成实体。

第383行,,写入当前文件,第一个参数代表路径,第二个参数代表内容。

第384行,,我们看到这里的意思就是解压文件到某个目录。

第386行,,删除写入的文件。

第386行,,这里是字符串切割。

第387行,,这里调用自定义方法,也是在本文章第152行。

第154行,,定义一个空数组。

第155行,,这里大概意思是遍历当前文件所有文件名,这里我就不去找代码,就把代码直接复制出来。

那么代码路径在中第297-313行

第156行,,判断是否为空,并且判断他的数据是不是小于1。

第159行,,代表统计字符串长度。

第162行,,循环遍历数组。

第163行,,代表移除字符串两侧的字符。

第165行,,这里代表跳出循环。

第167行,,代表字符串切割。

第168行,,这里判断是否等于。

第169行,,代表移除字符串两侧的字符,代表写入文件。

第183行,,代表字符串切割,从0到10切割判断等于。

第185行,,代表判断文件是否存在。

第187行,,剪切文件到某个目录。

第189行,,代表判断目录是否存在,并且判断临时文件是否不存在。

第190行,,创建目录。

第194行,,代表判断文件是否存在,并且判断不等于文件的进入区间。

第194行-第210行都是一样,剪切和创建目录。

第205行,,代表整个文件读入一个数组中。

第209行,,代表数组循环。

第213行,,代表移除字符串两侧的字符。

第214行,,判断是否有值,并且判断文件是否存在。

第215行,,代表删除文件。

第218行,,判断是否有值,并且判断目录是否存在。

第225行,这里又看到调用自己的方法。

为何还有那么多代码要分析。

我们接下来继续往下分析,这里的话我就把代码Copy出来,代码太多截图不好看。

我这里挑重要的函数讲解下,这里都是sql执行语句,没有什么可以分析的。

函数:

,代表检查文件或目录是否存在。

,代表读取文件,如果携带2个参数那么就是写入。

,代表字符串替换。

,代表查看字符串长度。

,代表字符串切割。

,代表变量删除。

,代表把字符串切割成数组。

,代表移除字符串两侧的字符。

好了 我们回到上上张图片。

第231行,,代表移除字符串两侧的字符,代表写入文件。

第233行,,代表字符串替换。

第240行,,代表检查文件或目录是否存在。

第241行,,引入一个文件。

第243行,,代表删除文件。

第244行,,代表把目录结构挪列出来。

第245行,,判断值是否存在,并且判断他的数量是否小于0。

第247行,,这里代表循环删除某个文件。

第251行,这里又进入一个自定义方法区间。

老样子,Copy代码,代码量不多我就Copy出来。

那么我们还是做简单的介绍下重要函数。

,代表移除字符串两侧的字符。

,判断文件是否可写。

,代表检查文件或目录是否存在。

,字符串替换。

,写入文件或读取文件。

这里已经介绍完毕了,整个审计分析逻辑在上面。

0x03 漏洞修复

路径:

第152行,方法里面的循环加上这段代码去过滤。

,这里我只写了比较有危害的关键字。

作者:小猪 文章来源:i春秋论坛

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181102B1IAQN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励