首页 > 其他分享 >编码在网络安全中的应用和原理

编码在网络安全中的应用和原理

时间:2024-06-20 10:02:58浏览次数:14  
标签:网络安全 编码 UTF 字节 GBK 原理 ASCII

什么是编码,为什么要有编码?

众所周知,计算机只能够理解0和1,也就是二进制。可是我们的世界0和1以外,还有太多太多的符号和语言了,这时候,我们通过人为的规定一种0和1的排列组合顺序为某一种符号或者语言,这就是编码。是一种人为的规定的一种映射集合。

想要了解网络安全,学习网络安全知识的小伙伴可以扫描下方二维码哦~

 

常见的一些编码的介绍(已经了解也可以看看,有一些我的个人总结)

ASCII:

因为一开始计算机只在美国用,要表达的也仅仅是大小写英文单词和一些特殊符号等。于是用八位的字节的01不同顺序来表示一些想表示的符号,所以一共可以组合出256种不同的状态。他们把其中的编号从0开始的32种状态分别规定了特殊的用途,33号以后到127表示一些英文单词,运算符号,阿拉伯数字等。可是之后计算机的普及,导致各个国家都能够使用上计算机,而每个国家又有自己的一些特定符号语言,这之后ASCII哪怕后128位都用上(比如latin1就是把ASCII的扩充),都不够用了,于是就出现了很多国家就自己创建了一些编码,把自己国家的一些符号语言加入进去,比如下面的GBK编码。

GBK

GBK是我们国家为了应付ASCII放不下汉字等(还有一些其他想表达的)而制定的一套编码,其中废弃了ASCII127之后所有的字符,规定一个小于127的字符的意义与原来相同,但大于128的字符表示和其后一字节字符连在一起,表示一个汉字。前身还有GB2312等,GBK是汉字加的最多的。而所谓的半角全角字符其实就是ASCII中原先定义的和GBK2个大于127定义字符的区别。还有说一个中文等于两个英文,也是这个编码的原因

UNCODE

如果每个国家都有自己的编码规则,而计算机又是一个大的网络,那信息交互不是就存在很大的问题了,你讲英语而我的规则的中文,那肯定就不能交流了,所有就有了UNCODE,其中规定两个ASCII为一个UNCODE  原来的ASCII就在前面填充0,然后把各国需要的一些字符加入到规则映射集合里,所以,这套规则就不存在一个中文等于两个英文了。所以就有了严重的浪费,一个英文都有八位的字节浪费。在网络传输中,这是不能忍受的。并且,当从中间开始匹配时,也不知道这个字节是第一个还是第二个。所以都没有推广开。

UTF-8:

这套编码就是解决UNCODE的空间浪费,他把UNCODE的进行分割,第一类就是原来的最高的ASCII的127个,127在二进制需要7位,所有用0XXXXXXX来表达,而之后的UNCODE采用6位分一组的方式写道UTF-8,可能直接说会有点晕晕的,我拿一个例子。比如二进制码为0110 1100 0101 0111的UNCODE的码表达的是中文汗,转换成UTF-8就是先6位从后到前分组0110 110001 010111,不难看出这里一共分了3组,所有UTF-8在第一字节先写上3个1,表示自己是3个字节的,再在3个1后面加0,这是规定,别问为什么。所以第一个字节还剩下4个可用字节,然后在往后的字节开头都为10,还剩下6个可用字节,6+6+4=16,刚好把之前的2字节的UNCODE码给抄上去,所以UTF-8表达“汗”就是11100110 10110001 10010111

URL编码:

URL编码主要是在WEB传输中方便WEB容器识别而制定的一套规则,比如URL为 http://www.0d9y.cn/index.php?a==&3&&b=&3,那么到底参数是什么,就很难说,所有URL编码就是为了让这些分隔符更好的被识别出来,所有任何参数里包含分隔符的都必须把符号用URL编码的方式来表达。URL编码的对应规则就是根据传输协议的编码的16进制形式给每个十六进制加上百分号%。例如“汗”,传输协议是UTF-8,则UTF编码就是%e6%b1%97,和上面刚好对应。

编码引起的安全

GBK编码绕过GPC 

这个相信大家都听说过,但是不知道大家有没有仔细思考过为什么呢?拿这个例子带大家深入理解编码和安全的关系。

首先一次SQL注入需要考虑的编码有网页前端编码,因为这个编码会在URL编码中用到,然后就是后台PHP和数据库连接时用到的编码,最后就是数据库本身的编码。

