实战篇——SQL注入sqli-labs-master靶场实战一

news/2024/7/7 17:55:16/文章来源:https://www.cnblogs.com/yaoguyuan/p/18278574

实战篇——SQL注入sqli-labs-master靶场实战(1)

SQL注入的原理

没有对用户的输入进行合法性判断或过滤,而是直接将其拼接至SQL查询语句当中作为命令执行,从而导致非法操作。

SQL注入的检测

也就是闭合方式的判断,根据报错信息的不同情况可以分为3类——(1)有报错信息 (2)无报错信息,但语法错误和语法正确可区分 (3)无报错信息,语法错误和语法正确不可区分。

(此处参考了https://blog.csdn.net/weixin_46634468/article/details/120480080?spm=1001.2014.3001.5506)

(1) 有报错信息

这是最理想的情况,直接跟上转义字符\即可。

当闭合字符遇到转义字符时,会被转义,那么缺少闭合字符的语句就不完整了,就会报错。

因此转义字符后面跟着的字符就是闭合字符,如果没有就是数字型。

Less-1:单引号闭合

image-20240701150916173

Less-2:数字型

image-20240701151023493

Less-3:单引号加括号闭合

image-20240701151116572

Less-4:双引号加括号闭合

image-20240701151205476

(2) 无报错信息,但语法错误和语法正确可区分

首先尝试:
?id=1'
?id=1"
都报错就是数字型。

单引号报错,双引号不报错:
继续尝试:
?id=1'#
不报错就是单引号闭合,报错就是单引号加括号闭合。

单引号不报错,双引号报错:
继续尝试:
?id=1"#
不报错就是双引号闭合,报错就是双引号加括号闭合。

事实上语法正确又可以分为两类——查询结果非空和查询结果为空,上述判断方法针对的是语法错误和查询结果非空可区分的情形,而针对语法错误和查询结果为空可区分的情形只需将1改为-1即可。

image-20240701152614539

image-20240701152633622

单引号报错,双引号不报错

image-20240701152741587

单引号加注释符不报错,判断为单引号闭合。

(3) 无报错信息,语法错误和语法正确不可区分

也就是回显内容和输入内容无关(时间盲注),这种情况可以通过and sleep(5)#这样的方式根据响应时间判断。

正常情况:

image-20240701153612955

延时响应:

image-20240701153703721

据此判断为单引号闭合。

SQL注入的利用:

(1) 联合注入

有显示位首选联合注入

1.通过order by判断字段数为3

image-20240701154108311

image-20240701154146216

2.通过union select 1,2,3判断显示位为2和3

image-20240701154311972

3.爆库(group_concat)

image-20240701154606674

4.爆表(group_concat)

image-20240701154849680

5.爆字段(group_concat)

image-20240701155057453

6.爆数据(group_concat+concat_ws)

image-20240701155518086

(2) 报错注入

无显示位但有报错信息首选报错注入。

报错注入一般需要使用特定的函数,下面介绍三个可用于报错注入的函数。

(此处参考了https://blog.csdn.net/l2872253606/article/details/124423275)

1. extractvalue

EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称;
第二个参数:XPath_string (Xpath格式的字符串);

返回内容:若Xpath正确则返回目标XML查询的结果,否则返回Xpath错误内容

在Xpath中,插入~和^等特殊字符是非法的,会报错,利用concat函数可以解析SQL语句。

?id=1' and extractvalue('a',concat('~',database(),'~'))#

image-20240701161614870

具体的爆库爆表爆字段爆数据的过程和联合注入没啥区别,唯一需要注意的是报错回显的内容最多只有32位,因此当字符串过长时需要使用substr、mid等截取函数

image-20240701161845929

image-20240701162442167

2. updatexml

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称;

第二个参数:XPath_string (Xpath格式的字符串);

第三个参数:new_value,String格式,替换查找到的符合条件的数据;

返回内容:若Xpath正确则返回更改对象名称,否则返回Xpath错误内容

?id=1' and updatexml('a',concat('~',database(),'~'),'a')#

其实和extractvalue函数没啥区别

image-20240701163220663

3. floor

当group by与rand一起使用时,如果临时表中没有该主键,rand会再计算一次并将第二次计算结果插入临时表,导致主键重复报错

?id=1' and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.schemata group by x)a limit 0,1)#

image-20240701164515424

需要注意的是利用floor进行报错注入不能使用group_concat函数(原因我也不清楚),只能使用limit子句一个一个查询

image-20240701165018208

image-20240701165156637

(3) 布尔盲注

如果既没有显示位也没有报错信息,但查询结果非空和查询结果为空可区分,那么可以使用布尔盲注。

?id=1' and boolean_expression#
?id=-1' or boolean_expression#

手工盲注过程比较繁琐,可以考虑使用相关工具,下面利用Burpsuite进行布尔盲注。

先判断库的数量为9

image-20240701170705734

image-20240701170734458

再判断每个库名的长度(非手工盲注不需要这一步)

image-20240701171147451

image-20240701171549262

最后判断每个库的名称

image-20240701172013236

image-20240701173650584

可见第一个库的名称是information_schema......

后续爆表爆字段爆数据的过程就不再演示了,和爆库的过程基本一致。

(4) 时间盲注

如果既没有显示位也没有报错信息,甚至连查询结果非空和查询结果为空都不可区分,那就只好用时间盲注了。

?id=1' and if(boolean_expression,sleep(5),1)#

image-20240701174905773

image-20240701174825788

根据响应时间,判断库的数量为9。

利用时间盲注爆库爆表爆字段爆数据的过程就不再演示了,和布尔盲注基本一致。

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

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

相关文章

不用虚拟机在Windows上安装Linux子系统(win11)

打开终端输入以下命令查看是否支持安装systeminfo最底下是4个yes代表支持 在开始菜单输入如下搜索 打开拉到最底下,勾选这两个选项 按照提示重启电脑 打开终端输入以下命令会自动安装最新的Ubuntu发行版wsl --install可以通过如下命令查看其他版本wsl --list --online安装过程…

manim边学边做--Tex

Tex类继承自MathTex,具体功能和MathTex差不多,有一些细节的差别。在实际的使用中,我感觉Tex在结合一般文本和公式时更方便一些,所以我用的比较多的是Tex。Tex在manim各个模块中的位置大致如上图中所示。 1. Tex与MathTex区别 Tex的主要参数和方法和MathTex是一样的,所以本…

[开源分享]好用的在线客服系统 PHP客服系统源码 聊天源码(开源代码+终身使用+安装教程+全新UI)

源码介绍 PHP在线客服系统源码采用全新UI,重新设计前端界面,后台采用php+mysql,免费开源源码。在线客服系统已成为企业与客户之间沟通的重要渠道。通过在线客服系统,企业可以方便地与客户进行实时沟通和解决问题,提升客户满意度。php客服系統源码主要功能要求: 全新UI 自动…

不只是前端,后端、产品和测试也需要了解的浏览器知识

一、我们为什么要了解浏览器? 1. 对于前端开发者 1.浏览器是用户体验的第一线。我们需要了解浏览器的工作原理,才能有效地设计和实现用户界面,确保良好的用户体验。 2.好的产品需要考虑浏览器兼容性。我们需要了解这些差异,以确保网站或应用在不同的浏览器中都能正常工作,…

从人工到自动化到AIOps再到ChatOps:大模型在运维领域的应用

一、引言 在信息技术飞速发展的今天,运维工作已经从最初的人工操作,逐步演变为自动化、AIOps(人工智能运维)和ChatOps(通过聊天的方式去运维)。这些变革不仅提升了运维效率,还显著保障了系统的稳定性。特别是借助大模型,运维同学能够更加高效地完成工作,并应对复杂的运…

ros microros 使用超声波雷达测量距离

我们使用的超声波模块一共有四个引脚,分别是TRIG 即发送引脚,用于发送超声波ECHO 即接收引脚,用于接收反射回来的超声波VCC 电源接5VGND 电源地 一、新建工程新建example18_sr04二、编写代码带注释的代码如下#include <Arduino.h> #define Trig 27 // 设定SR04连接的A…

tensorflow-gpu配置

1.安装Anaconda 下载地址:Anaconda | The Operating System for AI 2.查询tensorflow-gpu不同版本所对应的python、cuDNN和CUDA的版本 官网:在 Windows 环境中从源代码构建 | TensorFlow (google.cn) 3.使用conda安装相应的库# tensorflow_gpu-2.3.0 conda init conda crea…

Charles 使用

一、下载安装官网:https://www.charlesproxy.com/二、移动端抓包 2.1、安装证书 设置代理弹出对应的 代理ip 和端口号,在移动端的wifi 配置对应的代理,然后返回对应的证书地址 下载证书 安装 即可

ubuntu与windows双系统时间不同步

两个系统时间不同步是因为对于硬件时间(BIOS里的时间)的时区认定不一致,windows认为BIOS的时间是当前系统时区(中国时区:UTC+08(CST-8)),ubuntu认为BISO时间是UTC时区时间.两个系统在启动是按照BISO时间设置系统时间导致了系统时间差异。 处理思路无非,修改windows或者ub…

图像采集卡是什么,有什么用处

机器视觉技术的发展源于光学、化学、物理、电子、电视、机械设计、数学、软件、人工智能、计算机和计算机视觉以及互联网等领域的发现。随着这些不同学科取得某些里程碑式的进展,它们为开发用于自动检查、测量、过程控制和机器人引导应用的成像系统铺平了道路。 图像采集卡是许…

如何把电子书转成EPUB?

大家知道EPUB是什么格式吗?其实EPUB是一种电子图书标准,由国际数字出版论坛提出。它是一个自由的开放标准,属于一种可以“自动重新排版”的内容;也就是文字内容可以根据阅读设备的特性,以较适于阅读的方式显示。有很多时候,不同的阅读器所支持的电子格式是不一样的,所以…

一文读懂“负载均衡”

原文链接:https://blog.csdn.net/cyl101816/article/details/135195729 负载均衡无处不在,无论是分布式,还是中间件,还是微服务,都需要涉及到负载均衡。 一、什么是负载均衡负载均衡是一种在计算机网络和系统架构中使用的技术,用于均衡分发工作负载到多个资源,比如:服务…

ros mocroros 使用双核运行microros

在硬件篇开始的第一节时,曾提到,我们所使用的开发板单片机是双核240M主频的,但是在后面的开发中我们并没有真正的使用了双核,主频也是使用的默认160MHZ。所以本节带你一起带你一起提升主频并启动双核进行MicoROS的双核。 一、双核与RTOS介绍 所谓双核指的是ESP32单片机有两…

SpringMVC的数据获取问题

在传统的javaweb中我们获取数据是通过HttpServletRequest中的getParameter或者getHeader等方法来获取相关的信息。由此我们引出了以下问题:在SpringMVC中应该如何获取请求提交的数据呢? 在SpringMVC中又应该如何获取请求头信息呢? 在SpringMVC中又应该如何获取客户端提交的C…

mysql用户

一、数据库用户管理 DCL:数据控制语言,用于设置或者更改数据库用户或角色权限 1.新建用户create user 用户名@源地址 identified by 密码;用户名 指定将创建的用户名来源地址 指定新创建的用户可在哪些主机上登录 可使用IP地址、网段、主机名的形式 本地用户可用localhost …

可视化

D3.js绘制柱形图 <!DOCTYPE html><html lang="en"><head><title>bar example</title><script src="d3.min.js"></script></head><body><div id="barchart"></div><script…

【0基础学爬虫】爬虫基础之scrapy的使用

【0基础学爬虫】爬虫基础之scrapy的使用大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速…

springboot使用itextpdf+jfreechart制作PDF文档

1. springboot引入的依赖组件 项目中需要引入itextpdf和jfreechart两个组件,版本根据项目所需进行引入,maven组件版本查询可根据如下地址进行查询:maven组件查询<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId&g…

spring趣玩

自定义banner 先上图片,替换spring启动标志;或者也可以在启动类代码设置Banner也可以通过设置springApplication.setBannerMode(Banner.Mode.OFF);关闭打印横幅ApplicationRunner和@PostConstruct ApplicationRunner 是一种灵活的机制,可以用来执行数据库迁移、预加载数据、…