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

前言:现在的网站架构复杂,大多都有多个应用互相配合,不同应用之间往往需要数据交互,应用之间的编码不统一,编码自身的特性等都很有可能会被利用来绕过或配合一些策略,造成一些重大的漏洞。

 

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

众所周知,计算机只能够理解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则会不识别等,熟知不同程序的处理方式,也会对渗透提供帮助。

总结

黑客&网络安全如何学习

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

 1.学习路线图 

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

2.视频教程

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

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

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

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

3.技术文档和电子书

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

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

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

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

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

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/352126.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

货代小白快来收藏‼️普货与非普货的区别

普货是指不属于以下类别的普通货物 危险品 冷冻/冷藏品 违禁品 仿牌货 敏感货 危险品 危险品具体分为九类: 爆炸品 压缩气体 易燃液体 易燃固体、易燃物品和遇湿易燃物品 氧化剂和有机氧化物 有毒和感染性物品 放射性 腐蚀性 杂类 冷冻/冷藏品 主要是指以食品为主的…

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果

前言 第一次使用海康视觉算法平台VisionMaster 4.3.0,项目中要使用这个平台进行视觉处理并获取结果。 运行效果 开发环境 C#, WPF, vs2022, 海康视觉算法平台VisionMaster 4.3.0 基本概念 上图这些.sol为后缀的是vm的方案文件。 打开方案文…

海南云亿商务咨询有限公司助力商家腾飞新高度

在数字化浪潮席卷全球的今天,电商行业正迎来前所未有的发展机遇。海南云亿商务咨询有限公司,作为抖音电商服务的佼佼者,凭借其专业的团队和丰富的经验,正成为越来越多企业实现电商转型与升级的得力助手。 海南云亿商务咨询有限公…

AI写代码,CS还有前途吗?加州大学伯克利分校:CDSS申请人数激增48%!