虽然由于编码不一致导致的漏洞很多,但在我看来,这次绕过主要就是GBK编码一个缺陷而并非任何编码不一致。

GPC是PHP的一种防注入手段,会给所有的对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()函数,如果数据中有",',\,NULL会在前面加上\达到转义的效果。现在版本的PHP一般默认不开启,不过利用addslashes()函数来过滤数据依旧很普遍。首先什么是GBK编码绕过GPC呢?就是可以用如%DF来配合GPC或者 addslashes(),在编码转换存在问题的时候,就会生成一个乱码加上单引号',造成SQL注入安全。原理如下:

单引号'和反斜杠\都在ASCII表里,ASCII码分别是0x5C、0x27,当网页前端返回编码是GBK时,则单引号'的内码就是01011100,如果网页前端返回编码是UTF-8时,内码同样也是01011100。PHP的addslashes()会给单引号进行转义,在其前面加上反斜杠\,(假设后端PHP编码是GBK)在GBK编码下,内码是00100111,(假设后端PHP编码是UTF-8) 在UTF-8编码下,内码同样也是00100111,所以网络上很多人说只有前端是GBK才会有这个漏洞是错误的,因为不论前端后端是什么编码,单引号'或者反斜杠\内码都是一样的。

而这个漏洞的名称为什么叫GBK编码绕过GPC呢,很简单,当你哪里会用到你注入的这段污点参数,而那里用的编码是GBK,这个漏洞就会存在。这是GBK编码的特性决定的。因为GBK编码的定义是,当遇到一个字节其表示二进制数值转换成十进制后大于128就会默认这个字节和之后一个字节合并表示一个汉字,就把后面反斜杠\的内码吃掉了组成一个汉字(可能有点绕,多读两遍就好了,不理解可以来我的博客或者下方留言)。

为什么要注入%DF呢?因为%DF是经过URL编码的,不管这个URL编码是通过哪一种编码DECODE来的,可以确定的是,这个URL编码其最终的内码就是11011111,转换成10进制是223,是大于127的,所以其实不一定是%DF,%81以上,其实都是可以的。不过值得一体,我测试最新版本的mysql时,发现mysql把二进制转换成GBK编码的时候似乎能避免这个漏洞。这里还比较疑惑,以后等我弄明白了再给大家解释。

UTF-8编码引起的编码绕过

上面已经解释过UTF8编码的定义了,所以不妨设想一下,一个ASCII编码是不是除了0加ASCII外,可以自定义字节呢?比如说单引号',UTF-8解码就是01011100,那么11000001 10011100 代表不也是单引号'么 甚至11100000 10000001 10011100 是不是也可以代表单引号'呢?经过测试,发现有一些系统可以识别这种加长后的二进制码,而有一些又不可以,具体原因不解,等以后理解深入继续解答。不过这不尝是一种绕过的技巧,如果WAF不能识别加长版的UTF-8嘛而其他调用的组件又可以识别,那就可以成功利用,之前的Apache  Tomcat目录遍历漏洞,就是利用这个方法,把/../进行加长编码。再比如%00截断,也可以用%C080,一旦WAF没有解析而PHP解析了,就会照成漏洞。

不同程序对畸形编码的处理方式不同

拿一道CTF的题目来给大家介绍,首先是一个名叫ctf的数据库,其中表名为name,字段id有且仅有字符型数据"ctf",PHP源代码如下图怎么样进行绕过拿到flag呢?

屏幕快照 2017-12-07 上午12.19.50.png

不难看出,其中就是$id和数据库取回来$row['id']的要不一样,然后数据库连接编码是utf8,所以我们可以构造参数id=ctf%c2的方式进行绕过,因为PHP对畸形的编码%FF会输出ASCII扩展码里的内容,而数据库mysql则会对其进行过滤,直接忽略,这也就可以绕过CTF中的$id=='ctf'的限制了。再比如前面的ApacheTomcat容器,对畸形的非最短UTF-8编码就会进行解析,而Nginx则会不识别等,熟知不同程序的处理方式,也会对渗透提供帮助。

题外话

初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:

  • 2023届全国高校毕业生预计达到1158万人,就业形势严峻;
  • 国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。

一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。

6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。

2022届大学毕业生月收入较高的前10个专业

本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。

具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。

 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 

网络安全行业特点

