惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
博客园 - 【当耐特】
月光博客
月光博客
Vercel News
Vercel News
D
Docker
I
InfoQ
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
GbyAI
GbyAI
有赞技术团队
有赞技术团队
雷峰网
雷峰网
博客园 - 聂微东
小众软件
小众软件
Y
Y Combinator Blog
腾讯CDC
L
LangChain Blog
The GitHub Blog
The GitHub Blog
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss

吹比💨

NFS 服务引发的一次“诡异”应急响应 银狐使用WDAC来对抗杀软 浏览器第三方Cookie保护导致无法使用Github.dev 使用pushState伪造浏览器地址栏 一次排查网站劫持过程流水账 手动导出 Microsoft Authenticator 中的2FA密钥 使用CloudFlare的IP Lists功能来做访问控制 FrontJS网站错误监控插件存在弹窗广告 宝塔面板可能存在未知漏洞的分析与处置方法 CDN厂商解决域前置问题 中文域名那些事 TLS握手指纹(JA3/JA3S)检测恶意软件流量 [A-Z]{2}\d{2}.cc 团伙的一些公开信息 Azure旗下奇怪的静态托管服务 Csrf与浏览器第三方Cookie策略的问题 Pppoe密码嗅探 Publicsuffix那些事 一次有意思的域名追踪 CobaltStrike通信中host字段的获取 XFF那些事 CORB那些事 Referrer Policy那些事 使用CloudFlare来为网站开启客户端证书验证 DNS那些事 用flask来在线管理你的iptables 屏蔽掉向日葵的有效方法 帝国cms在防止内容采集方面做的工作 身份验证器是如何验证我们的身份? 利用GoogleAppsScript自动回复短信实现保号 Nginx实用模块
帝国CMS快速重置后台密码
榆木 · 2019-06-17 · via 吹比💨

学校一个某网站,说是后台密码忘记了.然后把源码和数据库拿下来研究了一下(其实就是开源的帝国CMS) 登录的关键函数位于/e/class/adminfun.php
还记得当年高中的网站用的也是帝国CMS,当时还想着能不能xxx,现在一看当时还是说有点太年轻(虽然现在也很年轻,哈哈)..

直接贴程序了

<?php
/*
 * @Author: yumusb
 * @Date: 2019-06-17 09:22:50
 * @LastEditors: yumusb
 * @LastEditTime: 2019-06-17 09:22:52
 * @Description: 直接放到帝国CMS根目录运行即可
 */

define('EmpireCMSAdmin', '1');

if (!file_exists('./e/class/connect.php')) {
	exit("Please PUt THis File into The EmpireCMS's root dir !!");
}
require("./e/class/connect.php");
require("./e/class/db_sql.php");
$link = db_connect();
$empire = new mysqlquery();

function ReturnHLoginQuestionStr($userid, $question, $answer)
{
	$pass = md5(md5('-#20empire27#-' . $question . '-empirecms-' . $userid . '-www.phome.net-' . $answer . '-wm-') . '-dg2002-' . $answer . '-wm_chief-' . $userid . '-wangmeng-');
	return $pass;
}
function DoEmpireCMSAdminPassword($password, $salt, $salt2)
{
	$pw = md5($salt2 . 'E!m^p-i(r#e.C:M?S' . md5(md5($password) . $salt) . 'd)i.g^o-d' . $salt);
	return $pw;
}
/*编辑密码*/
function EditPassword($username, $password)
{
	global $empire, $dbtbpre, $gr;
	$a = '';
	$salt = make_password(8);
	$salt2 = make_password(20);
	$password1 = DoEmpireCMSAdminPassword($password, $salt, $salt2);
	$a = "password='$password1',salt='$salt',salt2='$salt2'";

	$sql = $empire->query("update {$dbtbpre}enewsuser set " . $a . " where username='$username'");
	if ($sql) {
		echo "{$username}的密码已经修改{$password}";
	}
}
/*重新设置安全密码*/
function EditQuestion($userid, $question, $answer)
{
	global $empire, $dbtbpre;
	if (!is_numeric($userid) || !is_numeric($userid)) {
		exit("userid and question must be `int` ");
	}
	$answerstr = ReturnHLoginQuestionStr($userid, $question, $answer);
	$a = "equestion='$question',eanswer='$answerstr'";
	$sql = $empire->query("update {$dbtbpre}enewsuseradd set " . $a . " where userid=$userid");
	if ($sql) {
		echo "用户ID{$userid}的安全问题已经修改为: (问题:{$question} 对应答案{$answer} 对应答案密文{$answerstr}";
	}
}
/*删除安全密码*/
function DelQuestion($userid)
{
	global $empire, $dbtbpre;
	if (!is_numeric($userid)) {
		exit("userid must be `int`");
	}
	$sql = $empire->query("update {$dbtbpre}enewsuseradd set equestion=0,eanswer=null WHERE userid=$userid");
	if ($sql) {
		echo "用户ID{$userid}的安全密码已经删除";
	}
}
//EditPassword("admin","admin");
//EditQuestion("1","4","0");
DelQuestion("x");

ReturnHLoginQuestionStr DoEmpireCMSAdminPassword 都是帝国自带的函数,可以看到有关密码的 都是加了盐后多次加密的.

如注释中所写的那样,一共有三个功能.

  1. 编辑密码(应该叫修改指定密码才对) 调用函数EditPassword("admin","admin");其中admin分别是用户名和密码,注意这里的用户名一定要是数据库中存在的.
  2. 编辑指定的安全问答 调用函数EditQuestion("1","4","0"); 1是指的是用户ID,4指的是问题ID,0指的就是答案咯.
  3. 删除指定用户的安全问答 调用函数DelQuestion("1"); 这里面的1是用户ID(根据帝国的机制,删除问答并不是删除这个用户相关的问答表,而是指定该用户不开启问答)

还有一个问题就是,刚开始想到的办法是直接新增一行管理员数据,但是只这样是不可行的,因为帝国会判断问答表里面是否指定该用户不开启问答.如果真的要新增管理员的话,还需要改动问答表相关内容!