目录 01 CS入学人数暴涨 02 人类Coder可堪大任 03 AI还没有学会创新 04 编程与农耕不同 AI写了这么多代码,你还应该学习计算机科学吗? 新的数据显示,学生们仍然热衷于选修计算机科学:加州大学伯克利分校(UCB&#…

Python基础用法 之 转义字符

将两个字符进⾏转义 表示⼀个特殊的字符 \n ---> 换⾏,回⻋ \t ---> 制表符, tab键 注意: print( end\n): print() 函数中默认有⼀个 end\n, 所以,每个 print 结束之后, 都会输出⼀ 个换行。 未完待续。

一个示例学习C语言到汇编层面

给出以下代码 #include<stdio.h> int main() {int x 0, y 0, z 0;while (1) {x 0;y 1;do {printf("%d\n", x);z x y;x y;y z;} while (x < 255);}return 0; }我们把这个程序编写成32位程序&#xff0c;然后我们放入IDA中进行分析 .text:0080187…

WebGIS如何加载微件

本篇文章以加载切换底图微件做示范 首先&#xff0c;添加require "esri/widgets/ScaleBar",//比例尺"esri/widgets/Legend",//图例"esri/widgets/basemapGallery" 然后添加加载切换底图的组件代码 const basemapGallery new BasemapGallery(…

SaaS产品运营|一文讲清楚为什么ToB产品更适合采用PLG模式?

在数字化时代&#xff0c;ToB&#xff08;面向企业&#xff09;产品市场的竞争愈发激烈。为了在市场中脱颖而出&#xff0c;许多企业开始转向PLG&#xff08;产品驱动增长&#xff09;模式。这种模式以产品为核心&#xff0c;通过不断优化产品体验来驱动用户增长和业务发展。本…

一个开源的快速准确地将 PDF 转换为 markdown工具

大家好&#xff0c;今天给大家分享的是一个开源的快速准确地将 PDF 转换为 markdown工具。 Marker是一款功能强大的PDF转换工具&#xff0c;它能够将PDF文件快速、准确地转换为Markdown格式。这款工具特别适合处理书籍和科学论文&#xff0c;支持所有语言的转换&#xff0c;并…

语义分割和目标检测的关系

目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 &#xff08;1&#xff09;物体的位置 &#xff08;2&#xff09;物体的分类 从数据格式来说 (1&#xff09;语义分割的数据格式 (2&#xff09;目标检测的数据格式 1.语义分…

Ollama:本地部署大模型 + LobeChat:聊天界面 = 自己的ChatGPT

本地部署大模型 在本地部署大模型有多种方式&#xff0c;其中Ollama方式是最简单的&#xff0c;但是其也有一定的局限性&#xff0c;比如大模型没有其支持的GGUF二进制格式&#xff0c;就无法使用Ollama方式部署。 GGUF旨在实现快速加载和保存大语言模型&#xff0c;并易于阅读…

如何通过Appium连接真机调试

1、打开appium&#xff0c;点击启动appium服务器&#xff08;如图1&#xff09; 2、appium启动成功后&#xff0c;点击放大镜启动检查会话&#xff08;如图2&#xff09; 3、填写真机设备信息和APP的package、activity,点击启动会话&#xff08;如图3&#xff09; 4、打开运行A…

vscode 连接 GitHub

目录 vscode连接github一、解决 github 登录问题二、通过 SSH 连接 github1、只有一个 git 账号2、切换 git 账号3、在两个账号之间切换 vscode 连接 gitee一、通过 HTTPS 连接二、通过 SSH 连接 vscode连接github 在 vscode 中首次使用 git push 命令时会要求输入 github 账户…

梳理Y3游戏编辑器入门者需要明白的基础概念

前言 Y3编辑器是网易开发的一款类似于“War3地图编辑器”的产品。 最近KK对战平台上不少热门的RPG地图都出自Y3编辑器&#xff1a; 最近我花了些时间学习了这款编辑器的基础知识。我发现其中很多概念是比较抽象需要理解的&#xff0c;而有些概念比如“物件”、“物体”、“物…

vue2实现一个简易实用的日历(可特殊标记多个日期)

效果如下&#xff1a; <template><div class"calendar"><div class"header"><button click"previousMonth"><</button><h2>{{ currentYear }}-{{ currentMonth }} </h2><button click"nex…

成都爱尔胡建斌院长提醒一张眼底照,眼病早知道

眼底藏在眼睛后方&#xff0c;平时没注意无察觉&#xff0c;其实非常重要。它包含的部位多掌控着视觉问题&#xff0c;稍不注意就是视觉受损&#xff0c;视觉缺失&#xff0c;严重的甚至失明致盲。 眼球前面的角膜、晶体等&#xff0c;被称为眼前段&#xff0c;后面则被称之为…

-------------------------面试散文-----------------------------------

问题1&#xff1a;vue中动态引入图片&#xff0c;为什么使用require&#xff1f; 回答&#xff1a;因为动态添加的src 编译过后的文件地址和被编译过后的资源文件地址不一致&#xff0c;从而导致无法访问题 而使用require 返回的就是资源文件被编译后的文件地址&#xff0c;从…

kafka在windows上的启动

启动zookeeper 解压kafka安装包到对应目录下&#xff0c;找到对应config目录下的zookeeper.properties文件 新建一个data文件夹&#xff0c;随便放哪 打开该文件&#xff0c;找到 dataDir/tmp/zookeeper 属性 将原来的属性值&#xff0c;修改为新建data文件夹地址&#xff0c;…

虚拟声卡实现音频回环

虚拟声卡实现音频回环 一、电脑扬声器播放声音路由到麦克风1. Voicemeeters安装设置2. 音频设备选择 二、回声模拟 一、电脑扬声器播放声音路由到麦克风 1. Voicemeeters安装设置 2. 音频设备选择 以腾讯会议为例 二、回声模拟 选中物理输入设备“Stereo Input 1”和物理输出设…

Excel小技巧| 批量多列多行转为一列

前期刘小生Star分享了Excel批量一列转多列多行&#xff0c;你学会了嘛&#xff01; 前期刘小生遇到需“对多列对行数据合并并找到唯一不重复的信息”&#xff0c;今天举一反三&#xff0c;继续沿用“替换等号”方法&#xff0c;将多列多行转为一列&#xff01; 下面一个模拟案…