1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

 2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。

 行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

 1.学习路线图 

 攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

 (都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。 

 因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。 

 还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

 最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

 因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取 

  

标签:网络安全,编码,UTF,字节,GBK,原理,ASCII
From: https://blog.csdn.net/2401_84466361/article/details/139766669

相关文章

  • spring中@Async注解底层线程池实现原理
    一、前言开发中我们经常会用到异步方法调用,具体到代码层面,异步方法调用的实现方式有很多种,比如最原始的通过实现Runnable接口或者继承Thread类创建异步线程,然后启动异步线程;再如,可以直接用java.util.concurrent包提供的线程池相关API实现异步方法调用。如果说可以用一行代码快速......
  • 移植案例与原理 - HDF驱动框架-OSAL
    为了提升驱动代码在不同内核子系统间的可复用能力,OpenHarmonyHDF(HardwareDriverFoundation)驱动框架提供了OSAL(OperatingSystemAbstractionLayer)操作系统抽象层接口。OSAL为驱动程序提供了任务、定时器、互斥锁、信号量等基础库相关接口,使驱动相关的实现不再依赖于具......
  • 移植案例与原理 - startup子系统之bootstrap_lite服务启动引导部件(1)
    bootstrap_lite服务启动引导组件提供了各服务和功能的启动入口标识。在SAMGR(Systemabilitymanager,系统服务管理)启动时,会调用bootstrap_lite标识的入口函数,并启动系统服务。本文介绍下移植开发板时如何适配服务启动引导部件bootstrap_lite,并介绍下相关的运行机制原理。bo......
  • 《网络安全设计权威指南》阅读笔记
    安全系统工程是关于如何优化目标系统,使目标系统风险最小化,而不是如何最大化网络安全的投资规模。安全权衡的因素:用户友好度、时间、员工士气、商机流失、机会成本、服务或产品的数量、质量及成本、有限资源(算力、电力、空间等)避免为敌对者提供高价值目标,避免价值汇聚。知道他人......
  • 网络安全筑基篇——CSRF、SSRF
    前言本篇文章相对于来说比较水,大家看不懂的话,多去百度,去了解相关的知识大家一定要多去理解这个原理,理解的同时去打打靶场,就能很快上手啦什么是CSRF?CSRF(即跨站请求伪造)是指利用受害者尚未失效的身份认证信息、(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面......
  • 计算机组成原理--第四章指令系统
    目前正在备考25考研,现将25计算机408学习整理的知识点进行汇总整理。一、指令系统1.1指令的定义指令就是计算机要执行某种操作的命令。一台计算机中所有机器指令的集合就是这台计算机的指令系统也称指令集。指令系统的引入是为了避免用户与二进制代码直接触。一般来说PC......
  • Java设置JSON字符串参数编码
    1.如何在Java中创建JSON字符串在Java中创建JSON字符串,我们可以使用多个库,其中最流行的是Jackson、Gson和org.json。以下是使用这些库创建JSON字符串的示例:1.1使用Jackson库(1)首先,确保我们的项目中包含了Jackson的依赖(如果我们使用Maven,可以参考前面的示例)。(2)创建一个Java对象(例......
  • 渲染农场深度解析:原理理解、配置要点与高效使用策略
    许多设计领域的新手可能对“渲染农场”这一概念感到陌生。渲染农场是一种强大的计算资源集合,它通过高性能的CPU和GPU以及专业的渲染引擎,为设计项目提供必要的渲染支持。这种平台由多台计算机或渲染节点组成,形成一个分布式网络,共同分担复杂的渲染任务。利用这种集体处理能力,渲染农......
  • 【重要】国内使用GPT-4O教程只看这一篇就够了!GPT-4O可一天一周使用?内含免费使用GPT-4O
    1.常见问题Q:GPT-4O是什么?A:5月14日,OpenAI在活动中发布了新旗舰模型“GPT-4o”!据OpenAI首席技术官穆里·穆拉蒂(MuriMurati)介绍,GPT-4o在继承GPT-4强大智能的同时,进一步提升了文本、图像及语音处理能力,因此可以理解为GPT4-Plus。Q:GPT-4O国内可以用吗?A:国内是不可以直接使......
  • LLM大模型: FlagEmbedding-BiEncoderModel原理和源码解析
    NLP常见的任务之一是高效检索:在大规模语料库中快速检索与查询相关的段落或文档;用户输入query,要在语料库中找到语义最接近、最匹配的回答!此外,还有文本分类、情感分析等下游任务需要先把文本的embedding求出来,这些功能都能通过"双塔结构"(Bi-Encoder)实现!核心思路很简单:用两个不同......