ThinkCMF忘记密码,注入破解

刚开始用ThinkCMF的时候,在本地环境和数据库不停迁移测试的时候,经常忘记登陆密码。虽然可以使用MD5重新加密,再在数据库重置密码,但“懒惰”使人进步,每次找秘钥重新加密在改数据库毕竟麻烦,所以写一段代码来方便使用。

ca64e10a947ec7c43857e1832276256.png

php代码

文件地址:复制进安装模板的首页index.html中记得加php标签

以下代码仅限于你拥有FTP权限,如果想做一些踩线的活动,早点洗洗睡吧!┑( ̄Д  ̄)┍

//获取 database 文件内容
$type = Config('database.type');			// 数据库类型
$hostname = Config('database.hostname');	// 服务器地址
$database = Config('database.database');	// 数据库名
$username = Config('database.username');	// 用户名
$password = Config('database.password');	// 密码
$hostport = Config('database.hostport');	// 端口
$charset = Config('database.charset');		// 数据库编码
$prefix = Config('database.prefix');		// 数据库表前缀
$authcode = Config('database.authcode');	// cookie前缀

// 建立 MySQL 服务器链接
$conn = mysqli_connect($hostname, $username, $password);

// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
if(! $conn )
{
    die("-----服务器连接失败: " . mysqli_error($conn) . "-----<br/>");
}else {
    echo "-----服务器链接成功-----<br>".
	 "类型:" .$type. "<br>". 
	 "地址:" .$hostname. "<br>". 
	 "数据库名:" .$database. "<br>". 
	 "用户名:" .$username. "<br>".
	 "密码:" .$password. "<br>".
	 "端口:" .$hostport. "<br>".
	 "编码:" .$charset. "<br>".
	 "表前缀:" .$prefix. "<br>".
	 "Cookie前缀:" .$authcode. "<br>";
}

// 链接数据表
mysqli_select_db( $conn, $database );

//重置账号密码
echo "-----重置账号密码-----<br>";
$an = "hydra";
$pw = "123456";
function cmf_pass($pw, $authcode)
{
    $result = "###" . md5(md5($authcode . $pw));
    return $result;
}
$psw = cmf_pass($pw, $authcode);
echo "账号:" . $an."<br>";
echo "密码:" . $pw."<br>";
echo "密文:" . $psw."<br>";

$user_id = 10001;
$id = 99;
// 创建新用户并赋予管理员权限
$create_sql = "INSERT INTO cmf_user (id, user_type, user_status, user_login, user_pass)
VALUES ('$user_id', '1', '1', '$an', '$psw')";
$create_sql2 = "INSERT INTO cmf_role_user (id, role_id, user_id)
VALUES ('$id', '1', '$user_id')";
echo "-----插入数据表-----<br/>";
if ($conn->query($create_sql) === TRUE) {
    echo "创建新用户:OK!" . "<br>";
} else {
    echo "错误: " . $conn->error . "<br>";
}
if ($conn->query($create_sql2) === TRUE) {
    echo "管理员权限:OK!" . "<br>";
} else {
    echo "错误: " . $conn->error . "<br>";
}

//读取数据
$sql = 'SELECT id, user_type, 
        user_status, user_login, user_pass
        FROM cmf_user';
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('-----无法读取数据: ' . mysqli_error($conn) . "-----<br/>");
}else {
    echo "-----读取数据表成功-----<br/>";
}

// 输出信息
if (mysqli_num_rows($retval) > 0) {
    while($row = mysqli_fetch_assoc($retval)) {
		if($row["user_type"]==1){
			echo "ID: " . $row["id"]. 
			" - Type: " . $row["user_type"]. 
			" - 状态:" . $row["user_status"] . 
			" - 用户名:" . $row["user_login"] .
			" - pass:" . $row["user_pass"]. "<br>";
		}
    }
}

mysqli_close($conn);

看完这段代码,有没有发现这种方式很危险,直接在模板中获取到database文件,所以个人建议下载网上的模板虽然方便,但毕竟安全性和熟悉程度不高。

所以建议初学者模板自己写,写的多了,对ThinkCMF也会更加了解。

Comments 0

1.185398s